Introdução
O Helm é um gerenciador de pacotes para Kubernetes que permite aos desenvolvedores e operadores configurar e implantar aplicativos em clusters Kubernetes com mais facilidade.
Os pacotes do Helm são chamados de charts, e eles contêm modelos de definições de recursos que implantam e configuram aplicativos específicos com o mínimo de esforço necessário do usuário. Com a utilização de modelos, é possível gerenciar o chart, suas configurações e comportamento passando definições de variáveis sem modificar o próprio chart. O Helm gerencia automaticamente as definições de recursos personalizadas, bem como modificações em definições já implantadas. Um chart implantado, com personalizações possíveis, é chamado de release.
Neste tutorial, você configurará o Helm 3 e aprenderá como instalar, atualizar, reverter e gerenciar charts e releases. Você também aprenderá a criar e empacotar seus próprios charts, além de configurar repositórios de charts, que hospedam charts que você pode instalar imediatamente.
Pré-requisitos
-
Um cluster Kubernetes com controle de acesso baseado em funções (RBAC) habilitado. Para mais informações sobre releases, você pode verificar a página de releases do Helm.
-
O comando de linha de comando
kubectl
instalado em sua máquina local, configurado para se conectar ao seu cluster. Você pode ler mais sobre a instalação dokubectl
na documentação oficial.Você pode testar sua conectividade com o seguinte comando:
Se você não receber erros, estará conectado ao cluster. Se acessar vários clusters com o
kubectl
, verifique se selecionou o contexto do cluster correto executando:A saída listará as configurações disponíveis:
SaídaATUAL NOME CLUSTER AUTHINFO NAMESPACE * do-fra1-helm3-example do-fra1-helm3-example do-fra1-helm3-example-adminAqui, o asterisco (
*
) indica que estamos conectados ao clusterdo-fra1-helm3-example
. Para trocar de clusters, execute:
Quando estiver conectado ao cluster correto, continue para a Etapa 1 para começar a instalar o Helm.
Etapa 1 — Instalando o Helm 3
Nesta seção, você instalará o Helm 3 usando o script shell fornecido oficialmente.
Comece navegando até /tmp
, onde você armazenará o script de instalação executando:
Baixe o script com o seguinte comando:
Você pode examinar get_helm.sh
em seu editor de texto para garantir que seja seguro.
Torne-o executável definindo suas permissões para o seguinte:
Finalmente, execute-o para instalar o Helm 3:
Você receberá uma saída semelhante à seguinte:
OutputDownloading https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm
Você tem o Helm 3 instalado em sua máquina. Agora você aprenderá sobre repositórios de gráficos e como usá-los.
Passo 2 — Configurando Repositórios de Gráficos
Os gráficos do Helm são armazenados em repositórios de gráficos que qualquer pessoa pode hospedar. Por padrão, o Helm 3 não vem pré-configurado com nenhum repositório. Versões anteriores do Helm incluíam um repositório de gráficos centralizado e curado; no entanto, o design do Helm 3 evoluiu deliberadamente para desenvolvedores de gráficos gerenciarem seu próprio repositório, permitindo mais liberdade e lançamentos mais rápidos. Isso significa que para cada gráfico que você deseja usar, você precisa garantir que adiciona o repositório de hospedagem à sua instalação do Helm.
Para ajudá-lo a encontrar o repositório certo, você pode usar o ArtifactHub.io, um site de código aberto gerenciado pelo CNCF que cataloga gráficos do Helm e seus repositórios. Ele também rastreia gráficos populares e úteis que outros projetos CNCF usam, então difere do repositório stable
com o qual versões anteriores do Helm trabalhavam. Para projetos comuns, como ingressos Nginx ou ferramentas de monitoramento, é uma ótima fonte.
Você pode pesquisar por um gráfico que deseja instalar através da página inicial. Pesquisar por nginx
mostrará todos os gráficos indexados que estão relacionados a ele.
Você vai instalar a edição comunitária gerenciada pela equipe do Kubernetes. Procure por ingress-nginx
para encontrá-la nos seus resultados. Selecione-a para acessar sua página.
Cada gráfico deve ter uma descrição detalhando o que faz, juntamente com comandos para adicionar seu repositório à sua instalação e instalar o gráfico. Se não tiver, você ainda pode obter os comandos necessários pressionando o botão INSTALAR à direita da página.
Você pode clicar no botão azul ao lado de um comando para copiá-lo. Faça isso para o primeiro comando e execute-o:
Para adicionar um repositório ao Helm, você executa helm repo add
. Os parâmetros que ele aceita são o nome do repositório e sua localização.
A saída será:
Output"ingress-nginx" has been added to your repositories
Ao adicionar um novo repositório, você precisa informar ao Helm o que ele contém executando:
Você receberá a seguinte saída, mostrando que a atualização foi bem-sucedida:
OutputHang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "ingress-nginx" chart repository
Update Complete. ⎈Happy Helming!⎈
Neste passo, você aprendeu sobre o ArtifactHub e o que ele oferece. Você também adicionou um novo repositório à sua instalação do Helm. No próximo passo, você instalará um gráfico do Helm.
Passo 3 — Instalando um Gráfico do Helm
No seção anterior, você adicionou o repositório para o gráfico ingress-nginx
. Agora você o instalará em seu cluster.
Cada gráfico possui variáveis de configuração que você pode definir para modificar seu comportamento. Essas variáveis são armazenadas em um arquivo chamado values.yaml
que faz parte do gráfico. A menos que você tenha baixado o gráfico para sua máquina, será necessário executar o seguinte comando para visualizá-lo:
Para mostrar as variáveis disponíveis para ingress-nginx
, substitua chart_name
:
A saída será longa mostrando o conteúdo de values.yaml
para ingress-nginx
.
Para instalar um gráfico, você pode usar helm install
:
A release is a deployed instance of the chart, and here you’re calling it ingress-nginx
.
Este comando instalaria o gráfico em seu cluster com os valores padrão das variáveis. Se desejar modificar alguns deles, você pode passar os novos valores das variáveis usando --set
:
Você pode repetir --set
para quantas variáveis precisar. Como não estaremos personalizando agora, instale como está executando:
A saída será semelhante ao seguinte:
OutputNAME: ingress-nginx
LAST DEPLOYED: Wed Feb 24 10:12:37 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The ingress-nginx controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace default get services -o wide -w ingress-nginx-controller'
...
Observe que o NOME
corresponde ao nome da versão que você especificou. O Helm também lista informações comuns, como o status da versão e o namespace no qual está implantado. A seção NOTAS
varia entre os gráficos e geralmente contém orientações de inicialização rápida ou alerta sobre algumas armadilhas comuns ao usar os recursos do gráfico. Aqui, ele observa que o Balanceador de Carga está sendo criado e que pode levar algum tempo para ser concluído.
Para verificar os gráficos implantados, use helm list
:
Você verá que ingress-nginx
é o único gráfico implantado no momento:
OutputNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx default 1 2021-02-24 10:12:37.281049711 +0000 UTC deployed ingress-nginx-3.23.0 0.44.0
Você pode encontrar os serviços que estão em seu cluster executando:
A saída será semelhante a esta:
OutputNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.245.211.81 46.101.68.67 80:30704/TCP,443:30700/TCP 7m19s
ingress-nginx-controller-admission ClusterIP 10.245.50.17 <none> 443/TCP 7m19s
kubernetes ClusterIP 10.245.0.1 <none> 443/TCP 83m
Agora que você implantou uma versão em seu cluster, você modificará sua configuração enquanto ela está implantada.
Passo 4 — Atualizando uma Versão
Uma vez que uma versão está implantada, você não precisa desmontá-la e implantá-la novamente completamente quando precisar alterar sua configuração. Você pode usar o comando helm upgrade
para atualizar a versão com uma nova versão do gráfico ou para definir novas configurações.
O gráfico ingress-nginx
expõe a variável controller.replicaCount
que controla o número de pods do controlador implantados. Por padrão, está definido como um, o que você pode verificar listando os pods disponíveis:
Você verá que há apenas um:
OutputNAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 12m
Se você deseja implantar mais para redundância (por exemplo, três), você pode atualizar
a versão e definir a variável como 3
executando:
Você também passa --reuse-values
, que instrui o Helm a basear suas alterações na versão implantada, preservando a configuração anterior.
Na saída, o Helm aumentará a revisão para sinalizar que a versão foi atualizada:
OutputNAME: ingress-nginx
LAST DEPLOYED: Wed Feb 24 12:07:54 2021
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
NOTES:
...
Você pode listar os pods disponíveis executando:
Você encontrará três pods listados, em vez de um:
OutputNAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-4hk9g 1/1 Running 0 18s
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 22m
ingress-nginx-controller-7fc74cf778-wz595 1/1 Running 0 18s
Em seguida, você irá reverter as alterações e excluir as versões por completo.
Passo 5 — Revertendo e Excluindo uma Versão
Ao atualizar
uma versão, seu número de revisão é incrementado. Internamente, o Helm armazena todas as revisões de uma versão, permitindo que você retorne a uma revisão anterior, se necessário.
Para reverter o número de pods para apenas um, você poderia executar helm upgrade
novamente e definir manualmente o número, pois é uma alteração pequena. No entanto, ao trabalhar com gráficos maiores com muitas variáveis, reverter manualmente não é viável e deve ser automatizado.
Para reverter uma versão, use helm rollback
:
Você pode usá-lo para reverter as alterações feitas em ingress-nginx
ao voltar para a revisão 1
:
Você receberá a seguinte saída, indicando que a ação foi bem-sucedida:
OutputRollback was a success! Happy Helming!
Você pode verificar a revisão atual listando as versões:
Você verá que a revisão agora é 3
, e não 1
:
OutputNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx default 3 2021-02-24 12:43:21.523664768 +0000 UTC deployed ingress-nginx-3.23.0 0.44.0
O Helm considera cada alteração, incluindo as reversões, como uma nova revisão de uma versão. Você pode verificar se a revisão 3
é igual à primeira verificando o número de pods implantados executando:
Você verá que há apenas um:
OutputNAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 41m
Para excluir uma versão e todas as suas revisões, você pode usar helm delete
:
Já que você não vai precisar mais dele, exclua o ingress-nginx
executando o seguinte comando:
A saída será:
Outputrelease "ingress-nginx" uninstalled
Você pode listar as versões para verificar que não há nenhuma:
A tabela de saída não terá linhas:
OutputNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
Agora que a versão foi excluída, você pode reutilizar seu nome para implantações futuras.
Passo 6 — (Opcional) Criando Gráficos Personalizados
Neste passo opcional, você aprenderá como criar um gráfico personalizado, onde colocar suas definições de recursos e como empacotá-lo para distribuição posterior.
Você criará um novo gráfico chamado example-chart
. Execute o seguinte comando para criá-lo:
Isso criará um novo diretório chamado example-chart
com os seguintes arquivos e estrutura:
charts/
templates/
├─ tests/
│ ├─ test-connection.yaml
├─ deployment.yaml
├─ hpa.yaml
├─ ingress.yaml
├─ NOTES.txt
├─ service.yaml
├─ serviceaccount.yaml
├─ _helpers.tpl
Chart.yaml
values.yaml
As definições de recursos que seu gráfico instalará nos clusters de destino estão localizadas no diretório templates
. As predefinições que o Helm criou como ponto de partida implementam um controlador de ingresso Nginx. Embora a extensão do arquivo seja YAML, eles usam a sintaxe de modelagem do Go para permanecerem personalizáveis através de variáveis expostas que você pode passar. Você pode verificar mostrando o conteúdo de service.yaml
executando:
Você verá que ele contém diretivas de modelagem para gerar valores cercados por chaves duplas:
As variáveis referenciadas são expostas ao usuário e definidas em values.yaml
. O texto NOTES
que o Helm mostra após a implantação é armazenado em NOTES.txt
e também é modelado. Metadados do gráfico, como nome, versão e versão do software sendo implantado, são especificados em Chart.yaml
:
Para verificar o que o Helm implantaria, você pode passar --dry-run
e --debug
para helm install
apontando para o diretório do gráfico:
A saída será longa e conterá todas as definições de recursos finais que seriam aplicadas ao seu cluster. Enquanto você trabalha no seu gráfico, você pode usar helm upgrade
para enviar novas versões para o Kubernetes.
Quando chegar a hora de compartilhar seu gráfico concluído, você pode empacotá-lo para distribuição executando:
A saída será:
OutputSuccessfully packaged chart and saved it to: .../example-chart-0.1.0.tgz
O gráfico empacotado pode ser instalado da mesma forma que os gráficos dos repositórios adicionados:
Neste passo, você criou um gráfico personalizado e o implantou. Você também o empacotou e aprendeu sobre sua estrutura.
Conclusão
Agora você sabe como usar o Helm para instalar e atualizar software implantado em seu cluster Kubernetes. Você adicionou repositórios de gráficos e aprendeu por que eles são importantes e como o ArtifactHub pode ajudá-lo a encontrá-los. Você também criou um novo gráfico personalizado e aprendeu sobre revisões de lançamento e como reverter se necessário.
Para obter mais informações sobre como criar gráficos personalizados, visite o guia oficial.