Aracılığıyla paylaş


Kubernetes’e dağıtma

Azure DevOps Services | Azure DevOps Server 2022

Diğer bulut sağlayıcıları tarafından sunulan Azure Kubernetes Service ve Kubernetes kümelerine dağıtmak için Azure Pipelines'ı kullanın. 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, bir Kubernetes göreviyle birlikte ortamlarda bir Kubernetes kaynağı kullanın.

Azure Pipelines ve Azure Kubernetes Service'i kullanmaya başlamak için bkz. Azure Pipelines ile Azure Kubernetes Service'i derleme ve yayına alma. Azure Pipelines, Kubernetes ve kanarya dağıtım stratejisini kullanmaya başlamak için bkz. Azure Pipelines ile Kubernetes dağıtımları için bir kanarya dağıtım stratejisi kullanma.

KubernetesManifest görevi

KubernetesManifest görevi, görevi başarılı veya başarısız olarak işaretlemeden önce nesne kararlılığını denetler. Görev ayrıca artefakt değişimi gerçekleştirebilir, işlem hattı takip edilebilirliğiyle ilgili ek açıklamalar ekleyebilir, imagePullSecrets oluşturulmasını ve bunlara başvurmayı basitleştirebilir, manifest dosyalarını hazırlayabilir ve dağıtım stratejilerinin uygulanmasına yardımcı olabilir.

Not

YAML tabanlı işlem hattı desteği tek bir Git deposunu tetikler. 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 bir işlem hattı kullanın.

Ş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üşümü gösterir. Kubernetes manifest görevinde dağıtım eylemi için giriş olarak hazırlanan manifest dosyalarını görevlerin çıktıları olarak kullanabilirsiniz.

Dağıtım işleri içeren ortamların parçası olan Kubernetes kaynaklarını hedefleyin. Ortamları ve kaynak dağıtımlarını kullanmak işlem hattı izlenebilirliğini geliştirerek dağıtım sorunlarını tanılamanıza yardımcı olur. Aynı durum kontrol özelliklerine sahip olmayan normal işlerle Kubernetes kümelerine de dağıtım yapabilirsiniz.

Aşağıdaki YAML kodu, Helm şemalarından bildirim dosyalarının nasıl oluşturulacağını gösterir.

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

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

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 kullanın.

Bu örnekte bir hizmet bağlantısının Kubernetes kümesine nasıl başvurduğu gösterilmektedir.

- task: Kubernetes@1
  displayName: kubectl apply
  inputs:
    connectionType: Kubernetes Service Connection
    kubernetesServiceConnection: Contoso #alias: kubernetesServiceEndpoint

Skript görevi

kubectl Bir betik göreviyle kullanın.

Bu örnekte, kubectl çalıştırmak için bir betik kullanılır.

- script: |
    kubectl apply -f manifest.yml

Kubernetes dağıtım stratejileri

Kubernetes bildirim görevi kanarya dağıtım stratejisini destekler. 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ıyla kanarya dağıtımları hakkında daha fazla bilgi için Azure Pipelines ile Kubernetes dağıtımları için kanarya dağıtım stratejisini kullanma bölümüne bakın.

Çok bulutlu Kubernetes dağıtımları

Kubernetes tüm bulut sağlayıcılarında aynı şekilde çalışır. 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 Azure Pipelines'ı kullanın.

Çoklu bulut dağıtımını ayarlamak için bir ortam oluşturun ve Kubernetes kümelerinin ad alanlarıyla ilişkili Kubernetes kaynaklarını ekleyin.

Mevcut bir 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. Azure Kubernetes Service seçeneğinin kullanılması yeni ServiceAccount ve RoleBinding nesneleri oluşturur. Bu, RoleBinding nesnesinin ServiceAccount'ın işlemlerini seçilen ad alanıyla sınırlamasını sağlar.

Genel sağlayıcı yaklaşımını kullanırken, içinde istenen hizmet hesabına izinler veren bir RoleBinding bulunduğundaneditClusterRole emin olun. Azure Pipelines'ın seçilen ad alanında nesne oluşturmak için kullanabilmesi için doğru hizmet hesabına izin verin.

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@1
          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@1
          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@1
          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@1
          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@1
          displayName: Deploy to Kubernetes cluster
          inputs:
            action: deploy
            kubernetesServiceConnection: serviceConnection #replace with your service connection
            namespace: digitaloceannamespace
            manifests: manifests/*