Introdução

O Helm é um gerenciador de pacotes para o Kubernetes que permite que os desenvolvedores e operadores configurem e implantem mais facilmente aplicativos nos clusters do Kubernetes.

Neste tutorial, vamos configurar o Helm e usá-lo para instalar, reconfigurar, reverter e então excluir uma instância do aplicativo de painel do Kubernetes. O painel é uma GUI oficial do Kubernetes baseada em Web.

Para uma visão conceitual do Helm e seu ecossistema de empacotamento, leia nosso artigo _Uma introdução ao Helm_.

Pré-requisitos

helm illustration for: Pré-requisitos

Para este tutorial, você precisará de:

  • Um cluster do Kubernetes 1.8+ com controle de acesso baseado na função (RBAC) habilitado
  • A ferramenta kubectl de linha de comando instalada em sua máquina local, configurada para se conectar ao seu cluster. Você pode ler mais sobre como instalar o kubectl na documentação oficial.

Você pode testar sua conectividade com o seguinte comando:

				
					
 kubectl cluster-info

				
			

Se não houver erros, você está conectado ao cluster. Se acessar vários clusters com o kubectl, certifique-se de verificar se você selecionou o contexto de cluster correto:

				
					
 kubectl config get-contexts

				
			
				
					
 [secondary_label Output]

 CURRENT NAME CLUSTER AUTHINFO NAMESPACE

 <^>*<^> do-nyc1-k8s-example do-nyc1-k8s-example do-nyc1-k8s-example-admin

 docker-for-desktop docker-for-desktop-cluster docker-for-desktop

				
			

Neste exemplo, o asterisco (<^>*<^>) indica que estamos conectados ao cluster do-nyc1-k8s-example. Para trocar os clusters execute:

				
					
 kubectl config use-context &lt;^&gt;context-name&lt;^&gt;

				
			

Quando estiver conectado ao cluster correto, continue para o Passo 1 para começar a instalar o Helm.

Passo 1 — Como instalar o Helm

Primeiro, vamos instalar o utilitário de linha de comando helm na nossa máquina local. O Helm fornece um script que lida com o processo de instalação no MacOS, Windows ou Linux.

Mude para um diretório gravável e baixe o script do repositório do GitHub do Helm:

				
					
cd /tmp

curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get &gt; install-helm.sh

				
			

Crie o executável do script com o chmod:

				
					
chmod u+x install-helm.sh

				
			

Neste ponto, você pode usar seu editor de texto favorito para abrir o script e inspecioná-lo para garantir que ele está seguro. Quando estiver satisfeito, execute-o:

				
					
./install-helm.sh

				
			

Você pode ser solicitado a colocar sua senha. Digite ela e pressione ENTER.

				
					
[secondary_label Output]

helm installed into /usr/local/bin/helm

Run 'helm init' to configure helm.

				
			

Em seguida, vamos concluir a instalação instalando alguns componentes do Helm no nosso cluster.

Passo 2 — Como instalar o Tiller

O Tiller é um companheiro do comando helm que é executado no seu cluster, recebendo comandos do helm e se comunicando diretamente com a API do Kubernetes para fazer o trabalho real de criar e excluir recursos. Para dar ao Tiller as permissões que ele precisa para ser executado no cluster, vamos fazer um recurso do Kubernetes, o serviceaccount.

Nota: vamos ligar esse serviceaccount à função do cluster cluster-admin. Isso dará ao superusuário do serviço tiller acesso ao cluster e permitirá que ele instale todos os tipos de recurso em todos os namespaces. Isso é bom para explorar o Helm, mas você pode querer uma configuração mais fechada para um cluster do Kubernetes de produção.

Por favor, consulte a documentação oficial do Helm RBAC para mais informações sobre a configuração de diferentes cenários RBAC para o Tiller.

Crie o tiller serviceaccount:

				
					
kubectl -n kube-system create serviceaccount tiller

				
			

Em seguida, vincule o tiller serviceaccount à função cluster-admin:

				
					
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller

				
			

Agora, podemos executar o helm init, que instala o Tiller no nosso cluster, junto com algumas tarefas de organização local, como baixar os detalhes do repositório stable:

				
					
helm init --service-account tiller

				
			
				
					
[secondary_label Output]

. . .



Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.



Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.

For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation

Happy Helming!

				
			

Para verificar se o Tiller está funcionando, liste os módulos no namespace kube-system:

				
					
kubectl get pods --namespace kube-system

				
			
				
					
[secondary_label Output]

NAME READY STATUS RESTARTS AGE

. . .

kube-dns-64f766c69c-rm9tz 3/3 Running 0 22m

kube-proxy-worker-5884 1/1 Running 1 21m

kube-proxy-worker-5885 1/1 Running 1 21m

kubernetes-dashboard-7dd4fc69c8-c4gwk 1/1 Running 0 22m

&lt;^&gt;tiller-deploy-5c688d5f9b-lccsk 1/1 Running 0 40s&lt;^&gt;

				
			

O nome do módulo do Tiller começa com o prefixo tiller-deploy-.

Agora que instalamos ambos os componentes do Helm, estamos prontos para usar o helm para instalar nosso primeiro aplicativo.

Passo 3 — Instalando um chart do Helm

Os pacotes de software do Helm são chamados de _charts_. O Helm vem pré-configurado com um repositório de charts coletados chama do stable. Você pode verificar os gráficos disponíveis nos seus repositórios do GitHub. Vamos instalar o Painel do Kubernetes como um exemplo.

Use o helm para instalar o pacote kubernetes-dashboard do repositório stable:

				
					
helm install stable/kubernetes-dashboard --name dashboard-demo

				
			
				
					
[secondary_label Output]

NAME: &lt;^&gt;dashboard-demo&lt;^&gt;

LAST DEPLOYED: Wed Aug 8 20:11:07 2018

NAMESPACE: default

STATUS: DEPLOYED



. . .

				
			

Observe a linha NAME, em destaque no exemplo de resultado acima. Neste caso, especificamos o nome dashboard-demo. Este é o nome do nosso _release_. Um _release_ do Helm é uma única implantação de um chart com uma configuração específica. Você pode implantar vários releases do mesmo chart, tendo cada um sua própria configuração.

Se não especificar seu próprio nome de release usando --name, o Helm criará um nome aleatório para você.

Podemos pedir ao Helm uma lista de releases neste cluster:

				
					
helm list

				
			
				
					
[secondary_label Output]

NAME 	REVISION	UPDATED 	STATUS 	CHART 	NAMESPACE

&lt;^&gt;dashboard-demo&lt;^&gt;	1 	Wed Aug 8 20:11:11 2018	DEPLOYED	kubernetes-dashboard-0.7.1	default

				
			

Agora, podemos usar o kubectl para verificar se um novo serviço foi implantado no cluster:

				
					
kubectl get services

				
			
				
					
[secondary_label Output]

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

&lt;^&gt;dashboard-demo-kubernetes-dashboard ClusterIP 10.32.104.73 &lt;none&gt; 443/TCP 51s&lt;^&gt;

kubernetes ClusterIP 10.32.0.1 &lt;none&gt; 443/TCP 34m

				
			

Note que por padrão, o nome de serviço correspondente ao nosso release é uma combinação do nome de release do Helm e o nome do chart.

Agora que implantamos o aplicativo, vamos usar o Helm para alterar sua configuração e atualizar a implantação.

Passo 4 — Atualizando um release

O comando helm upgrade pode ser usado para atualizar um release com um chart novo ou atualizado, ou atualizar as suas opções de configuração.

Vamos fazer uma alteração simples no nosso release dashboard-demo para demonstrar o processo de atualização e reversão: atualizaremos o nome do serviço do painel para apenas dashboard, em vez de dashboard-demo-kubernetes-dashboard.

O chart kubernetes-dashboard fornece uma opção de configuração fullnameOverride para controlar o nome do serviço. Vamos executar o helm upgrade com esta opção definida:

				
					
helm upgrade &lt;^&gt;dashboard-demo&lt;^&gt; stable/kubernetes-dashboard &lt;^&gt;--set fullnameOverride="dashboard"&lt;^&gt;

				
			

Você verá um resultado similar ao passo inicial helm install.

Verifique se seus serviços do Kubernetes refletem os valores atualizados:

				
					
kubectl get services

				
			
				
					
[secondary_label Output]

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

kubernetes ClusterIP 10.32.0.1 &lt;none&gt; 443/TCP 36m

&lt;^&gt;dashboard&lt;^&gt; ClusterIP 10.32.198.148 &lt;none&gt; 443/TCP 40s

				
			

Nosso nome de serviço foi atualizado para o novo valor.

Nota: neste ponto, você pode carregar o Painel do Kubernetes no seu navegador e verificá-lo. Para fazer isso, execute primeiro o seguinte comando:

				
					
kubectl proxy

				
			

Isso cria um proxy que permite que você acesse recursos de cluster remotos do seu computador local. Baseado nas instruções anteriores, seu serviço de dashboard é chamado kubernetes-dashboard e ele está funcionando no namespace default. Agora, você pode acessar o painel no seguinte URL:

				
					
http://localhost:8001/api/v1/namespaces/&lt;^&gt;default&lt;^&gt;/services/https:&lt;^&gt;dashboard&lt;^&gt;:/proxy/

				
			

Se necessário, substitua seu próprio nome de serviço e namespace pelas porções destacadas. As instruções para de fato usar o painel estão fora do escopo deste tutorial, mas você pode ler os docs oficiais do Painel do Kubernetes para mais informações.

Em seguida, vamos ver a capacidade do Helm para reverter releases.

Passo 5 — Revertendo um release

Quando atualizamos nosso release <^>dashboard-demo<^> no passo anterior, criamos uma segunda _revisio_n do release. O Helm retém todos os detalhes dos release anteriores caso precise reverter para uma configuração ou chart prévia.

Use o helm list para verificar o release novamente:

				
					
helm list

				
			
				
					
[secondary_label Output]

NAME 	REVISION	UPDATED 	STATUS 	CHART 	NAMESPACE

dashboard-demo	&lt;^&gt;2&lt;^&gt; 	Wed Aug 8 20:13:15 2018	DEPLOYED	kubernetes-dashboard-0.7.1	default

				
			

A coluna REVISION nos diz que essa é agora a segunda revisão.

Use o helm rollback para reverter para a primeira revisão:

				
					
helm rollback &lt;^&gt;dashboard-demo&lt;^&gt; 1

				
			

Você deve ver o seguinte resultado, indicando que a reversão foi bem sucedida:

				
					
[secondary_label Output]

Rollback was a success! Happy Helming!

				
			

Neste ponto, caso execute o kubectl get services novamente, verá que o nome de serviço mudou para seu valor anterior. O Helm reimplantou o aplicativo com a configuração da revisão 1.

Em seguida, vamos ver como excluir releases com o Helm.

Passo 6 — Excluindo um release

Os releases do Helm podem ser excluídos com o comando helm delete:

				
					
helm delete &lt;^&gt;dashboard-demo&lt;^&gt;

				
			
				
					
[secondary_label Output]

release "dashboard-demo" deleted

				
			

Embora o release tenha sido excluído e o aplicativo do painel não esteja mais em funcionamento, o Helm salva todas as informações de revisão caso queira reimplantar o release. Se você tentasse usar o helm install em um novo release dashboard-demo agora, receberia um erro:

				
					
Error: a release named dashboard-demo already exists.

				
			

Se você usar a flag --deleted para listar seus releases excluídos, verá que o release ainda está presente:

				
					
helm list --deleted

				
			
				
					
[secondary_label Output]

NAME 	REVISION	UPDATED 	STATUS 	CHART 	NAMESPACE

dashboard-demo	3 	Wed Aug 8 20:15:21 2018	DELETED	kubernetes-dashboard-0.7.1	default

				
			

Para _realmente_ excluir o release e purgar todas as revisões antigas, utilize a flag --purge com o comando helm delete:

				
					
helm delete dashboard-demo --purge

				
			

Agora, o release foi realmente excluído e você pode reutilizar seu nome.

Conclusão

Neste tutorial, instalamos a ferramenta de linha de comando helm e seu serviço companheiro tiller. Também exploramos instalar, atualizar, reverter e excluir charts e releases do Helm.

Para maiores informações sobre o Helm e charts do Helm, consulte a documentação oficial do Helm.