Kubernetes’e dağıtma
Azure DevOps Services | Azure DevOps Server 2022
Azure Pipelines'ı kullanarak diğer bulut sağlayıcıları tarafından sunulan Azure Kubernetes Service ve Kubernetes kümelerine dağıtabilirsiniz. Azure Pipelines'ın Kubernetes ile çalışmak için iki görevi vardır:
- KubernetesManifest görevi: Helm, Kompose veya Kustomize ile Kubernetes kümelerine bildirimleri pişirme ve dağıtma
- Kubectl görevi: kubectl komutlarını çalıştırarak Azure Container Service'te kubernetes kümesini dağıtma, yapılandırma ve güncelleştirme
Azure Kubernetes Service'i iki görevden biriyle kullanıyorsanız, özel bir kümeye veya yerel hesapları devre dışı bırakılmış bir kümeye bağlanmanın en iyi yolu Azure Resource Manager hizmet bağlantı türüdür.
Daha fazla dağıtım izlenebilirliği için, Kubernetes görevi olan ortamlarda bir Kubernetes kaynağı kullanın.
Azure Pipelines ve Azure Kubernetes hizmetini kullanmaya başlamak için bkz . Azure Pipelines ile Azure Kubernetes Service'i derleme ve azure kubernetes hizmetine dağıtma. Azure Pipelines, Kubernetes ve kanarya dağıtım stratejisini kullanmaya başlamak için bkz . Azure Pipelines ile Kubernetes dağıtımları için kanarya dağıtım stratejisi kullanma.
KubernetesManifest görevi
KubernetesManifest görevi, görevi başarılı/başarısız olarak işaretlemeden önce nesne kararlılığını denetler. Görev ayrıca yapıt değişimi gerçekleştirebilir, işlem hattı izlenebilirliğiyle ilgili ek açıklamalar ekleyebilir, imagePullSecrets oluşturulmasını ve bunlara başvurmayı basitleştirebilir, bildirimleri pişirebilir ve dağıtım stratejisi dağıtımlarına yardımcı olabilir.
Not
YAML tabanlı işlem hattı desteği tek bir Git deposunda tetiklenirken, başka bir Git deposunda depolanan bir bildirim dosyası için tetikleyiciye ihtiyacınız varsa veya Azure Container Registry veya Docker Hub için tetikleyiciler gerekiyorsa YAML tabanlı işlem hattı yerine klasik işlem hattı kullanmanız gerekir.
Şablonları Kubernetes bildirim dosyalarında pişirmek için Kubernetes bildirim görevindeki pişirme eylemini kullanabilirsiniz. Bu eylem Helm, Kustomize ve Kompose gibi araçları kullanmanıza olanak tanır. Kubernetes bildirim görevinin pişirme eylemi, giriş şablonları ile dağıtımlarda kullanılan son bildirim dosyaları arasındaki dönüştürmeye yönelik görünürlük sağlar. Kubernetes bildirim görevinin dağıtım eylemi için giriş olarak pişmiş bildirim dosyalarını aşağı akış (görevlerde) kullanabilirsiniz.
Dağıtım işleri içeren ortamların parçası olan Kubernetes kaynaklarını hedefleyebilirsiniz. Ortamları ve kaynak dağıtımlarını kullanmak, dağıtım sorunlarını tanılamak için daha iyi işlem hattı izlenebilirliğine erişmenizi sağlar. Aynı sistem durumu özelliklerine sahip olmayan normal işlerle Kubernetes kümelerine de dağıtabilirsiniz.
Aşağıdaki YAML kodu, Helm grafiklerinden bildirim dosyalarının pişirilmesine bir örnektir
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
Kubectl görevi
KubernetesManifest KubernetesManifest görevine alternatif olarak kubectl komutlarını çalıştırarak Azure Container Service'te bir Kubernetes kümesini dağıtmak, yapılandırmak ve güncelleştirmek için Kubectl görevini kullanabilirsiniz.
Aşağıdaki örnekte, Kubernetes kümesine başvurmak için hizmet bağlantısının nasıl kullanıldığı gösterilmektedir.
- task: Kubernetes@1
displayName: kubectl apply
inputs:
connectionType: Kubernetes Service Connection
kubernetesServiceEndpoint: Contoso
Betik görevi
Bir betik göreviyle de kullanabilirsinizkubectl
.
Aşağıdaki örnekte çalıştırmak kubectl
için bir betik kullanılır.
- script: |
kubectl apply -f manifest.yml
Kubernetes dağıtım stratejileri
Kubernetes bildirim görevi şu anda kanarya dağıtım stratejisini desteklemektedir. Yeni değişikliklerin tam dağıtımdan önce geçerli dağıtımlarla birlikte mevcut olması için yeni değişiklikleri kısmen dağıtmak için kanarya dağıtım stratejisini kullanın.
İşlem hatları ile kanarya dağıtımları hakkında daha fazla bilgi için bkz . Azure Pipelines ile Kubernetes dağıtımları için bir kanarya dağıtım stratejisi kullanma.
Çok bulutlu Kubernetes dağıtımları
Kubernetes tüm bulut sağlayıcılarında aynı şekilde çalışır. Azure Pipelines, Azure Kubernetes Service (AKS), Google Kubernetes Engine (GKE), Amazon Elastic Kubernetes Service (EKS) veya diğer bulut sağlayıcılarından kümelere dağıtmak için kullanılabilir.
Çoklu bulut dağıtımını ayarlamak için bir ortam oluşturun ve ardından Kubernetes kümelerinin ad alanlarıyla ilişkili Kubernetes kaynaklarınızı ekleyin.
Mevcut hizmet hesabını temel alan genel sağlayıcı yaklaşımı, Azure dahil olmak üzere herhangi bir bulut sağlayıcısının kümeleriyle çalışır. Bunun yerine Azure Kubernetes Service seçeneğini kullanmanın avantajı, yeni oluşturulan RoleBinding nesnesinin ServiceAccount işlemlerini yalnızca seçilen ad alanıyla sınırlayabilmesi için yeni ServiceAccount ve RoleBinding nesneleri (mevcut bir ServiceAccount'ı yeniden kullanmak yerine) oluşturmasıdır.
Genel sağlayıcı yaklaşımını kullandığınızda, içinde istenen hizmet hesabına izinler edit
ClusterRole
veren bir RoleBinding olduğundan emin olun. Hizmet hesabının Azure Pipelines tarafından seçilen ad alanında nesneler oluşturmak için kullanılabilmesi için doğru hizmet hesabına izin vermeniz gerekir.
Birden çok buluta paralel dağıtımlar
Aşağıdaki örnek, birden çok buluttaki kümelere paralel dağıtımların nasıl yapılacağını gösterir. Bu örnekte AKS, GKE, EKS ve OpenShift kümelerine dağıtımlar vardır. Bu dört ad alanı, ortamın contoso
altındaki Kubernetes kaynaklarıyla ilişkilendirilir.
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/*