Sebarkan ke Kubernetes
Layanan Azure DevOps | Azure DevOps Server 2022
Anda dapat menggunakan Azure Pipelines untuk menyebarkan ke kluster Azure Kubernetes Service dan Kubernetes yang ditawarkan oleh penyedia cloud lainnya. Azure Pipelines memiliki dua tugas untuk bekerja dengan Kubernetes:
- Tugas KubernetesManifest: membuat dan menyebarkan manifes ke kluster Kubernetes dengan Helm, Kompose, atau Kustomisasi
- Tugas Kubectl: menyebarkan, mengonfigurasi, dan memperbarui kluster Kubernetes di Azure Container Service dengan menjalankan perintah kubectl
Jika Anda menggunakan Azure Kubernetes Service dengan salah satu tugas, jenis koneksi layanan Azure Resource Manager adalah cara terbaik untuk terhubung ke kluster privat, atau kluster yang menonaktifkan akun lokal.
Untuk menambahkan keterlacakan penyebaran, gunakan sumber daya Kubernetes di lingkungan dengan tugas Kubernetes.
Untuk mulai menggunakan Azure Pipelines dan layanan Azure Kubernetes, lihat Membangun dan menyebarkan ke Azure Kubernetes Service dengan Azure Pipelines. Untuk mulai menggunakan Azure Pipelines, Kubernetes, dan strategi penyebaran kenari secara khusus, lihat Menggunakan strategi penyebaran kenari untuk penyebaran Kubernetes dengan Azure Pipelines.
Tugas KubernetesManifest
Tugas KubernetesManifest memeriksa stabilitas objek sebelum menandai tugas sebagai berhasil/gagal. Tugas ini juga dapat melakukan substitusi artefak, menambahkan anotasi terkait keterlacakan alur, menyederhanakan pembuatan dan referensi imagePullSecrets, membuat manifes, dan membantu dalam peluncuran strategi penyebaran.
Catatan
Meskipun dukungan alur berbasis YAML memicu pada satu repositori Git, jika Anda memerlukan pemicu untuk file manifes yang disimpan di repositori Git lain atau jika pemicu diperlukan untuk Azure Container Registry atau Docker Hub, Anda harus menggunakan alur klasik alih-alih alur berbasis YAML.
Anda dapat menggunakan tindakan bake dalam tugas manifes Kubernetes untuk membuat templat ke dalam file manifes Kubernetes. Tindakan ini memungkinkan Anda menggunakan alat seperti Helm, Kustomize, dan Kompose. Tindakan bake dari tugas manifes Kubernetes memberikan visibilitas ke dalam transformasi antara templat input dan file manifes akhir yang digunakan dalam penyebaran. Anda dapat menggunakan file manifes yang dipanggang di hilir (dalam tugas) sebagai input untuk tindakan penyebaran tugas manifes Kubernetes.
Anda dapat menargetkan sumber daya Kubernetes yang merupakan bagian dari lingkungan dengan pekerjaan penyebaran. Menggunakan lingkungan dan penyebaran sumber daya memberi Anda akses ke keterlacakan alur yang lebih baik sehingga Anda dapat mendiagnosis masalah penyebaran. Anda juga dapat menyebarkan ke kluster Kubernetes dengan pekerjaan reguler tanpa fitur kesehatan yang sama.
Kode YAML berikut adalah contoh pembuatan file manifes dari bagan Helm
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
Tugas Kubectl
Sebagai alternatif dari tugas KubernetesManifest KubernetesManifest, Anda dapat menggunakan tugas Kubectl untuk menyebarkan, mengonfigurasi, dan memperbarui kluster Kubernetes di Azure Container Service dengan menjalankan perintah kubectl.
Contoh berikut menunjukkan bagaimana koneksi layanan digunakan untuk merujuk ke kluster Kubernetes.
- task: Kubernetes@1
displayName: kubectl apply
inputs:
connectionType: Kubernetes Service Connection
kubernetesServiceEndpoint: Contoso
Tugas skrip
Anda juga dapat menggunakan kubectl
dengan tugas skrip.
Contoh berikut menggunakan skrip untuk menjalankan kubectl
.
- script: |
kubectl apply -f manifest.yml
Strategi penyebaran Kubernetes
Tugas manifes Kubernetes saat ini mendukung strategi penyebaran kenari. Gunakan strategi penyebaran kenari untuk menyebarkan sebagian perubahan baru sehingga perubahan baru berdampingan dengan penyebaran saat ini sebelum peluncuran penuh.
Untuk informasi selengkapnya tentang penyebaran kenari dengan alur, lihat Menggunakan strategi penyebaran kenari untuk penyebaran Kubernetes dengan Azure Pipelines.
Penyebaran Kubernetes multicloud
Kubernetes berjalan dengan cara yang sama pada semua penyedia cloud. Azure Pipelines dapat digunakan untuk menyebarkan ke Azure Kubernetes Service (AKS), Google Kubernetes Engine (GKE), Amazon Elastic Kubernetes Service (EKS), atau kluster dari penyedia cloud lainnya.
Untuk menyiapkan penyebaran multicloud, buat lingkungan lalu tambahkan sumber daya Kubernetes yang terkait dengan namespace kluster Kubernetes.
Pendekatan penyedia generik berdasarkan akun layanan yang ada berfungsi dengan kluster dari penyedia cloud apa pun, termasuk Azure. Manfaat menggunakan opsi Azure Kubernetes Service adalah membuat objek ServiceAccount dan RoleBinding baru (alih-alih menggunakan kembali ServiceAccount yang ada) sehingga objek RoleBinding yang baru dibuat dapat membatasi operasi ServiceAccount ke namespace yang dipilih saja.
Saat Anda menggunakan pendekatan penyedia generik, pastikan bahwa RoleBinding ada, yang memberikan izin di edit
ClusterRole
ke akun layanan yang diinginkan. Anda perlu memberikan izin ke akun layanan yang tepat sehingga akun layanan dapat digunakan oleh Azure Pipelines untuk membuat objek di namespace yang dipilih.
Penyebaran paralel ke beberapa cloud
Contoh berikut menunjukkan cara melakukan penyebaran paralel ke kluster di beberapa cloud. Dalam contoh ini, ada penyebaran ke kluster AKS, GKE, EKS, dan OpenShift. Keempat namespace ini dikaitkan dengan sumber daya Kubernetes di contoso
bawah lingkungan.
trigger:
- main
jobs:
- deployment:
displayName: Deploy to AKS
pool:
vmImage: ubuntu-latest
environment: contoso.aksnamespace
strategy:
runOnce:
deploy:
steps:
- checkout: self
- task: KubernetesManifest@0
displayName: Deploy to Kubernetes cluster
inputs:
action: deploy
kubernetesServiceConnection: serviceConnection #replace with your service connection
namespace: aksnamespace
manifests: manifests/*
- deployment:
displayName: Deploy to GKE
pool:
vmImage: ubuntu-latest
environment: contoso.gkenamespace
strategy:
runOnce:
deploy:
steps:
- checkout: self
- task: KubernetesManifest@0
displayName: Deploy to Kubernetes cluster
inputs:
action: deploy
kubernetesServiceConnection: serviceConnection #replace with your service connection
namespace: gkenamespace
manifests: manifests/*
- deployment:
displayName: Deploy to EKS
pool:
vmImage: ubuntu-latest
environment: contoso.eksnamespace
strategy:
runOnce:
deploy:
steps:
- checkout: self
- task: KubernetesManifest@0
displayName: Deploy to Kubernetes cluster
inputs:
action: deploy
kubernetesServiceConnection: serviceConnection #replace with your service connection
namespace: eksnamespace
manifests: manifests/*
- deployment:
displayName: Deploy to OpenShift
pool:
vmImage: ubuntu-latest
environment: contoso.openshiftnamespace
strategy:
runOnce:
deploy:
steps:
- checkout: self
- task: KubernetesManifest@0
displayName: Deploy to Kubernetes cluster
inputs:
action: deploy
kubernetesServiceConnection: serviceConnection #replace with your service connection
namespace: openshiftnamespace
manifests: manifests/*
- deployment:
displayName: Deploy to DigitalOcean
pool:
vmImage: ubuntu-latest
environment: contoso.digitaloceannamespace
strategy:
runOnce:
deploy:
steps:
- checkout: self
- task: KubernetesManifest@0
displayName: Deploy to Kubernetes cluster
inputs:
action: deploy
kubernetesServiceConnection: serviceConnection #replace with your service connection
namespace: digitaloceannamespace
manifests: manifests/*