Nasazení do Kubernetes

Azure DevOps Services

Azure Pipelines můžete použít k nasazení do clusterů Azure Kubernetes Service a Kubernetes nabízených jinými poskytovateli cloudu. Azure Pipelines má pro práci s Kubernetes dvě úlohy:

  • Úloha KubernetesManifest: upečení a nasazení manifestů do clusterů Kubernetes pomocí Helm, Kompose nebo Kustomize
  • Úloha Kubectl: Nasazení, konfigurace a aktualizace clusteru Kubernetes ve službě Azure Container Service spuštěním příkazů kubectl

Pokud používáte Azure Kubernetes Service s některou z úloh, je typ připojení služby Azure Resource Manager nejlepším způsobem, jak se připojit k privátnímu clusteru nebo ke clusteru se zakázanými místními účty.

Pokud chcete zvýšit sledovatelnost nasazení, použijte prostředek Kubernetes v prostředích s úlohou Kubernetes.

Pokud chcete začít používat Azure Pipelines a Azure Kubernetes Service, přečtěte si téma Sestavení a nasazení do Azure Kubernetes Service pomocí Azure Pipelines. Pokud chcete začít se službou Azure Pipelines, Kubernetes a konkrétně se strategií nasazení kanárů, přečtěte si téma Použití kanárkové strategie nasazení pro nasazení Kubernetes pomocí Azure Pipelines.

KubernetesManifest – úloha

Úloha KubernetesManifest zkontroluje stabilitu objektu před tím, než označí úlohu jako úspěšnou nebo neúspěšnou. Úloha může také provádět nahrazování artefaktů, přidávat poznámky související s sledovatelností kanálů, zjednodušit vytváření a odkazování na imagePullSecrets, bake manifesty a pomáhat při zavádění strategie nasazení.

Poznámka

Kanál založený na YAML sice podporuje triggery v jednom úložišti Git, ale pokud potřebujete trigger pro soubor manifestu uložený v jiném úložišti Git nebo pokud jsou triggery potřebné pro Azure Container Registry nebo Docker Hub, měli byste místo kanálu založeného na YAML použít klasický kanál.

Pomocí akce pečení v úloze manifestu Kubernetes můžete upéct šablony do souborů manifestu Kubernetes. Akce umožňuje používat nástroje, jako jsou Helm, Kustomize a Kompose. Akce bake úlohy manifestu Kubernetes poskytuje přehled o transformaci mezi vstupními šablonami a koncovými soubory manifestu, které se používají v nasazeních. Jako vstupy pro akci nasazení úlohy manifestu Kubernetes můžete využívat soubory manifestu baked (v úkolech).

Můžete cílit na prostředky Kubernetes , které jsou součástí prostředí s úlohami nasazení. Pomocí nasazení prostředí a prostředků získáte přístup k lepší sledovatelnosti kanálů, abyste mohli diagnostikovat problémy s nasazením. Můžete také nasadit do clusterů Kubernetes s běžnými úlohami bez stejných funkcí stavu.

Následující kód YAML je příkladem pečení souborů manifestu z chartů 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

Kubectl – úloha

Jako alternativu k úloze KubernetesManifest KubernetesManifest můžete použít úlohu Kubectl k nasazení, konfiguraci a aktualizaci clusteru Kubernetes ve službě Azure Container Service spuštěním příkazů kubectl.

Následující příklad ukazuje, jak se připojení služby používá k odkazaci na cluster Kubernetes.

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

Úloha skriptu

Můžete také použít kubectl s úlohou skriptu.

Následující příklad používá skript ke spuštění kubectl.

- script: |
    kubectl apply -f manifest.yml

Strategie nasazení Kubernetes

Úloha manifestu Kubernetes aktuálně podporuje kanárkovou strategii nasazení. Pomocí kanárkové strategie nasazení můžete částečně nasadit nové změny tak, aby nové změny před úplným zavedením proběhly společně s aktuálními nasazeními.

Další informace o kanárkách s kanály najdete v tématu Použití kanárkové strategie nasazení pro nasazení Kubernetes pomocí Azure Pipelines.

Nasazení Kubernetes ve více cloudech

Kubernetes běží na všech poskytovatelích cloudu stejným způsobem. Azure Pipelines je možné použít k nasazení do Azure Kubernetes Service (AKS), Google Kubernetes Engine (GKE), Amazon Elastic Kubernetes Service (EKS) nebo clusterů od jiných poskytovatelů cloudu.

Pokud chcete nastavit nasazení ve více cloudech, vytvořte prostředí a pak přidejte prostředky Kubernetes přidružené k oborům názvů clusterů Kubernetes.

Obecný přístup k poskytovateli založený na existujícím účtu služby funguje s clustery od libovolného poskytovatele cloudu, včetně Azure. Výhodou použití možnosti Azure Kubernetes Service místo toho je, že vytvoří nové objekty ServiceAccount a RoleBinding (místo opakovaného použití existujícího serviceAccount), aby nově vytvořený objekt RoleBinding mohl omezit operace ServiceAccount pouze na zvolený obor názvů.

Pokud používáte obecný přístup poskytovatele, ujistěte se, že existuje vazba role, která uděluje oprávnění v objektu editClusterRole k požadovanému účtu služby. Musíte udělit oprávnění správnému účtu služeb, aby ho služba Azure Pipelines mohl používat k vytváření objektů ve zvoleném oboru názvů.

Paralelní nasazení do více cloudů

Následující příklad ukazuje, jak provádět paralelní nasazení do clusterů ve více cloudech. V tomto příkladu existují nasazení do clusterů AKS, GKE, EKS a OpenShift. Tyto čtyři obory názvů jsou přidružené k prostředkům Kubernetes v contoso rámci prostředí.

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/*