Implementar no Kubernetes
Serviços de DevOps do Azure | Azure DevOps Server 2022
Você pode usar o Azure Pipelines para implantar no Serviço Kubernetes do Azure e clusters Kubernetes oferecidos por outros provedores de nuvem. O Azure Pipelines tem duas tarefas para trabalhar com o Kubernetes:
- Tarefa KubernetesManifest: compilar e implantar manifestos em clusters Kubernetes com Helm, Kompose ou Kustomize
- Tarefa Kubectl: implantar, configurar e atualizar um cluster Kubernetes no Serviço de Contêiner do Azure executando comandos kubectl
Se você estiver usando o Serviço Kubernetes do Azure com qualquer uma das tarefas, o tipo de conexão de serviço do Azure Resource Manager é a melhor maneira de se conectar a um cluster privado ou a um cluster que tenha contas locais desabilitadas.
Para maior rastreabilidade de implantação, use um recurso do Kubernetes em ambientes com uma tarefa do Kubernetes.
Para começar a usar o Azure Pipelines e o serviço Kubernetes do Azure, consulte Criar e implantar no Serviço Kubernetes do Azure com o Azure Pipelines. Para começar a usar o Azure Pipelines, o Kubernetes e a estratégia de implantação canary especificamente, consulte Usar uma estratégia de implantação canary para implantações do Kubernetes com o Azure Pipelines.
Tarefa KubernetesManifest
A tarefa KubernetesManifest verifica a estabilidade do objeto antes de marcar uma tarefa como sucesso/falha. A tarefa também pode executar a substituição de artefatos, adicionar anotações relacionadas à rastreabilidade do pipeline, simplificar a criação e a referência de imagePullSecrets, bake manifests e ajudar na implantação da estratégia de implantação.
Nota
Embora o suporte a pipeline baseado em YAML seja acionado em um único repositório Git, se você precisar de um gatilho para um arquivo de manifesto armazenado em outro repositório Git ou se forem necessários gatilhos para o Registro de Contêiner do Azure ou o Docker Hub, você deverá usar um pipeline clássico em vez de um pipeline baseado em YAML.
Você pode usar a ação bake na tarefa de manifesto do Kubernetes para compilar modelos em arquivos de manifesto do Kubernetes. A ação permite que você use ferramentas como Helm, Kustomize e Kompose. A ação bake da tarefa de manifesto do Kubernetes fornece visibilidade sobre a transformação entre modelos de entrada e os arquivos de manifesto final usados em implantações. Você pode consumir arquivos de manifesto baked downstream (em tarefas) como entradas para a ação de implantação da tarefa de manifesto do Kubernetes.
Você pode direcionar recursos do Kubernetes que fazem parte de ambientes com trabalhos de implantação. O uso de ambientes e recursos oferece acesso a uma melhor rastreabilidade de pipeline para que você possa diagnosticar problemas de implantação. Você também pode implantar em clusters do Kubernetes com trabalhos regulares sem os mesmos recursos de integridade.
O código YAML a seguir é um exemplo de arquivos de manifesto de compilação de gráficos 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
Tarefa Kubectl
Como alternativa à tarefa KubernetesManifest KubernetesManifest, você pode usar a tarefa Kubectl para implantar, configurar e atualizar um cluster Kubernetes no Serviço de Contêiner do Azure executando comandos kubectl.
O exemplo a seguir mostra como uma conexão de serviço é usada para se referir ao cluster Kubernetes.
- task: Kubernetes@1
displayName: kubectl apply
inputs:
connectionType: Kubernetes Service Connection
kubernetesServiceEndpoint: Contoso
Tarefa de script
Você também pode usar kubectl
com uma tarefa de script.
O exemplo a seguir usa um script para executar kubectl
o .
- script: |
kubectl apply -f manifest.yml
Estratégias de implementação do Kubernetes
A tarefa de manifesto do Kubernetes atualmente oferece suporte à estratégia de implantação canária. Use a estratégia de implantação canária para implantar parcialmente novas alterações para que as novas alterações coexistam com as implantações atuais antes de uma implantação completa.
Para obter mais informações sobre implantações canárias com pipelines, consulte Usar uma estratégia de implantação canary para implantações do Kubernetes com o Azure Pipelines.
Implantações do Kubernetes multicloud
O Kubernetes é executado da mesma forma em todos os provedores de nuvem. Os Pipelines do Azure podem ser usados para implantação no Azure Kubernetes Service (AKS), Google Kubernetes Engine (GKE), Amazon Elastic Kubernetes Service (EKS) ou clusters de quaisquer outros provedores de nuvem.
Para configurar a implantação multicloud, crie um ambiente e adicione seus recursos do Kubernetes associados a namespaces de clusters Kubernetes.
A abordagem de provedor genérico baseada na conta de serviço existente funciona com clusters de qualquer provedor de nuvem, incluindo o Azure. O benefício de usar a opção Serviço Kubernetes do Azure é que ela cria novos objetos ServiceAccount e RoleBinding (em vez de reutilizar uma ServiceAccount existente) para que o objeto RoleBinding recém-criado possa limitar as operações da ServiceAccount apenas ao namespace escolhido.
Ao usar a abordagem de provedor genérico, verifique se existe um RoleBinding, que concede permissões na edit
ClusterRole
conta de serviço desejada. Você precisa conceder permissões à conta de serviços correta para que a conta de serviço possa ser usada pelo Azure Pipelines para criar objetos no namespace escolhido.
Implantações paralelas em várias nuvens
O exemplo a seguir mostra como fazer implantações paralelas para clusters em várias nuvens. Neste exemplo, há implantações para os clusters AKS, GKE, EKS e OpenShift. Esses quatro namespaces estão associados aos recursos do contoso
Kubernetes no ambiente.
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/*