Implante recursos e pacotes do Kubernetes usando o Amazon EKS e um repositório de charts do Helm no Amazon S3 - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Implante recursos e pacotes do Kubernetes usando o Amazon EKS e um repositório de charts do Helm no Amazon S3

Criado por Sagar Panigrahi (AWS)

Ambiente: PoC ou piloto

Tecnologias: contêineres e microsserviços; DevOps

Serviços da AWS: Amazon EKS

Resumo

Esse padrão ajuda você a gerenciar aplicativos Kubernetes com eficiência, independentemente de sua complexidade. O padrão integra o Helm aos pipelines existentes de integração e entrega contínuas (CI/CD) para implantar aplicativos em um cluster do Kubernetes. Helm é um gerenciador de pacotes Kubernetes que ajuda a gerenciar aplicativos Kubernetes. Os charts do Helm ajudam a definir, instalar e atualizar aplicativos Kubernetes complexos. Os gráficos (charts) podem ser versionados e armazenados nos repositórios do Helm, o que melhora o tempo médio de restauração (MTTR) durante interrupções. 

Esse padrão usa o Amazon Elastic Kubernetes Service (Amazon EKS) para o cluster do Kubernetes. Ele usa o Amazon Simple Storage Service (Amazon S3) como um repositório de charts do Helm, para que os gráficos possam ser gerenciados e acessados centralmente por desenvolvedores em toda a organização.

Pré-requisitos e limitações

Pré-requisitos

  • Uma conta ativa da Amazon Web Services (AWS) com uma nuvem privada virtual (VPC)

  • Um cluster do Amazon EKS 

  • Nós de trabalho configurados dentro do cluster do Amazon EKS e prontos para receber workloads

  • Kubectl para configurar o arquivo kubeconfig do Amazon EKS para o cluster de destino na máquina cliente

  • Acesso ao AWS Identity and Access Management (IAM) para criar o bucket S3

  • Acesso por IAM (programático ou por perfil) ao Amazon S3 a partir da máquina cliente

  • Gerenciamento de código-fonte e pipeline de CI/CD

Limitações

  • No momento, não há suporte para atualizar, excluir ou gerenciar definições de recursos personalizadas (CRDs).

  • Se você estiver usando um recurso que se refere a um CRD, o CRD deverá ser instalado separadamente (fora do gráfico).

Versões do produto

  • Helm v3.6.3

Arquitetura

Pilha de tecnologias de destino

  • Amazon EKS

  • Amazon VPC

  • Amazon S3

  • Gerenciamento de código-fonte

  • Helm

  • Kubectl

Arquitetura de destino

O cliente Helm e Kubectl implantam um repositório de gráficos Helm no Amazon S3 para clusters do Amazon EKS.

Automação e escala

  • A AWS CloudFormation pode ser usada para automatizar a criação da infraestrutura. Para obter mais informações, consulte Criação de recursos do Amazon EKS com a AWS CloudFormation na documentação do Amazon EKS.

  • O Helm deve ser incorporado à sua ferramenta de automação de CI/CD existente para automatizar o empacotamento e o versionamento dos charts do Helm (fora do escopo desse padrão).

  • GitVersion ou os números de compilação do Jenkins podem ser usados para automatizar o controle de versão dos gráficos.

Ferramentas

Ferramentas

  • Amazon EKS: o Amazon Elastic Kubernetes Service (Amazon EKS) é um serviço gerenciado para executar o Kubernetes na AWS sem a necessidade de criar ou manter seu próprio ambiente de gerenciamento do Kubernetes. O Kubernetes é um sistema de código aberto para automatizar a implantação, a escalabilidade e o gerenciamento de aplicações em contêineres.

  • Helm: é um gerenciador de pacotes Helm para o Kubernetes que ajuda a instalar e gerenciar aplicações em seu cluster do Kubernetes.

  • Amazon S3: o Amazon Simple Storage Service (Amazon S3) serve como armazenamento para a internet. Você pode utilizar o Amazon S3 para armazenar e recuperar qualquer volume de dados, a qualquer momento, de qualquer lugar na web.

  • Kubectl: o Kubectl é um utilitário de linha de comando para executar comandos em clusters do Kubernetes.

Código

O código de exemplo está anexado.

Épicos

TarefaDescriçãoHabilidades necessárias

Instale o cliente Helm.

Para baixar e instalar o cliente do Helm em seu sistema local, use o comando a seguir. 

sudo curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
DevOps engenheiro

Valide a instalação do Helm.

Para validar se o Helm é capaz de se comunicar com o servidor da API Kubernetes dentro do cluster do Amazon EKS, execute helm version.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Crie um chart do Helm para o NGINX.

Para criar um chart do Helm nomeado my-nginx na máquina cliente, execute helm create my-nginx.

DevOps engenheiro

Analise a estrutura do gráfico.

Para revisar a estrutura do gráfico, execute o comando de árvore tree my-nginx/.

DevOps engenheiro

Desative a criação de contas de serviço no gráfico.

Em values.yaml, abaixo da seção serviceAccount, defina a chave create como false. Essa opção está desativada porque não há necessidade de criar uma conta de serviço para esse padrão.

DevOps engenheiro

Valide (lint) o gráfico modificado em busca de erros sintáticos.

Para validar o gráfico em busca de qualquer erro sintático antes de instalá-lo no cluster de destino, execute helm lint my-nginx/.

DevOps engenheiro

Instale o gráfico para implantar recursos do Kubernetes.

Para executar a instalação do chart do Helm, use o comando a seguir. 

helm install --name my-nginx-release --debug my-nginx/ --namespace helm-space

O sinalizador opcional debug gera todas as mensagens de depuração durante a instalação. O sinalizador namespace especifica o namespace no qual a parte de recursos desse gráfico será criada.

DevOps engenheiro

Revise os recursos no cluster do Amazon EKS.

Para revisar os recursos que foram criados como parte do chart do Helm no namespace helm-space, use o comando a seguir. 

kubectl get all -n helm-space
DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Modifique e atualize a versão.

Para modificar o gráfico, em values.yaml, altere o valor de replicaCount para 2. Em seguida, atualize a versão já instalada executando o seguinte comando.

helm upgrade my-nginx-release my-nginx/ --namespace helm-space
DevOps engenheiro

Analise o histórico de versões do Helm.

Para listar todas as revisões de uma versão específica que foram instaladas usando o Helm, execute o comando a seguir. 

helm history my-nginx-release
DevOps engenheiro

Revise os detalhes de uma revisão específica.

Antes de mudar ou reverter para uma versão funcional e para obter uma camada adicional de validação antes de instalar uma revisão, veja quais valores foram passados para cada uma das revisões usando o comando a seguir.

helm get --revision=2 my-nginx-release
DevOps engenheiro

Reverta para uma versão anterior.

Para reverter para uma revisão anterior, use o comando a seguir. 

helm rollback my-nginx-release 1

Este exemplo está revertendo para a revisão número 1.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Crie um bucket do S3 para charts do Helm.

Crie um bucket exclusivo do S3. No bucket, crie uma pasta denominada charts. O exemplo desse padrão usa s3://my-helm-charts/charts como repositório do gráfico de destino.

Administrador de nuvem

Instale o plug-in do Helm para o Amazon S3.

Para instalar o plug-in helm-s3 na máquina cliente, use o comando a seguir. 

helm plugin install https://github.com/hypnoglow/helm-s3.git --version 0.10.0

Observação: o suporte ao Helm V3 está disponível com a versão 0.9.0 e superior do plugin.

DevOps engenheiro

Inicialize o repositório do Helm no Amazon S3.

Para inicializar a pasta de destino como um repositório do Helm, use o comando a seguir. 

helm S3 init s3://my-helm-charts/charts

O comando cria um arquivo index.yaml no destino para rastrear todas as informações do gráfico armazenadas nesse local.

DevOps engenheiro

Adicione o repositório do Amazon S3 ao Helm.

Para adicionar o repositório na máquina cliente, use o comando a seguir.

helm repo add my-helm-charts s3://my-helm-charts/charts

Esse comando adiciona um alias ao repositório de destino na máquina cliente do Helm.

DevOps engenheiro

Revise a lista de repositórios.

Para ver a lista de repositórios na máquina cliente do Helm, execute helm repo list.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Embalar o gráfico.

Para empacotar o gráfico my-nginx que você criou, execute helm package ./my-nginx/. O comando empacota todo o conteúdo da pasta do gráfico my-nginx em um arquivo, que é nomeado usando o número da versão mencionado no arquivo Chart.yaml.

DevOps engenheiro

Armazene o pacote no repositório do Helm no Amazon S3.

Para fazer o upload do pacote para o repositório do Helm no Amazon S3, execute o comando a seguir, usando o nome correto do arquivo .tgz.

helm s3 push ./my-nginx-0.1.0.tgz my-helm-charts
DevOps engenheiro

Pesquise pelo chart do Helm.

Para confirmar se o gráfico aparece localmente e no repositório do Helm no Amazon S3, execute o comando a seguir.

helm search repo my-nginx
DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Modificar e embalar o gráfico.

Emvalues.yaml, defina o valor replicaCount como 1. Em seguida, empacote o gráfico executando helm package ./my-nginx/, desta vez alterando a versão de Chart.yaml para 0.1.1

O controle de versão é idealmente atualizado por meio da automação usando ferramentas como GitVersion números de compilação do Jenkins em um pipeline de CI/CD. A automação do número da versão está fora do escopo desse padrão.

DevOps engenheiro

Envie a nova versão para o repositório do Helm no Amazon S3.

Para enviar o novo pacote com a versão 0.1.1 para o repositório my-helm-charts do Helm no Amazon S3, execute o comando a seguir.

helm s3 push ./my-nginx-0.1.1.tgz my-helm-charts
DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Pesquise todas as versões do gráfico my-nginx.

Para ver todas as versões disponíveis de um gráfico, execute o comando a seguir com o sinalizador --versions.

helm search repo my-nginx --versions

Sem o sinalizador, o Helm, por padrão, exibe a versão mais recente carregada de um gráfico.

DevOps engenheiro

Instale um gráfico do repositório do Helm no Amazon S3.

Os resultados da pesquisa da tarefa anterior mostram as várias versões do gráfico my-nginx. Para instalar a nova versão (0.1.1) do repositório do Helm no Amazon S3, use o comando a seguir.

helm upgrade my-nginx-release my-helm-charts/my-nginx --version 0.1.1 --namespace helm-space
DevOps engenheiro

Recursos relacionados

Anexos

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo: attachment.zip