Membangun dan menyebarkan ke Azure Kubernetes Service dengan Azure Pipelines

Azure DevOps

Gunakan Azure Pipelines untuk menyebarkan secara otomatis ke Azure Kubernetes Service (AKS). Azure Pipelines memungkinkan Anda membangun, menguji, dan menyebarkan dengan integrasi berkelanjutan (CI) dan pengiriman berkelanjutan (CD) menggunakan Azure DevOps.

Dalam artikel ini, Anda akan mempelajari cara membuat alur yang terus-menerus membangun dan menyebarkan aplikasi Anda. Setiap kali Anda mengubah kode Anda di repositori yang berisi Dockerfile, gambar didorong ke Azure Container Registry Anda, dan manifes kemudian disebarkan ke kluster AKS Anda.

Prasyarat

Mendapatkan kode

Buat cabang pada repositori berikut yang berisi aplikasi contoh dan Dockerfile:

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Membuat sumber daya Azure

Masuk ke portal Microsoft Azure, lalu pilih tombol Cloud Shell di sudut kanan atas. Gunakan Azure CLI atau PowerShell untuk membuat kluster AKS.

Membuat registri kontainer

# Create a resource group
az group create --name myapp-rg --location eastus

# Create a container registry
az acr create --resource-group myapp-rg --name mycontainerregistry --sku Basic

# Create a Kubernetes cluster
az aks create \
    --resource-group myapp-rg \
    --name myapp \
    --node-count 1 \
    --enable-addons monitoring \
    --generate-ssh-keys

Masuk ke Azure Pipelines

Masuk ke Azure Pipelines. Setelah Anda masuk, browser Anda masuk ke https://dev.azure.com/my-organization-name dan menampilkan dasbor Azure DevOps Anda.

Dalam organisasi yang Anda pilih, buat proyek. Jika Anda tidak memiliki proyek apa pun di organisasi Anda, Anda melihat layar Buat proyek untuk memulai. Jika tidak, pilih tombol Buat Project di sudut kanan atas dasbor.

Membuat alur

Menghubungkan dan memilih repositori Anda

  1. Masuk ke organisasi Azure DevOps Anda dan buka proyek Anda.

  2. Buka Alur, lalu pilih Alur baru.

  3. Lakukan langkah-langkah wizard dengan terlebih dahulu memilih GitHub sebagai lokasi kode sumber Anda.

  4. Anda dapat diarahkan ke GitHub untuk masuk. Jika demikian, masukkan informasi masuk GitHub Anda.

  5. Saat Anda melihat daftar repositori, pilih repositori Anda.

  6. Anda mungkin diarahkan ke GitHub untuk menginstal aplikasi Azure Pipelines. Jika demikian, pilih Setujui & instal.

  7. Pilih Sebarkan ke Azure Kubernetes Service.

  8. Jika Anda diminta, pilih langganan tempat Anda membuat registri dan kluster.

  9. Pilih kluster myapp.

  10. Untuk Namespace, pilih Yang sudah ada, lalu pilih default.

  11. Pilih nama registri kontainer Anda.

  12. Anda dapat membiarkan nama gambar diatur ke default.

  13. Atur port layanan ke 8080.

  14. Atur kotak centang Aktifkan Aplikasi Tinjau untuk Permintaan Pull untuk meninjau konfigurasi terkait aplikasi yang akan disertakan dalam alur YAML yang dibuat secara otomatis dalam langkah-langkah berikutnya.

  15. Pilih Validasi dan konfigurasikan.

    Saat Azure Pipelines membuat alur Anda, prosesnya akan:

    • Buat koneksi layanan registri Docker untuk mengaktifkan alur Anda untuk mendorong gambar ke registri kontainer Anda.

    • Buat lingkungan dan sumber daya Kubernetes di dalam lingkungan. Untuk kluster yang didukung RBAC, sumber daya Kubernetes yang dibuat secara implisit membuat objek ServiceAccount dan RoleBinding di kluster sehingga ServiceAccount yang dibuat tidak dapat melakukan operasi di luar namespace yang dipilih.

    • Buat file azure-pipelines.yml, yang menentukan alur Anda.

    • Buat file manifes Kubernetes. File ini dibuat dengan menghidrasi template deployment.yml dan service.yml berdasarkan pilihan yang Anda buat. Saat Anda siap, pilih Simpan dan jalankan.

  16. Pilih Simpan dan jalankan.

  17. Anda dapat mengubah Pesan penerapan menjadi sesuatu seperti Tambahkan alur ke repositori kami. Saat Anda siap, pilih Simpan dan jalankan untuk menerapkan alur baru ke dalam repositori Anda, lalu mulai eksekusi pertama dari alur baru Anda!

Melihat penyebaran aplikasi Anda

Saat alur Anda berjalan, perhatikan tahap build Anda, lalu tahap penyebaran Anda, dari biru (berjalan) menjadi hijau (selesai). Anda dapat memilih tahapan dan pekerjaan untuk melihat alur Anda yang dijalankan.

Catatan

Jika Anda menggunakan agen yang dihosting Microsoft, Anda harus menambahkan rentang IP agen yang dihosting Microsoft ke firewall Anda. Dapatkan daftar mingguan rentang IP dari file JSON mingguan, yang diterbitkan setiap hari Rabu. Rentang IP baru mulai berlaku pada hari Senin berikutnya. Untuk informasi selengkapnya, lihat agen yang dihosting Microsoft. Untuk menemukan rentang IP yang diperlukan untuk organisasi Azure DevOps Anda, pelajari cara mengidentifikasi kemungkinan rentang IP untuk agen yang dihosting Microsoft.

Setelah eksekusi alur selesai, jelajahi apa yang terjadi lalu lihat aplikasi Anda disebarkan. Dari ringkasan alur:

  1. Pilih tab Lingkungan.

  2. Pilih Lihat lingkungan.

  3. Pilih instance aplikasi Anda untuk namespace layanan yang Anda terapkan. Jika Anda menggunakan default, maka itu adalah aplikasi myapp di namespace default .

  4. Pilih tab Layanan.

  5. Pilih dan salin alamat IP eksternal ke clipboard Anda.

  6. Buka tab atau jendela browser baru dan masukkan <alamat IP>:8080.

Jika Anda membangun aplikasi contoh kami, maka Halo dunia akan muncul di browser Anda.

Cara alur dibangun

Setelah Anda selesai memilih opsi, lalu melanjutkan untuk memvalidasi dan mengonfigurasi alur Azure Pipelines membuat alur untuk Anda, menggunakan templat Menyebarkan ke Azure Kubernetes Service.

Tahap build menggunakan tugas Docker untuk membangun dan mendorong gambar ke Azure Container Registry.

- stage: Build
  displayName: Build stage
  jobs:  
  - job: Build
    displayName: Build job
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)

    - task: PublishPipelineArtifact@1
      inputs:
        artifactName: 'manifests'
        path: 'manifests'

Pekerjaan penyebaran menggunakan tugas manifes Kubernetes untuk membuat imagePullSecret yang diperlukan oleh node kluster Kubernetes untuk menarik dari sumber daya Azure Container Registry. File manifes kemudian digunakan oleh tugas manifes Kubernetes untuk disebarkan ke kluster Kubernetes. File manifes, service.yml dan deployment.yml, dihasilkan saat Anda menggunakan templat Sebarkan ke Azure Kubernetes Service .

- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build
  jobs:
  - deployment: Deploy
    displayName: Deploy job
    pool:
      vmImage: $(vmImageName)
    environment: 'myenv.aksnamespace' #customize with your environment
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadPipelineArtifact@2
            inputs:
              artifactName: 'manifests'
              downloadPath: '$(System.ArtifactsDirectory)/manifests'

          - task: KubernetesManifest@0
            displayName: Create imagePullSecret
            inputs:
              action: createSecret
              secretName: $(imagePullSecret)
              namespace: $(k8sNamespace)
              dockerRegistryEndpoint: $(dockerRegistryServiceConnection)

          - task: KubernetesManifest@0
            displayName: Deploy to Kubernetes cluster
            inputs:
              action: deploy
              namespace: $(k8sNamespace)
              manifests: |
                $(System.ArtifactsDirectory)/manifests/deployment.yml
                $(System.ArtifactsDirectory)/manifests/service.yml
              imagePullSecrets: |
                $(imagePullSecret)
              containers: |
                $(containerRegistry)/$(imageRepository):$(tag)

Membersihkan sumber daya

Setiap kali Anda selesai dengan sumber daya yang Anda buat, Anda dapat menggunakan perintah berikut untuk menghapusnya:

az group delete --name myapp-rg

Masukkan y saat Anda diminta.

Azure DevOps | Azure DevOps Server 2020 | Azure DevOps Server 2019

Gunakan Azure Pipelines untuk menyebarkan secara otomatis ke Azure Kubernetes Service (AKS). Azure Pipelines memungkinkan Anda membangun, menguji, dan menyebarkan dengan integrasi berkelanjutan (CI) dan pengiriman berkelanjutan (CD) menggunakan Azure DevOps.

Dalam artikel ini, Anda akan mempelajari cara membuat alur yang terus-menerus membangun dan menyebarkan aplikasi Anda. Setiap kali Anda mengubah kode Anda di repositori yang berisi Dockerfile, gambar didorong ke Azure Container Registry Anda, dan manifes kemudian disebarkan ke kluster AKS Anda.

Prasyarat

Mendapatkan kode

Buat cabang pada repositori berikut yang berisi aplikasi contoh dan Dockerfile:

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Membuat sumber daya Azure

Masuk ke portal Microsoft Azure, lalu pilih tombol Cloud Shell di sudut kanan atas. Gunakan Azure CLI atau PowerShell untuk membuat kluster AKS.

Membuat registri kontainer

# Create a resource group
az group create --name myapp-rg --location eastus

# Create a container registry
az acr create --resource-group myapp-rg --name mycontainerregistry --sku Basic

# Create a Kubernetes cluster
az aks create \
    --resource-group myapp-rg \
    --name myapp \
    --node-count 1 \
    --enable-addons monitoring \
    --generate-ssh-keys 

Mengonfigurasi autentikasi

Saat Anda menggunakan Azure Container Registry (ACR) dengan Azure Kubernetes Service (AKS), Anda harus membuat mekanisme autentikasi. Hal ini dapat dicapai dengan dua cara:

  1. Berikan akses AKS ke ACR. Lihat Mengautentikasi dengan Azure Container Registry dari Azure Kubernetes Service.

  2. Gunakan rahasia penarikan gambar Kubernetes. Rahasia penarikan gambar dapat dibuat dengan menggunakan tugas penyebaran Kubernetes.

Membuat alur pipa rilis

Alur build yang digunakan untuk menyiapkan CI telah membangun gambar Docker dan mendorongnya ke Azure Container Registry. Alur pembangunan juga mengemas dan menerbitkan bagan Helm sebagai artefak. Dalam alur rilis, kita akan menyebarkan gambar kontainer sebagai aplikasi Helm ke kluster AKS.

  1. Di Azure Pipelines buka ringkasan untuk build Anda.

  2. Di ringkasan build, pilih ikon Rilis untuk memulai alur rilis baru.

    Jika sebelumnya Anda telah membuat alur rilis yang menggunakan artefak build ini, Anda diminta untuk membuat rilis baru sebagai gantinya. Dalam kasus ini, buka halaman Rilis dan mulai alur rilis baru dari sana dengan memilih ikon +.

  3. Pilih templat Pekerjaan kosong.

  4. Buka halaman Tugas dan pilih Pekerjaan agen.

  5. Pilih + untuk menambahkan tugas baru dan tambahkan tugas alat penginstal alat Helm. Hal ini memastikan agen yang menjalankan tugas berikutnya telah menginstal Helm dan Kubectl di dalamnya.

  6. Pilih + lagi dan tambahkan tugas Kemas dan sebarkan bagan Helm. Konfigurasikan pengaturan untuk tugas ini sebagai berikut:

    • Tipe koneksi: Pilih Azure Resource Manager untuk menghubungkan ke kluster AKS menggunakan koneksi layanan Azure. Atau, jika Anda ingin terhubung ke kluster Kubernetes mana pun dengan menggunakan kubeconfig atau akun layanan, Anda dapat memilih Koneksi Layanan Kubernetes. Dalam kasus ini, Anda harus membuat dan memilih koneksi layanan Kubernetes, bukan langganan Azure untuk pengaturan berikut.

    • Langganan Azure: Pilih koneksi dari daftar di bawah Koneksi Layanan Azure yang Tersedia atau buat koneksi izin yang lebih terbatas ke langganan Azure Anda. Jika Anda melihat tombol Otorisasi di samping input, gunakan untuk mengotorisasi koneksi ke langganan Azure Anda. Jika Anda tidak melihat langganan Azure yang diperlukan dalam daftar langganan, lihat Membuat koneksi layanan Azure untuk menyiapkan koneksi secara manual.

    • Grup sumber daya: Masukkan atau pilih grup sumber daya yang berisi kluster AKS Anda.

    • Kluster Kubernetes: Masukkan atau pilih kluster AKS yang Anda buat.

    • Perintah: Pilih init sebagai perintah Helm. Ini menginstal Tiller ke kluster Kubernetes yang sedang berjalan. Perintah ini juga akan menyiapkan konfigurasi lokal yang diperlukan. Centang Gunakan versi gambar kenari untuk menginstal versi prarilis terbaru Tiller. Anda juga dapat memilih untuk meningkatkan Tiller jika diinstal sebelumnya dengan mencentang Upgrade Tiller. Jika opsi ini diaktifkan, tugas akan berjalan helm init --canary-image --upgrade

  7. Pilih + di Pekerjaan agen dan tambahkan tugas Kemas dan sebarkan bagan Helm lainnya. Konfigurasikan pengaturan untuk tugas ini sebagai berikut:

    • Kluster Kubernetes: Masukkan atau pilih kluster AKS yang Anda buat.

    • Namespace: Masukkan namespace kluster Kubernetes tempat Anda ingin menyebarkan aplikasi. Kubernetes mendukung beberapa kluster virtual yang didukung oleh kluster fisik yang sama. Kluster virtual ini disebut namespace. Anda dapat menggunakan namespace untuk membuat lingkungan yang berbeda seperti pengembangan, pengujian, dan penahapan di kluster yang sama.

    • Perintah: Pilih tingkatkan sebagai perintah Helm. Anda dapat menjalankan perintah Helm apa pun menggunakan tugas ini dan meneruskan opsi perintah sebagai argumen. Saat Anda memilih tingkatkan, tugas akan menampilkan beberapa bidang lagi:

      • Jenis Bagan: Pilih Jalur File. Atau, Anda dapat menentukan Nama Bagan jika Anda ingin menentukan URL atau nama bagan. Misalnya, jika nama bagan adalah stable/mysql, tugas dijalankan helm upgrade stable/mysql

      • Jalur Bagan: Jalur Bagan dapat berupa jalur ke bagan dalam paket atau jalur ke direktori bagan yang belum dibuka. Dalam contoh ini, Anda menerbitkan bagan menggunakan build CI, jadi pilih paket file menggunakan pemilih file atau masukkan $(System.DefaultWorkingDirectory)/**/*.tgz

      • Nama Rilis: Masukkan nama untuk rilis Anda; misalnya, azuredevops

      • Buat ulang Pod: Centang kotak centang ini jika ada perubahan konfigurasi selama rilis dan Anda ingin mengganti pod yang sedang berjalan dengan konfigurasi baru.

      • Atur Ulang Nilai: Centang kotak centang ini jika Anda ingin nilai yang ada di dalam bagan menggantikan semua nilai yang diberikan oleh tugas.

      • Paksa: Centang kotak centang ini jika, terjadi konflik, Anda ingin meningkatkan dan mengembalikan untuk menghapus, membuat ulang sumber daya, dan menginstal ulang rilis lengkap. Hal ini berguna dalam skenario saat menerapkan patch bisa gagal (misalnya, untuk layanan karena alamat IP kluster tidak dapat diubah).

      • Argumen: Masukkan argumen perintah Helm dan nilainya; untuk contoh ini--set image.repository=$(imageRepoName) --set image.tag=$(Build.BuildId) Lihat bagian ini untuk penjelasan mengapa kita menggunakan argumen ini.

      • Aktifkan TLS: Centang kotak centang ini untuk mengaktifkan koneksi berbasis TLS yang kuat antara Helm dan Tiller.

      • Sertifikat CA: Tentukan sertifikat CA yang akan diunggah dan digunakan untuk menerbitkan sertifikat untuk klien Tiller dan Helm.

      • Sertifikat: Tentukan sertifikat Tiller atau sertifikat klien Helm

      • Kunci: Tentukan Kunci Tiller atau kunci klien Helm

  8. Di halaman Variabel alur, tambahkan variabel bernama imageRepoName dan atur nilainya ke nama repositori gambar Helm Anda. Biasanya, ini dalam format example.azurecr.io/coderepository

  9. Simpan alur rilis.

Argumen yang digunakan dalam tugas peningkatan Helm

Di alur build, gambar kontainer ditandai dengan $(Build.BuildId) dan ini didorong ke Azure Container Registry. Dalam bagan Helm, Anda dapat membuat parameter detail gambar kontainer seperti nama dan tag karena bagan yang sama dapat digunakan untuk menyebarkan ke lingkungan yang berbeda. Nilai-nilai ini juga dapat ditentukan dalam file values.yaml atau ditimpa oleh file nilai yang disediakan pengguna, yang selanjutnya dapat ditimpa oleh parameter --set selama penginstalan atau peningkatan Helm.

Dalam contoh ini, kita memberikan argumen berikut:

--set image.repository=$(imageRepoName) --set image.tag=$(Build.BuildId)

Nilai $(imageRepoName) ditetapkan di halaman Variabel (atau bagian variabel dari file YAML Anda). Atau, Anda dapat langsung menggantinya dengan nama repositori gambar Anda di nilai argumen --set atau file values.yaml. Misalnya:

  image:
    repository: VALUE_TO_BE_OVERRIDDEN
    tag: latest

Alternatif lain adalah mengatur opsi Tetapkan Nilai tugas untuk menetapkan nilai argumen sebagai pasangan kunci-nilai yang dipisahkan koma.

Membuat rilis untuk menyebarkan aplikasi Anda

Anda sekarang siap untuk membuat rilis, yang berarti memulai proses menjalankan alur rilis dengan artefak yang dihasilkan oleh build tertentu. Ini menghasilkan penyebaran build:

  1. Pilih + Rilis dan pilih Buat rilis.

  2. Di panel Buat rilis baru, periksa apakah versi artefak yang ingin Anda gunakan telah dipilih lalu pilih Buat.

  3. Pilih tautan rilis di pesan bilah informasi. Misalnya: "Rilis Rilis-1 telah dibuat".

  4. Dalam tampilan alur, pilih tautan status di tahapan alur untuk melihat log dan output agen.