Deploy to Kubernetes

Azure DevOps Services | Azure DevOps Server 2022

Az Azure Pipelines használatával üzembe helyezheti a más felhőszolgáltatók által kínált Azure Kubernetes Service - és Kubernetes-fürtöket. Az Azure Pipelines két feladattal rendelkezik a Kubernetes használatával kapcsolatban:

  • KubernetesManifest-feladat: jegyzékfájlokat süthet és helyezhet üzembe a Helm, Kompose vagy Kustomize kubernetes-fürtökön
  • Kubectl-feladat: Kubernetes-fürt üzembe helyezése, konfigurálása és frissítése az Azure Container Service-ben kubectl-parancsok futtatásával

Ha az Azure Kubernetes Service-t használja bármelyik feladattal, az Azure Resource Manager szolgáltatás kapcsolattípusa a legjobb módja annak, hogy privát fürthöz vagy helyi fiókokat letiltó fürthöz csatlakozzon.

Az üzembe helyezés nyomon követéséhez kubernetes-erőforrásthasználjon Kubernetes-feladattal rendelkező környezetekben.

Az Azure Pipelines és az Azure Kubernetes szolgáltatás használatának megkezdéséhez tekintse meg az Azure Kubernetes Service és az Azure Pipelines összeállítása és üzembe helyezése című témakört. Az Azure Pipelines, a Kubernetes és a kanári-telepítési stratégia használatának első lépéseit lásd : Kubernetes-üzembe helyezési stratégia használata az Azure Pipelines használatával.

KubernetesManifest-feladat

A KubernetesManifest-feladat ellenőrzi az objektum stabilitását, mielőtt sikeresnek/sikertelennek jelöl meg egy feladatot. A feladat emellett elvégezheti az összetevők helyettesítését, hozzáadhat folyamatkövetéshez kapcsolódó széljegyzeteket, egyszerűbbé teheti az imagePullSecrets létrehozását és hivatkozását, sütheti a jegyzékfájlokat, és segítséget adhat az üzembehelyezési stratégia bevezetéséhez.

Megjegyzés:

Bár a YAML-alapú folyamatok egyetlen Git-adattárban aktiválódnak, ha egy másik Git-adattárban tárolt jegyzékfájl eseményindítójára van szüksége, vagy ha eseményindítókra van szükség az Azure Container Registryhez vagy a Docker Hubhoz, akkor yaML-alapú folyamat helyett egy klasszikus folyamatot kell használnia.

A Kubernetes-jegyzékfeladatban a sütési művelet használatával sablonokat süthet Kubernetes-jegyzékfájlokba. A művelet lehetővé teszi olyan eszközök használatát, mint a Helm, a Kustomize és a Kompose. A Kubernetes-jegyzékfeladat sütési művelete betekintést nyújt a bemeneti sablonok és az üzembe helyezésekben használt záró jegyzékfájlok közötti átalakításba. A Kubernetes-jegyzékfeladat üzembe helyezési műveletének bemeneteként használhatja a kész jegyzékfájlokat az alsóbb rétegben (tevékenységekben).

Az üzembehelyezési feladatokkal rendelkező környezetek részét képező Kubernetes-erőforrásokat célozhatja meg. A környezetek és az erőforrások üzembe helyezése jobb folyamatkövethetőséget biztosít, így diagnosztizálhatja az üzembe helyezéssel kapcsolatos problémákat. Olyan Kubernetes-fürtökre is üzembe helyezheti azokat, amelyek normál feladatokkal rendelkeznek, és nem rendelkeznek ugyanazokkal az állapotfunkciókkal.

Az alábbi YAML-kód egy példa a Helm-diagramok jegyzékfájljainak sütésére

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-feladat

A KubernetesManifest KubernetesManifest feladat alternatívaként a Kubectl-feladattal kubectl-parancsok futtatásával telepítheti, konfigurálhatja és frissítheti a Kubernetes-fürtöt az Azure Container Service-ben.

Az alábbi példa bemutatja, hogyan hivatkozik a szolgáltatáskapcsolat a Kubernetes-fürtre.

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

Szkriptfeladat

Szkriptfeladatokkal is használhatókubectl.

Az alábbi példa egy szkriptet használ a futtatáshoz kubectl.

- script: |
    kubectl apply -f manifest.yml

A Kubernetes üzembe helyezési stratégiái

A Kubernetes-jegyzékfeladat jelenleg támogatja a kanári-telepítési stratégiát. A kanári üzembehelyezési stratégia használatával részlegesen üzembe helyezhet új módosításokat, hogy az új módosítások a teljes bevezetés előtt együtt létezhessenek az aktuális központi telepítésekkel.

A folyamatokkal rendelkező kanári-telepítésekkel kapcsolatos további információkért lásd : Kubernetes-üzembe helyezési stratégia használata az Azure Pipelines használatával.

Többfelhős Kubernetes-üzemelő példányok

A Kubernetes ugyanúgy fut minden felhőszolgáltatón. Az Azure Pipelines használható az Azure Kubernetes Service (AKS), a Google Kubernetes Engine (GKE), az Amazon Elastic Kubernetes Service (EKS) vagy más felhőszolgáltatók fürtöinek üzembe helyezéséhez.

Többfelhős üzembe helyezés beállításához hozzon létre egy környezetet, majd adja hozzá a Kubernetes-fürtök névteréhez társított Kubernetes-erőforrásokat.

A meglévő szolgáltatásfiókon alapuló általános szolgáltatói megközelítés bármely felhőszolgáltató fürtöivel működik, beleértve az Azure-t is. Az Azure Kubernetes Service lehetőség használatának előnye, hogy új ServiceAccount - és RoleBinding-objektumokat hoz létre (a meglévő ServiceAccount újrafelhasználása helyett), hogy az újonnan létrehozott RoleBinding objektum csak a kiválasztott névtérre korlátozza a ServiceAccount műveleteit.

Az általános szolgáltatói megközelítés használatakor győződjön meg arról, hogy létezik egy RoleBinding, amely engedélyeket ad a editClusterRole kívánt szolgáltatásfiókhoz. Engedélyeket kell adnia a megfelelő szolgáltatásfiókhoz, hogy az Azure Pipelines használhassa a szolgáltatásfiókot objektumok létrehozásához a kiválasztott névtérben.

Párhuzamos üzembe helyezés több felhőbe

Az alábbi példa bemutatja, hogyan végezhet párhuzamos üzembe helyezéseket több felhőben lévő fürtökön. Ebben a példában az AKS-, GKE-, EKS- és OpenShift-fürtök üzembe helyezései találhatók. Ez a négy névtér a környezet kubernetes-erőforrásaihoz contoso van társítva.

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