Nasazení do Kubernetes
Azure DevOps Services | Azure DevOps Server 2022
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á dvě úlohy pro práci s Kubernetes:
- Úloha KubernetesManifest: pečení a nasazení manifestů do clusterů Kubernetes s Helmem, 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 službu Azure Kubernetes Service s některou úlohou, je nejlepším způsobem připojení služby Azure Resource Manager k privátnímu clusteru nebo clusteru, který má zakázané místní účty.
Pokud chcete přidat sledovatelnost nasazení, použijte prostředek Kubernetes v prostředích s úlohou Kubernetes.
Pokud chcete začít pracovat se službou Azure Pipelines a Azure Kubernetes, přečtěte si téma Sestavení a nasazení do služby Azure Kubernetes Service pomocí Azure Pipelines. Pokud chcete začít se službou Azure Pipelines, Kubernetes a konkrétně strategií nasazení kanárů, přečtěte si téma Použití kanárské strategie nasazení pro nasazení Kubernetes se službou Azure Pipelines.
Úloha KubernetesManifest
Úloha KubernetesManifest kontroluje stabilitu objektů před označením úkolu jako úspěch nebo selhání. Úloha může také provádět nahrazení artefaktů, přidat poznámky související s sledovatelností kanálu, zjednodušit vytváření a odkazování na imagePullSecrets, bake manifesty a pomoc při zavádění strategie nasazení.
Poznámka:
I když kanál založený na YAML podporuje triggery v jednom úložišti Git, pokud potřebujete trigger pro soubor manifestu uložený v jiném úložišti Git nebo pokud jsou triggery potřeba pro Azure Container Registry nebo Docker Hub, měli byste místo kanálu založeného na YAML použít klasický kanál.
Akci bake v úloze manifestu Kubernetes můžete použít k pečení šablon do souborů manifestu Kubernetes. Akce umožňuje používat nástroje, jako je 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. Upečené soubory manifestu (v úkolech) můžete využívat jako vstupy pro akci nasazení úlohy manifestu Kubernetes.
Prostředky Kubernetes, které jsou součástí prostředí s úlohami nasazení, můžete cílit. Použití prostředí a nasazení prostředků poskytuje 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 pomocí úlohy Kubectl nasadit, nakonfigurovat a aktualizovat cluster 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 odkazu 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 v současné době podporuje strategii nasazení kanárů. Strategie nasazení kanárů slouží k částečnému nasazení nových změn, aby nové změny spolu s aktuálními nasazeními spoluexistovali před úplným uvedením.
Další informace o kanárských nasazeních s kanály najdete v tématu Použití kanárské strategie nasazení pro nasazení Kubernetes se službou Azure Pipelines.
Nasazení Kubernetes s více cloudy
Kubernetes běží na všech poskytovatelích cloudu stejným způsobem. Azure Pipelines je možné použít k nasazení do služby Azure Kubernetes Service (AKS), Google Kubernetes Engine (GKE), Amazon Elastic Kubernetes Service (EKS) nebo clusterů od jiných poskytovatelů cloudu.
Pokud chcete nastavit vícecloudové nasazení, vytvořte prostředí a přidejte prostředky Kubernetes přidružené k oborům názvů clusterů Kubernetes.
Obecný přístup poskytovatele 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 vytváří nové objekty ServiceAccount a RoleBinding (místo opětovného použití existujícího účtu ServiceAccount), aby nově vytvořený objekt RoleBinding mohl omezit operace ServiceAccount pouze na zvolený obor názvů.
Při použití obecného přístupu zprostředkovatele se ujistěte, že existuje vazba role, která uděluje oprávnění k edit
ClusterRole
požadovanému účtu služby. Musíte udělit oprávnění správnému účtu služeb, aby účet služby mohl azure Pipelines použít k vytváření objektů ve zvoleném oboru názvů.
Paralelní nasazení do několika cloudů
Následující příklad ukazuje, jak provádět paralelní nasazení do clusterů v několika 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 rámci contoso
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/*