Distribuera till Kubernetes
Azure DevOps Services | Azure DevOps Server 2022
Du kan använda Azure Pipelines för att distribuera till Azure Kubernetes Service - och Kubernetes-kluster som erbjuds av andra molnleverantörer. Azure Pipelines har två uppgifter för att arbeta med Kubernetes:
- KubernetesManifest-uppgift: baka och distribuera manifest till Kubernetes-kluster med Helm, Kompose eller Kustomize
- Kubectl-uppgift: distribuera, konfigurera och uppdatera ett Kubernetes-kluster i Azure Container Service genom att köra kubectl-kommandon
Om du använder Azure Kubernetes Service med någon av aktiviteterna är Anslutningstypen för Azure Resource Manager-tjänsten det bästa sättet att ansluta till ett privat kluster eller ett kluster som har lokala konton inaktiverade.
Om du vill lägga till distributionsspårning kan du använda en Kubernetes-resurs i miljöer med en Kubernetes-uppgift.
Information om hur du kommer igång med Azure Pipelines och Azure Kubernetes-tjänsten finns i Skapa och distribuera till Azure Kubernetes Service med Azure Pipelines. Information om hur du kommer igång med Azure Pipelines, Kubernetes och distributionsstrategin för kanariefågel finns i Använda en kanariedistributionsstrategi för Kubernetes-distributioner med Azure Pipelines.
KubernetesManifest-uppgift
KubernetesManifest-aktiviteten söker efter objektstabilitet innan en uppgift markeras som lyckad/misslyckad. Uppgiften kan också utföra artefaktersättning, lägga till pipelinespårningsrelaterade anteckningar, förenkla skapandet och referera till imagePullSecrets, baka manifest och hjälp med distributionsstrategidistributioner.
Kommentar
Medan YAML-baserade pipelinestödutlösare på en enda Git-lagringsplats, om du behöver en utlösare för en manifestfil som lagras på en annan Git-lagringsplats eller om utlösare behövs för Azure Container Registry eller Docker Hub, bör du använda en klassisk pipeline i stället för en YAML-baserad pipeline.
Du kan använda åtgärden bake i Kubernetes-manifestuppgiften för att baka mallar till Kubernetes-manifestfiler. Med åtgärden kan du använda verktyg som Helm, Kustomize och Kompose. Åtgärden bake för Kubernetes-manifestaktiviteten ger insyn i omvandlingen mellan indatamallar och slutmanifestfilerna som används i distributioner. Du kan använda bakade manifestfiler nedströms (i uppgifter) som indata för distributionsåtgärden för Kubernetes-manifestaktiviteten.
Du kan rikta in dig på Kubernetes-resurser som ingår i miljöer med distributionsjobb. Med hjälp av miljöer och resursdistribution får du tillgång till bättre pipelinespårning så att du kan diagnostisera distributionsproblem. Du kan också distribuera till Kubernetes-kluster med vanliga jobb utan samma hälsofunktioner.
Följande YAML-kod är ett exempel på att baka manifestfiler från Helm-diagram
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-uppgift
Som ett alternativ till KubernetesManifest KubernetesManifest-uppgiften kan du använda Kubectl-uppgiften för att distribuera, konfigurera och uppdatera ett Kubernetes-kluster i Azure Container Service genom att köra kubectl-kommandon.
I följande exempel visas hur en tjänstanslutning används för att referera till Kubernetes-klustret.
- task: Kubernetes@1
displayName: kubectl apply
inputs:
connectionType: Kubernetes Service Connection
kubernetesServiceEndpoint: Contoso
Skriptaktivitet
Du kan också använda kubectl
med en skriptuppgift.
I följande exempel används ett skript för att köra kubectl
.
- script: |
kubectl apply -f manifest.yml
Strategier för Kubernetes-distribution
Kubernetes-manifestuppgiften stöder för närvarande en strategi för kanariedistribution. Använd en strategi för kanariedistribution för att delvis distribuera nya ändringar så att de nya ändringarna samexisterar med de aktuella distributionerna före en fullständig distribution.
Mer information om kanariedistributioner med pipelines finns i Använda en kanariedistributionsstrategi för Kubernetes-distributioner med Azure Pipelines.
Kubernetes-distributioner med flera moln
Kubernetes körs på samma sätt på alla molnleverantörer. Azure Pipelines kan användas för distribution till Azure Kubernetes Service (AKS), Google Kubernetes Engine (GKE), Amazon Elastic Kubernetes Service (EKS) eller kluster från andra molnleverantörer.
Om du vill konfigurera distribution med flera moln skapar du en miljö och lägger sedan till dina Kubernetes-resurser som är associerade med namnrymder för Kubernetes-kluster.
Den allmänna providermetoden som baseras på ett befintligt tjänstkonto fungerar med kluster från alla molnleverantörer, inklusive Azure. Fördelen med att använda alternativet Azure Kubernetes Service i stället är att det skapar nya ServiceAccount - och RoleBinding-objekt (i stället för att återanvända ett befintligt ServiceAccount) så att det nyligen skapade RoleBinding-objektet endast kan begränsa driften av ServiceAccount till det valda namnområdet.
När du använder den allmänna providermetoden kontrollerar du att det finns ett RoleBinding som ger behörighet till edit
ClusterRole
det önskade tjänstkontot. Du måste bevilja behörigheter till rätt tjänstkonto så att tjänstkontot kan användas av Azure Pipelines för att skapa objekt i det valda namnområdet.
Parallella distributioner till flera moln
I följande exempel visas hur du utför parallella distributioner till kluster i flera moln. I det här exemplet finns det distributioner till AKS-, GKE-, EKS- och OpenShift-kluster. Dessa fyra namnområden är associerade med Kubernetes-resurser under contoso
miljön.
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/*