Eseguire la distribuzione in Kubernetes
Azure DevOps Services | Azure DevOps Server 2022
È possibile usare Azure Pipelines per la distribuzione in servizio Azure Kubernetes e cluster Kubernetes offerti da altri provider di servizi cloud. Azure Pipelines ha due attività per lavorare con Kubernetes:
- Attività KubernetesManifest: preparare e distribuire manifest nei cluster Kubernetes con Helm, Kompose o Kustomize
- Attività Kubectl: distribuire, configurare e aggiornare un cluster Kubernetes nel servizio Azure Container eseguendo comandi kubectl
Se si usa servizio Azure Kubernetes con una delle due attività, il tipo di connessione del servizio Azure Resource Manager è il modo migliore per connettersi a un cluster privato o un cluster con account locali disabilitati.
Per una maggiore tracciabilità della distribuzione, utilizzare una risorsa Kubernetes in ambienti con un'attività Kubernetes.
Per iniziare a usare Azure Pipelines e il servizio Azure Kubernetes, vedere Creare e distribuire in servizio Azure Kubernetes con Azure Pipelines. Per iniziare a usare Azure Pipelines, Kubernetes e la strategia di distribuzione canary in modo specifico, vedere Usare una strategia di distribuzione canary per le distribuzioni Kubernetes con Azure Pipelines.
Attività KubernetesManifest
L'attività KubernetesManifest verifica la stabilità degli oggetti prima di contrassegnare un'attività come operazione riuscita/errore. L'attività può anche eseguire la sostituzione degli artefatti, aggiungere annotazioni correlate alla tracciabilità della pipeline, semplificare la creazione e il riferimento degli imagePullSecrets, preparare i manifesti e facilitare l'attuazione delle strategie di distribuzione.
Nota
Sebbene i trigger della pipeline basata su YAML supportino un singolo repository Git, se è necessario un trigger per un file manifesto archiviato in un altro repository Git o se sono necessari trigger per Azure Container Registry o Docker Hub, è consigliabile usare una pipeline classica anziché una pipeline basata su YAML.
È possibile utilizzare l'azione bake nell'attività Kubernetes manifest task per convertire i modelli in file manifesto Kubernetes. L'azione consente di usare strumenti come Helm, Kustomize e Kompose. L'azione di bake dell'attività manifesti di Kubernetes offre visibilità sulla trasformazione tra i modelli di input e i file dei manifesti finali utilizzati nelle distribuzioni. È possibile utilizzare i file manifesto preconfigurati a valle (nelle attività) come input per l'azione di distribuzione del compito manifesto Kubernetes.
È possibile specificare come destinazione risorse Kubernetes che fanno parte di ambienti con processi di distribuzione. L'uso degli ambienti e della distribuzione delle risorse consente di accedere a una migliore tracciabilità delle pipeline in modo da poter diagnosticare i problemi di distribuzione. È anche possibile eseguire la distribuzione nei cluster Kubernetes con processi regolari senza le stesse funzionalità di integrità.
Il seguente codice YAML è un esempio di generazione di file manifesto da 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
Attività Kubectl
In alternativa all'attività KubernetesManifest, è possibile usare l'attività Kubectl per distribuire, configurare e aggiornare un cluster Kubernetes nel servizio Azure Container eseguendo i comandi kubectl.
L'esempio seguente illustra come viene usata una connessione al servizio per fare riferimento al cluster Kubernetes.
- task: Kubernetes@1
displayName: kubectl apply
inputs:
connectionType: Kubernetes Service Connection
kubernetesServiceEndpoint: Contoso
Attività di Script
È anche possibile usare kubectl
con un'attività script.
Nell'esempio seguente viene usato uno script per eseguire kubectl
.
- script: |
kubectl apply -f manifest.yml
Strategie di distribuzione di Kubernetes
L'attività Manifest Kubernetes attualmente supporta la strategia di distribuzione Canary. Usare la strategia di distribuzione canary per distribuire parzialmente nuove modifiche in modo che le nuove modifiche coesistono con le distribuzioni correnti prima di un'implementazione completa.
Per altre informazioni sulle distribuzioni canary con pipeline, vedere Usare una strategia di distribuzione canary per le distribuzioni Kubernetes con Azure Pipelines.
Distribuzioni Kubernetes multicloud
Kubernetes esegue lo stesso modo in tutti i provider di servizi cloud. Azure Pipelines può essere usato per la distribuzione in servizio Azure Kubernetes (AKS), Google Kubernetes Engine (GKE), Amazon Elastic Kubernetes Service (EKS) o cluster di qualsiasi altro provider di servizi cloud.
Per configurare la distribuzione multicloud, creare un ambiente e poi aggiungere le risorse Kubernetes che sono associate ai namespace dei cluster Kubernetes.
L'approccio del provider generico basato sull'account del servizio esistente funziona con i cluster di qualsiasi provider di servizi cloud, incluso Azure. Il vantaggio dell'uso dell'opzione servizio Azure Kubernetes consiste nel fatto che crea nuovi oggetti ServiceAccount e RoleBinding (anziché riutilizzare un ServiceAccount esistente) in modo che l'oggetto RoleBinding appena creato possa limitare le operazioni di ServiceAccount solo allo spazio dei nomi scelto.
Quando si usa l'approccio del provider generico, assicurarsi che esista un RoleBinding, che concede le autorizzazioni nell'account edit
ClusterRole
del servizio desiderato. È necessario concedere le autorizzazioni all'account di servizi appropriato in modo che l'account del servizio possa essere usato da Azure Pipelines per creare oggetti nello spazio dei nomi scelto.
Distribuzioni parallele su più cloud
L'esempio seguente mostra come fare una distribuzione parallela ai cluster su più cloud. In questo esempio, ci sono distribuzioni nei cluster AKS, GKE, EKS e OpenShift. Questi quattro namespace sono associati alle risorse Kubernetes dell'ambiente contoso
.
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/*