Distribuzioni kubernetes multi-cloud

Azure DevOps Services

Kubernetes ha un'interfaccia standard e viene eseguito allo 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 da qualsiasi altro provider di cloud. Questo articolo illustra come connettersi a ognuno di questi cluster e come eseguire distribuzioni parallele in più cloud.

Ambiente di installazione e risorse Kubernetes

Le risorse Kubernetes appartenenti agli ambienti possono essere destinate ai processi di distribuzione per consentire la tracciabilità della pipeline e la possibilità di diagnosticare l'integrità delle risorse.

Nota

Le distribuzioni nei cluster Kubernetes sono possibili anche usando processi regolari, ma i vantaggi della tracciabilità della pipeline e della possibilità di diagnosticare l'integrità delle risorse non sono disponibili in questa opzione.

Per configurare la distribuzione multi-cloud , creare un ambiente e quindi aggiungere le risorse Kubernetes associate agli spazi dei nomi dei cluster Kubernetes. Seguire i passaggi nelle sezioni collegate in base al provider di servizi cloud del cluster Kubernetes:

Suggerimento

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 incrementale dell'uso dell'opzione servizio Azure Kubernetes consiste nel fatto che comporta la creazione di nuovi oggetti ServiceAccount e RoleBinding (anziché riutilizzare un ServiceAccount esistente) in modo che l'oggetto RoleBinding appena creato limiti le operazioni di ServiceAccount solo allo spazio dei nomi scelto.

Distribuzioni parallele in più cloud

Il frammento di codice YAML seguente illustra come eseguire distribuzioni parallele a cluster da più cloud. In questo esempio le distribuzioni vengono eseguite alle risorse corrispondenti agli spazi dei nomi dei cluster AKS, GKE, EKS e OpenShift. Questi quattro spazi dei nomi sono associati alle risorse Kubernetes nell'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/*

Nota

Quando si usa l'opzione dell'account del servizio, assicurarsi che esista un roleBinding, che concede le autorizzazioni in all'account editClusterRole del servizio desiderato. Questa operazione è necessaria in modo che l'account del servizio possa essere Azure Pipelines per la creazione di oggetti nello spazio dei nomi scelto.