KubernetesManifest@1 - Sebarkan ke tugas Kubernetes v1

Gunakan file manifes Kubernetes untuk disebarkan ke kluster atau bahkan panggang file manifes yang akan digunakan untuk penyebaran menggunakan bagan Helm.

Sintaks

# Deploy to Kubernetes v1
# Use Kubernetes manifest files to deploy to clusters or even bake the manifest files to be used for deployments using Helm charts.
- task: KubernetesManifest@1
  inputs:
    #action: 'deploy' # 'bake' | 'createSecret' | 'delete' | 'deploy' | 'patch' | 'promote' | 'scale' | 'reject'. Action. Default: deploy.
    #connectionType: 'kubernetesServiceConnection' # 'azureResourceManager' | 'kubernetesServiceConnection'. Required when action != bake. Service connection type. Default: kubernetesServiceConnection.
    #kubernetesServiceConnection: # string. Alias: kubernetesServiceEndpoint. Required when action != bake && connectionType = kubernetesServiceConnection. Kubernetes service connection. 
    #azureSubscriptionConnection: # string. Alias: azureSubscriptionEndpoint. Required when action != bake && connectionType = azureResourceManager. Azure subscription. 
    #azureResourceGroup: # string. Required when action != bake && connectionType = azureResourceManager. Resource group. 
    #kubernetesCluster: # string. Required when action != bake && connectionType = azureResourceManager. Kubernetes cluster. 
    #useClusterAdmin: false # boolean. Optional. Use when connectionType = azureResourceManager. Use cluster admin credentials. Default: false.
    #namespace: # string. Namespace. 
    #strategy: 'none' # 'canary' | 'none'. Optional. Use when action = deploy || action = promote || action = reject. Strategy. Default: none.
    #trafficSplitMethod: 'pod' # 'pod' | 'smi'. Optional. Use when strategy = canary. Traffic split method. Default: pod.
    #percentage: '0' # string. Required when strategy = Canary && action = deploy. Percentage. Default: 0.
    #baselineAndCanaryReplicas: '1' # string. Required when strategy = Canary && action = deploy && trafficSplitMethod = SMI. Baseline and canary replicas. Default: 1.
    #manifests: # string. Required when action = deploy || action = promote || action = reject. Manifests. 
    #containers: # string. Optional. Use when action = deploy || action = promote || action = bake. Containers. 
    #imagePullSecrets: # string. Optional. Use when action = deploy || action = promote. ImagePullSecrets. 
    #renderType: 'helm' # 'helm' | 'kompose' | 'kustomize'. Optional. Use when action = bake. Render Engine. Default: helm.
    #dockerComposeFile: # string. Required when action = bake && renderType = kompose. Path to docker compose file. 
    #helmChart: # string. Required when action = bake && renderType = helm. Helm Chart. 
    #releaseName: # string. Optional. Use when action = bake && renderType = helm. Helm Release Name. 
    #overrideFiles: # string. Optional. Use when action = bake && renderType = helm. Override Files. 
    #overrides: # string. Optional. Use when action = bake && renderType = helm. Overrides. 
    #kustomizationPath: # string. Optional. Use when action = bake && renderType = kustomize. Kustomization Path. 
    #resourceToPatch: 'file' # 'file' | 'name'. Required when action = patch. Resource to patch. Default: file.
    #resourceFileToPatch: # string. Required when action = patch && resourceToPatch = file. File path. 
    #kind: # 'deployment' | 'replicaset' | 'statefulset'. Required when action = scale || resourceToPatch = name. Kind. 
    #name: # string. Required when action = scale || resourceToPatch = name. Name. 
    #replicas: # string. Required when action = scale. Replica count. 
    #mergeStrategy: 'strategic' # 'json' | 'merge' | 'strategic'. Required when action = patch. Merge Strategy. Default: strategic.
    #arguments: # string. Optional. Use when action = delete. Arguments. 
    #patch: # string. Required when action = patch. Patch. 
    #secretType: 'dockerRegistry' # 'dockerRegistry' | 'generic'. Required when action = createSecret. Type of secret. Default: dockerRegistry.
    #secretName: # string. Optional. Use when action = createSecret. Secret name. 
    #secretArguments: # string. Optional. Use when action = createSecret && secretType = generic. Arguments. 
    #dockerRegistryEndpoint: # string. Optional. Use when action = createSecret && secretType = dockerRegistry. Docker registry service connection. 
    #rolloutStatusTimeout: '0' # string. Optional. Use when action = deploy || action = patch || action = scale || action = promote. Timeout for rollout status. Default: 0.

Input

action - Tindakan
string. Nilai yang diizinkan: bake, createSecret (buat rahasia), delete, , deploy, promotepatch, scale, reject. Nilai default: deploy.

Menentukan tindakan yang akan dilakukan.


connectionType - Jenis koneksi layanan
string. Diperlukan saat action != bake. Nilai yang diizinkan: azureResourceManager (Azure Resource Manager), kubernetesServiceConnection (Koneksi Layanan Kubernetes). Nilai default: kubernetesServiceConnection.

Pilih jenis koneksi layanan Kubernetes.

  • kubernetesServiceConnection (Koneksi Layanan Kubernetes) - Memungkinkan Anda menyediakan file KubeConfig, menentukan Akun Layanan, atau mengimpor instans AKS dengan opsi Langganan Azure . Mengimpor instans AKS dengan opsi Langganan Azure memerlukan akses kluster Kubernetes pada waktu konfigurasi Koneksi Layanan.
  • azureResourceManager(Azure Resource Manager) - Memungkinkan Anda memilih instans AKS. Tidak mengakses kluster Kubernetes pada waktu konfigurasi Koneksi Layanan.

Untuk informasi selengkapnya, lihat Keterangan.


kubernetesServiceConnection - Koneksi layanan Kubernetes
Alias input: kubernetesServiceEndpoint. string. Diperlukan saat action != bake && connectionType = kubernetesServiceConnection.

Menentukan koneksi layanan Kubernetes.


azureSubscriptionConnection - Langganan Azure
Alias input: azureSubscriptionEndpoint. string. Diperlukan saat action != bake && connectionType = azureResourceManager.

Pilih langganan Azure Resource Manager, yang berisi Azure Container Registry. Catatan: Untuk mengonfigurasi koneksi layanan baru, pilih langganan Azure dari daftar dan klik 'Otorisasi'. Jika langganan Anda tidak tercantum atau jika Anda ingin menggunakan Perwakilan Layanan yang sudah ada, Anda dapat menyiapkan koneksi layanan Azure menggunakan tombol 'Tambahkan' atau 'Kelola'.


azureResourceGroup - Grup sumber daya
string. Diperlukan saat action != bake && connectionType = azureResourceManager.

Pilih grup sumber daya Azure.


kubernetesCluster - Kluster Kubernetes
string. Diperlukan saat action != bake && connectionType = azureResourceManager.

Pilih kluster terkelola Azure.


useClusterAdmin - Menggunakan kredensial admin kluster
boolean. Pilihan. Gunakan saat connectionType = azureResourceManager. Nilai default: false.

Gunakan kredensial administrator kluster alih-alih kredensial pengguna kluster default.


namespace - Namespace
string.

Menentukan namespace untuk perintah dengan menggunakan –namespace bendera . Jika namespace tidak disediakan, perintah akan berjalan di namespace default.


strategy - Strategi
string. Pilihan. Gunakan saat action = deploy || action = promote || action = reject. Nilai yang diizinkan: canary, none. Nilai default: none.

Menentukan strategi penyebaran yang deploy digunakan dalam tindakan sebelum promote tindakan atau reject tindakan. Saat ini, canary adalah satu-satunya strategi penyebaran yang dapat diterima.


trafficSplitMethod - Metode pemisahan lalu lintas
string. Pilihan. Gunakan saat strategy = canary. Nilai yang diizinkan: pod, smi. Nilai default: pod.

Untuk nilai smi, persentase pemisahan lalu lintas dilakukan pada tingkat permintaan dengan menggunakan jala layanan. Jala layanan harus disiapkan oleh admin kluster. Tugas ini menangani orkestrasi objek SMI TrafficSplit .

Untuk nilai pod, pemisahan persentase tidak dimungkinkan pada tingkat permintaan tanpa adanya jala layanan. Sebaliknya, persentase input digunakan untuk menghitung replika untuk garis besar dan kenari. Perhitungan adalah persentase replika yang ditentukan dalam manifes input untuk varian stabil.


percentage - Persentase
string. Diperlukan saat strategy = Canary && action = deploy. Nilai default: 0.

Persentase yang digunakan untuk menghitung jumlah replika varian dasar dan varian kenari dari beban kerja yang terkandung dalam file manifes.

Untuk input persentase yang ditentukan, hitung:

(persentase × jumlah replika) / 100

Jika hasilnya bukan bilangan bulat, lantai matematika hasil digunakan saat varian garis besar dan kenari dibuat.

Misalnya, asumsikan penyebaran hello-world ada dalam file manifes input dan bahwa baris berikut berada dalam input tugas:

replicas: 4
strategy: canary
percentage: 25

Dalam hal ini, penyebaran hello-world-baseline dan hello-world-canary dibuat dengan masing-masing satu replika. Varian garis besar dibuat dengan gambar dan tag yang sama dengan versi stabil, yang merupakan varian empat replika sebelum penyebaran. Varian kenari dibuat dengan gambar dan tag yang sesuai dengan perubahan yang baru disebarkan.


baselineAndCanaryReplicas - Replika garis besar dan kenari
string. Diperlukan saat strategy = Canary && action = deploy && trafficSplitMethod = SMI. Nilai default: 1.

Ketika Anda mengatur trafficSplitMethod ke smi, persentase pemisahan lalu lintas dikontrol di bidang jala layanan. Anda dapat mengontrol jumlah replika aktual untuk varian kenari dan garis besar secara independen dari pemisahan lalu lintas.

Misalnya, asumsikan bahwa manifes penyebaran input menentukan 30 replika untuk varian stabil. Asumsikan juga bahwa Anda menentukan input berikut untuk tugas:

strategy: canary
trafficSplitMethod: smi
percentage: 20
baselineAndCanaryReplicas: 1

Dalam hal ini, varian stabil menerima 80% dari lalu lintas, sementara varian garis besar dan kenari masing-masing menerima setengah dari 20% yang ditentukan. Varian garis besar dan kenari tidak menerima masing-masing tiga replika. Mereka menerima jumlah replika yang ditentukan, yang berarti mereka masing-masing menerima satu replika.


manifests - Memanifestasikan
string. Diperlukan saat action = deploy || action = promote || action = reject.

Menentukan jalur ke file manifes yang akan digunakan untuk penyebaran. Setiap baris mewakili satu jalur. Pola pencocokan file adalah nilai yang dapat diterima untuk setiap baris.


containers - Wadah
string. Opsional. Gunakan saat action = deploy || action = promote || action = bake.

Menentukan URL sumber daya gambar yang sepenuhnya memenuhi syarat yang akan digunakan untuk substitusi pada file manifes. URL contosodemo.azurecr.io/helloworld:test adalah contohnya.


imagePullSecrets - ImagePullSecrets
string. Pilihan. Gunakan saat action = deploy || action = promote.

Menentukan input multibaris di mana setiap baris berisi nama rahasia registri Docker yang telah disiapkan dalam kluster. Setiap nama rahasia ditambahkan di bawah imagePullSecrets untuk beban kerja yang ditemukan dalam file manifes input.


renderType - Mesin Render
string. Pilihan. Gunakan saat action = bake. Nilai yang diizinkan: helm, kompose, dan kustomize. Nilai default: helm.

Menentukan jenis render yang digunakan untuk menghasilkan file manifes.


dockerComposeFile - Jalur ke file docker compose
string. Diperlukan saat action = bake && renderType = kompose.

Menentukan jalur file docker-compose.


helmChart - Bagan Helm
string. Diperlukan saat action = bake && renderType = helm.

Menentukan jalur bagan Helm untuk dipanggang.


releaseName - Nama Rilis Helm
string. Pilihan. Gunakan saat action = bake && renderType = helm.

Menentukan nama rilis Helm yang akan digunakan.


overrideFiles - Ambil alih File
string. Pilihan. Gunakan saat action = bake && renderType = helm.

Menentukan input multibaris yang menerima jalur ke file penimpaan. File digunakan ketika file manifes dari bagan Helm dipanggang.


overrides - Mengabaikan
string. Opsional. Gunakan saat action = bake && renderType = helm.

Menentukan nilai penimpaan yang akan ditetapkan.


kustomizationPath - Jalur Kustomisasi
string. Pilihan. Gunakan saat action = bake && renderType = kustomize.

Menentukan argumen yang harus menjadi jalur ke direktori yang berisi file, atau URL repositori git dengan akhiran same jalur yang menentukan sehubungan dengan akar repositori.


resourceToPatch - Sumber daya untuk di-patch
string. Diperlukan saat action = patch. Nilai yang diizinkan: file, name. Nilai default: file.

Menunjukkan salah satu metode patch berikut:

  • File manifes mengidentifikasi objek yang akan di-patch.
  • Objek individu diidentifikasi berdasarkan jenis dan nama sebagai target patch.

Nilai yang dapat diterima adalah file dan nama.


resourceFileToPatch - Jalur file
string. Diperlukan saat action = patch && resourceToPatch = file.

Menentukan jalur ke file yang digunakan untuk patch.


kind - Jenis
string. Diperlukan saat action = scale || resourceToPatch = name. Nilai yang diizinkan: deployment, replicaset, dan statefulset.

Menentukan jenis objek K8s, seperti deployment, replicaSet dan lainnya.


name - Nama
string. Diperlukan saat action = scale || resourceToPatch = name.

Menentukan nama objek K8s.


replicas - Jumlah replika
string. Diperlukan saat action = scale.

Menentukan jumlah replika yang akan diskalakan.


replicas - Jumlah replika
string. Diperlukan saat action = scale.

Menentukan nama objek K8s.


mergeStrategy - Gabungkan Strategi
string. Diperlukan saat action = patch. Nilai yang diizinkan: json, merge, dan strategic. Nilai default: strategic.

Menentukan jenis patch yang disediakan.


arguments - Argumen
string. Opsional. Gunakan saat action = delete.

Menentukan argumen untuk kubectl delete perintah . Contohnya adalah: arguments: deployment hello-world foo-bar


patch - Patch
string. Diperlukan saat action = patch.

Menentukan isi patch.


secretType - Jenis rahasia
string. Diperlukan saat action = createSecret. Nilai yang diizinkan: dockerRegistry, generic. Nilai default: dockerRegistry.

Membuat atau memperbarui generik atau docker imagepullsecret. Tentukan dockerRegistry untuk membuat atau memperbarui imagepullsecret registri yang dipilih. imagePullSecret Adalah cara untuk meneruskan rahasia yang berisi kata sandi registri kontainer ke Kubelet, sehingga dapat menarik gambar privat atas nama Pod Anda.


secretName - Nama rahasia
string. Pilihan. Gunakan saat action = createSecret.

Menentukan nama rahasia. Anda dapat menggunakan nama rahasia ini dalam file konfigurasi YAML Kubernetes.


secretArguments - Argumen
string. Pilihan. Gunakan saat action = createSecret && secretType = generic.

Menentukan kunci dan nilai harfiah untuk disisipkan secara rahasia. Misalnya, --from-literal=key1=value1--from-literal=key2="top secret".


dockerRegistryEndpoint - Koneksi layanan registri Docker
string. Pilihan. Gunakan saat action = createSecret && secretType = dockerRegistry.

Menentukan kredensial koneksi layanan yang ditentukan yang digunakan untuk membuat rahasia registri Docker dalam kluster. File manifes di imagePullSecrets bawah bidang kemudian dapat merujuk ke nama rahasia ini.


rolloutStatusTimeout - Waktu habis untuk status peluncuran
string. Pilihan. Gunakan saat action = deploy || action = patch || action = scale || action = promote. Nilai default: 0.

Menentukan lamanya waktu (dalam detik) untuk menunggu sebelum mengakhiri watch on rollout status.


Opsi kontrol tugas

Semua tugas memiliki opsi kontrol selain input tugas mereka. Untuk informasi selengkapnya, lihat Opsi kontrol dan properti tugas umum.

Variabel output

Tugas ini mendefinisikan variabel output berikut, yang dapat Anda konsumsi dalam langkah-langkah hilir, pekerjaan, dan tahapan.

manifestsBundle
Lokasi bundel manifes yang dibuat oleh tindakan panggang

Keterangan

Pertimbangan Koneksi Layanan Kubernetes saat mengakses AKS

Anda dapat membuat koneksi layanan Kubernetes dengan salah satu opsi berikut.

  • KubeConfig
  • Akun Layanan
  • Azure Subscription

Cuplikan layar memilih metode autentikasi koneksi layanan Kubernetes.

Saat memilih opsi Langganan Azure , Kubernetes harus dapat diakses oleh Azure DevOps pada waktu konfigurasi koneksi layanan. Mungkin ada berbagai alasan koneksi layanan tidak dapat dibuat, misalnya Anda membuat kluster privat atau kluster menonaktifkan akun lokal. Dalam kasus ini, Azure DevOps tidak dapat tersambung ke kluster Anda pada waktu konfigurasi koneksi layanan dan Anda akan melihat layar Memuat namespace layanan yang macet.

Cuplikan layar memilih dialog autentikasi koneksi layanan Kubernetes macet saat memuat namespace layanan.

Dimulai dengan Kubernetes 1.24, token berumur panjang tidak lagi dibuat secara default. Kubernetes merekomendasikan untuk tidak menggunakan token berumur panjang. Akibatnya, tugas yang menggunakan koneksi layanan Kubernetes yang dibuat dengan opsi Langganan Azure tidak memiliki akses ke token permanen yang diperlukan untuk mengautentikasi dan tidak dapat mengakses kluster Kubernetes Anda. Ini juga menghasilkan dialog namespace layanan Pemuatan yang dibekukan.

Menggunakan Azure Resource Manager Service Connection untuk mengakses AKS

Untuk pelanggan AKS, jenis koneksi layanan Azure Resource Manager menyediakan metode terbaik untuk terhubung ke kluster privat, atau kluster yang menonaktifkan akun lokal. Metode ini tidak bergantung pada konektivitas kluster pada saat Anda membuat koneksi layanan. Akses ke AKS ditangguhkan ke runtime alur, yang memiliki keuntungan berikut:

  • Akses ke kluster AKS (privat) dapat dilakukan dari agen yang dihost sendiri atau set skala dengan garis pandang ke kluster.
  • Token dibuat untuk setiap tugas yang menggunakan koneksi layanan Azure Resource Manager. Ini memastikan Anda terhubung ke Kubernetes dengan token berumur pendek, yang merupakan rekomendasi Kubernetes.
  • AKS dapat diakses bahkan ketika akun lokal dinonaktifkan.

Tanya Jawab Umum koneksi layanan

Saya menerima pesan kesalahan berikut: Tidak dapat menemukan rahasia apa pun yang terkait dengan akun layanan. Apa yang terjadi?

Anda menggunakan koneksi layanan Kubernetes dengan opsi Langganan Azure. Kami memperbarui metode ini untuk membuat token berumur panjang. Ini diperkirakan akan tersedia pertengahan Mei. Namun, disarankan untuk mulai menggunakan jenis koneksi layanan Azure dan tidak menggunakan token berumur panjang sesuai panduan Kubernetes.

Saya menggunakan AKS dan tidak ingin mengubah apa pun, dapatkah saya terus menggunakan tugas dengan koneksi layanan Kubernetes?

Kami memperbarui metode ini untuk membuat token berumur panjang. Ini diperkirakan akan tersedia pertengahan Mei. Namun, perlu diketahui bahwa pendekatan ini bertentangan dengan panduan Kubernetes.

Saya menggunakan tugas Kubernetes dan koneksi layanan Kubernetes tetapi bukan AKS. Haruskah aku khawatir?

Tugas Anda akan terus berfungsi seperti sebelumnya.

Apakah jenis koneksi layanan Kubernetes akan dihapus?

Tugas Kubernetes kami bekerja dengan kluster Kubernetes apa pun, di mana pun mereka berjalan. Koneksi layanan Kubernetes akan terus ada.

Saya pelanggan AKS dan semuanya berjalan dengan baik, haruskah saya bertindak?

Tidak perlu mengubah apa pun. Jika Anda menggunakan koneksi layanan Kubernetes dan Langganan Azure yang dipilih selama pembuatan, Anda harus mengetahui panduan Kubernetes tentang menggunakan token berumur panjang.

Saya membuat Lingkungan Kubernetes, dan tidak memiliki opsi untuk menggunakan koneksi layanan

Jika Anda tidak dapat mengakses AKS selama waktu pembuatan lingkungan, Anda dapat menggunakan lingkungan kosong dan mengatur connectionType input ke koneksi layanan Azure Resource Manager.

Saya memiliki AKS yang dikonfigurasi dengan Azure Active Directory RBAC, dan alur saya tidak berfungsi. Apakah pembaruan ini akan menyelesaikannya?

Mengakses Kubernetes ketika AAD RBAC diaktifkan tidak terkait dengan pembuatan token. Untuk mencegah prompt interaktif, kami akan mendukung kubelogin di pembaruan mendatang.

Gunakan tugas manifes Kubernetes dalam alur build atau rilis untuk membuat dan menyebarkan manifes ke kluster Kubernetes.

Tugas ini mendukung hal berikut:

  • Penggantian artefak: Tindakan penyebaran mengambil sebagai input daftar gambar kontainer yang dapat Anda tentukan bersama dengan tag dan hashnya. Input yang sama diganti ke dalam file manifes yang tidak diintemplatasikan sebelum aplikasi ke kluster. Penggantian ini memastikan bahwa node kluster menarik versi gambar yang tepat.

  • Stabilitas manifes: Status peluncuran objek Kubernetes yang disebarkan diperiksa. Pemeriksaan stabilitas dimasukkan untuk menentukan apakah status tugas berhasil atau gagal.

  • Anotasi keterlacakan: Anotasi ditambahkan ke objek Kubernetes yang disebarkan untuk menggantikan informasi keterlacakan. Anotasi berikut didukung:

    • azure-pipelines/org
    • azure-pipelines/project
    • azure-pipelines/pipeline
    • azure-pipelines/pipelineId
    • azure-pipelines/execution
    • azure-pipelines/executionuri
    • azure-pipelines/jobName
  • Penanganan rahasia: Tindakan ini createSecret memungkinkan rahasia registri Docker dibuat menggunakan koneksi layanan registri Docker. Ini juga memungkinkan rahasia generik dibuat menggunakan variabel teks biasa atau variabel rahasia. Sebelum penyebaran ke kluster, Anda dapat menggunakan secrets input bersama dengan deploy tindakan untuk menambah file manifes input dengan nilai yang sesuai imagePullSecrets .

  • Manifes bake: Tindakan bake tugas memungkinkan pembuatan templat ke dalam file manifes Kubernetes. Tindakan ini menggunakan alat seperti Helm, Compose, dan Kustomize. Dengan pembuatan kue, file manifes Kube ini dapat digunakan untuk penyebaran ke kluster.

  • Strategi penyebaran: Memilih canary strategi dengan deploy tindakan mengarah pada pembuatan nama beban kerja yang dia akhiri dengan -baseline dan -canary. Tugas ini mendukung dua metode pemisahan lalu lintas:

    • Antarmuka Mesh Layanan: Abstraksi Service Mesh Interface (SMI) memungkinkan konfigurasi dengan penyedia jala layanan seperti Linkerd dan Istio. Tugas Manifes Kubernetes memetakan objek SMI TrafficSplit ke layanan stabil, garis besar, dan kenari selama siklus hidup strategi penyebaran.

      Penyebaran kenari yang didasarkan pada jala layanan dan menggunakan tugas ini lebih akurat. Akurasi ini disebabkan oleh bagaimana penyedia jala layanan memungkinkan pemisahan lalu lintas berbasis persentase granular. Jala layanan menggunakan registri layanan dan kontainer sespan yang disuntikkan ke dalam pod. Injeksi ini terjadi bersama kontainer aplikasi untuk mencapai pemisahan lalu lintas terperinci.

    • Kubernetes tanpa jala layanan: Dengan tidak adanya jala layanan, Anda mungkin tidak mendapatkan pemisahan persentase yang tepat yang Anda inginkan di tingkat permintaan. Namun, Anda dapat melakukan penyebaran kenari dengan menggunakan varian garis besar dan kenari di samping varian stabil.

      Layanan mengirimkan permintaan ke pod dari ketiga varian beban kerja saat batasan label pemilih terpenuhi. Manifes Kubernetes menghormati permintaan ini saat membuat varian dasar dan kenari. Perilaku perutean ini mencapai efek perutean yang dimaksudkan hanya sebagian dari total permintaan ke kenari.

    Bandingkan beban kerja garis besar dan kenari dengan menggunakan tugas Intervensi Manual dalam alur rilis atau tugas Penundaan di alur YAML. Lakukan perbandingan sebelum menggunakan tindakan promosikan atau tolak tugas.

Menyebarkan tindakan

Kode YAML berikut adalah contoh penyebaran ke namespace Layanan Kubernetes dengan menggunakan file manifes:

steps:
- task: KubernetesManifest@0
  displayName: Deploy
  inputs:
    kubernetesServiceConnection: someK8sSC1
    namespace: default
    manifests: |
      manifests/deployment.yml
      manifests/service.yml
    containers: |
      foo/demo:$(tagVariable1)
      bar/demo:$(tagVariable2)
    imagePullSecrets: |
      some-secret
      some-other-secret

Dalam contoh di atas, tugas mencoba menemukan kecocokan untuk gambar foo/demo dan bar/demo di bidang gambar file manifes. Untuk setiap kecocokan yang ditemukan, nilai salah satu tagVariable1 atau tagVariable2 ditambahkan sebagai tag ke nama gambar. Anda juga dapat menentukan hash dalam input kontainer untuk penggantian artefak.

Catatan

Meskipun Anda dapat menulis deploytindakan , promote, dan reject dengan input YAML yang terkait dengan strategi penyebaran, dukungan untuk tugas Intervensi Manual saat ini tidak tersedia untuk alur build.

Untuk alur rilis, kami menyarankan Anda untuk menggunakan tindakan dan input yang terkait dengan strategi penyebaran dalam urutan berikut:

  1. Tindakan penyebaran yang ditentukan dengan strategy: canary dan percentage: $(someValue).
  2. Tugas Intervensi Manual sehingga Anda dapat menjeda alur dan membandingkan varian garis besar dengan varian kenari.
  3. Tindakan promosi yang berjalan jika tugas Intervensi Manual dilanjutkan dan tindakan penolakan yang berjalan jika tugas Intervensi Manual ditolak.

Membuat tindakan rahasia

Kode YAML berikut menunjukkan contoh pembuatan rahasia registri Docker dengan menggunakan koneksi layanan Docker Registry:

steps:
- task: KubernetesManifest@0
  displayName: Create secret
  inputs: 
    action: createSecret
    secretType: dockerRegistry
    secretName: foobar
    dockerRegistryEndpoint: demoACR
    kubernetesServiceConnection: someK8sSC
    namespace: default

Kode YAML ini menunjukkan contoh pembuatan rahasia generik:

steps:
- task: KubernetesManifest@0
  displayName: Create secret
  inputs: 
    action: createSecret
    secretType: generic
    secretName: some-secret
    secretArguments: --from-literal=key1=value1
    kubernetesServiceConnection: someK8sSC
    namespace: default

Tindakan panggang

Kode YAML berikut adalah contoh pembuatan file manifes dari bagan Helm. Perhatikan penggunaan input nama di tugas pertama. Nama ini kemudian dirujuk dari langkah penyebaran untuk menentukan jalur ke manifes yang dihasilkan oleh langkah panggang.

steps:
- task: KubernetesManifest@0
  name: bake
  displayName: Bake K8s manifests from Helm chart
  inputs:
    action: bake
    helmChart: charts/sample
    overrides: 'image.repository:nginx'

- task: KubernetesManifest@0
  displayName: Deploy K8s manifests
  inputs:
    kubernetesServiceConnection: someK8sSC
    namespace: default
    manifests: $(bake.manifestsBundle)
    containers: |
      nginx: 1.7.9

Catatan

Untuk menggunakan Helm secara langsung untuk mengelola rilis dan pemutaran kembali, lihat tugas Paket dan sebarkan bagan Helm.

Contoh kustomisasi

Kode YAML berikut adalah contoh pembuatan kue file manifes yang dihasilkan dengan Kustomize yang berisi kustomization.yaml file.

steps:
- task: KubernetesManifest@0
  name: bake
  displayName: Bake K8s manifests from kustomization path
  inputs:
    action: bake
    renderType: kustomize
    kustomizationPath: folderContainingKustomizationFile

- task: KubernetesManifest@0
  displayName: Deploy K8s manifests
  inputs:
    kubernetesServiceConnection: k8sSC1
    manifests: $(bake.manifestsBundle)

Contoh Kompose

Kode YAML berikut adalah contoh pembuatan file manifes yang dihasilkan dengan Kompose, alat konversi untuk Docker Compose.

steps:
- task: KubernetesManifest@0
  name: bake
  displayName: Bake K8s manifests from Docker Compose
  inputs:
    action: bake
    renderType: kompose
    dockerComposeFile: docker-compose.yaml

- task: KubernetesManifest@0
  displayName: Deploy K8s manifests
  inputs:
    kubernetesServiceConnection: k8sSC1
    manifests: $(bake.manifestsBundle)

Tindakan skala

Kode YAML berikut menunjukkan contoh penskalaan objek:

steps:
- task: KubernetesManifest@0
  displayName: Scale
  inputs: 
    action: scale
    kind: deployment
    name: bootcamp-demo
    replicas: 5
    kubernetesServiceConnection: someK8sSC
    namespace: default

Tindakan patch

Kode YAML berikut menunjukkan contoh patching objek:

steps:
- task: KubernetesManifest@0
  displayName: Patch
  inputs: 
    action: patch
    kind: pod
    name: demo-5fbc4d6cd9-pgxn4
    mergeStrategy: strategic
    patch: '{"spec":{"containers":[{"name":"demo","image":"foobar/demo:2239"}]}}'
    kubernetesServiceConnection: someK8sSC
    namespace: default

Hapus tindakan

Kode YAML ini menunjukkan contoh penghapusan objek:

steps:
- task: KubernetesManifest@0
  displayName: Delete
  inputs:
    action: delete
    arguments: deployment expressapp
    kubernetesServiceConnection: someK8sSC
    namespace: default

Pemecahan Masalah

Kluster Kubernetes saya berada di belakang firewall dan saya menggunakan agen yang dihosting. Bagaimana cara menyebarkan ke kluster ini?

Anda dapat memberikan akses kepada agen yang dihosting melalui firewall Anda dengan mengizinkan alamat IP untuk agen yang dihosting. Untuk detail selengkapnya, lihat Rentang IP Agen.

Bagaimana cara kerja permintaan ke rute layanan yang stabil dan varian dengan penyebaran Kenari?

Hubungan pemilih label antara pod dan layanan di Kubernetes memungkinkan untuk menyiapkan penyebaran sehingga satu layanan merutekan permintaan ke varian stabil dan Kenari. Tugas manifes Kubernetes menggunakan ini untuk penyebaran Kenari.

Jika tugas mencakup input action: deploy dan strategy: canary, untuk setiap beban kerja (Deployment, ReplicaSet, Pod, ...) yang ditentukan dalam file manifes input, -baseline dan -canary varian penyebaran dibuat. Dalam contoh ini, ada penyebaran sampleapp dalam file manifes input dan bahwa setelah selesai menjalankan nomor 22 dari alur, varian stabil dari penyebaran ini bernama sampleapp disebarkan dalam kluster. Dalam eksekusi berikutnya (dalam hal ini jalankan nomor 23), tugas manifes Kube dengan action: deploy dan strategy: canary akan menghasilkan pembuatan penyebaran sampleapp-baseline dan sampleapp-canary yang jumlah replikanya ditentukan oleh produk percentage input tugas dengan nilai jumlah replika yang diinginkan untuk varian sampleapp stabil akhir sesuai file manifes input.

Tidak termasuk jumlah replika, versi garis besar memiliki konfigurasi yang sama dengan varian stabil sementara versi kenari memiliki perubahan baru yang diperkenalkan oleh eksekusi saat ini (dalam hal ini, jalankan nomor 23). Jika intervensi manual disiapkan dalam alur setelah langkah yang disebutkan di atas, itu akan memungkinkan kesempatan untuk menjeda alur sehingga admin alur dapat mengevaluasi metrik utama untuk versi dasar dan kenari dan mengambil keputusan tentang apakah perubahan kenari aman dan cukup baik untuk peluncuran lengkap.

strategy: canary Danaction: promote atau action: reject dan strategy: canary input tugas manifes Kube dapat digunakan untuk mempromosikan atau menolak perubahan kenari masing-masing. Perhatikan bahwa dalam kedua kasus, pada akhir langkah ini, hanya varian stabil dari beban kerja yang dideklarasikan dalam file manifes input yang akan tetap disebarkan di kluster, sementara garis besar sementara dan versi kenari dibersihkan.

Persyaratan

Persyaratan Deskripsi
Jenis alur YAML, Build klasik, Rilis klasik
Berjalan pada Agen, DeploymentGroup
Permintaan Tidak ada
Kemampuan Tugas ini tidak memenuhi tuntutan apa pun untuk tugas berikutnya dalam pekerjaan.
Pembatasan perintah Apa pun
Variabel yang dapat diatur Apa pun
Versi agen Semua versi agen yang didukung.
Kategori tugas Sebarkan