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.

Dekont

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 kubectliç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 editClusterRole 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/*