Implante com o Helm

Concluído

Você criou e enviou com êxito suas imagens de preparo e produção para sua instância do Registro de Contêiner do Azure. É hora de automatizar todas as etapas e fazer o pipeline funcionar para você.

Atualmente, você deve alterar manualmente os arquivos sempre que executar o pipeline, para que não possa implantá-los automaticamente. Para resolver esse problema, você pode usar um gráfico de leme para gerenciar suas implantações. Nesta unidade, você aprende sobre gráficos e modelos Helm.

Gráficos Helm

Helm é uma ferramenta de empacotamento de código aberto semelhante aos gerenciadores de pacotes Linux como APT e Yum. O Helm pode ajudá-lo a instalar e gerenciar o ciclo de vida dos aplicativos Kubernetes.

Você usa o Helm para gerenciar gráficos do Kubernetes, que são grupos de uma ou mais cargas de trabalho empacotadas com arquivos de configuração e um arquivo de descrição de gráfico. Quando empacotados num gráfico, os ficheiros podem ser facilmente implementados como uma unidade num cluster do Kubernetes.

Uma das vantagens de usar o Helm é não ter que implantar arquivos individualmente. Você pode emitir um único comando para implantar o gráfico. Pode até mesmo implementar vários gráficos dependentes, com uma resolução de dependência automática.

Aqui está a estrutura de um diretório gráfico Helm típico:

Screenshot that shows an example of a Helm chart tree.

  • O arquivo Chart.yaml contém o nome, a descrição e a versão do gráfico.
  • O diretório de gráficos inclui gráficos dependentes.
  • O diretório templates contém todos os arquivos de manifesto.
  • O arquivo values.yaml contém os valores padrão para os modelos Helm.

Modelos do Helm

Uma característica distintiva da ferramenta Helm é sua capacidade de criar e gerenciar modelos para executar implantações automatizadas. Os modelos possibilitam que os arquivos de manifesto sejam automatizados e adicionados a um pipeline de CI/CD. Um ficheiro de modelo é um ficheiro de manifesto que contém espaços reservados para valores de variáveis.

Veja o seguinte exemplo do arquivo deployment.yaml no diretório kubernetes da bifurcação do seu site:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: contoso-website
spec:
  selector:
    matchLabels:
      app: contoso-website
  template:
    metadata:
      labels:
        app: contoso-website
    spec:
      containers:
        - image: !IMAGE!
          name: contoso-website
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 250m
              memory: 256Mi
          ports:
            - containerPort: 80
              name: http

Seu fluxo de trabalho substitui o espaço reservado pela instância do Registro de Contêiner e pelo nome da !IMAGE! imagem. Em um fluxo de trabalho manual, você pode executar o seguinte comando para substituir o espaço reservado e, em seguida, imprimir o !IMAGE! resultado. Para executar o código manualmente, você pode canalizar o comando para kubectl apply -f - criar as cargas de trabalho:

$ sed 's+!IMAGE!+'"$ACR_NAME"'/contoso-website+g' kubernetes/deployment.yaml

No entanto, esta solução manual não é elegante nem eficiente. Com a modelagem nativa do Helm, você pode substituir !IMAGE! usando a {{.Values.containerImage}} variável em vez disso.

...
  template:
...
    spec:
      containers:
        - image: {{.Values.containerImage}}
...

Em seguida, você corre helm install para apontar para a imagem e passar a pasta de gráficos:

$ helm install contoso-website ./chart-location --set containerImage="$ACR_NAME/contoso-website"

O Helm também oferece funções de modelo para lógicas mais complexas, por exemplo, para incluir valores padrão e necessários em seu ambiente. Prossiga para a próxima unidade para construir um gráfico Helm para tornar seu pipeline de CI/CD mais eficiente.

Verifique o seu conhecimento

1.

O que é o Helm?

2.

O que torna o Helm especialmente útil em um pipeline de CI/CD?