Tutorial

Como instalar software em clusters do Kubernetes com o gerenciador de pacotes Helm

Published on January 9, 2020
Português
Como instalar software em clusters do Kubernetes com o gerenciador de pacotes Helm

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

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:

    1. 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:

    1. kubectl config get-contexts
    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:

    1. kubectl config use-context context-name

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:

  1. cd /tmp
  2. curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > install-helm.sh

Crie o executável do script com o chmod:

  1. 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:

  1. ./install-helm.sh

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

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:

  1. kubectl -n kube-system create serviceaccount tiller

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

  1. 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:

  1. helm init --service-account tiller
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:

  1. kubectl get pods --namespace kube-system
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 tiller-deploy-5c688d5f9b-lccsk 1/1 Running 0 40s

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:

  1. helm install stable/kubernetes-dashboard --name dashboard-demo
Output
NAME: dashboard-demo 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:

  1. helm list
Output
NAME REVISION UPDATED STATUS CHART NAMESPACE dashboard-demo 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:

  1. kubectl get services
Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE dashboard-demo-kubernetes-dashboard ClusterIP 10.32.104.73 <none> 443/TCP 51s kubernetes ClusterIP 10.32.0.1 <none> 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:

  1. helm upgrade dashboard-demo stable/kubernetes-dashboard --set fullnameOverride="dashboard"

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

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

  1. kubectl get services
Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.32.0.1 <none> 443/TCP 36m dashboard ClusterIP 10.32.198.148 <none> 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:

  1. 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/default/services/https:dashboard:/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:

  1. helm list
Output
NAME REVISION UPDATED STATUS CHART NAMESPACE dashboard-demo 2 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:

  1. helm rollback dashboard-demo 1

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

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:

  1. helm delete dashboard-demo
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:

  1. helm list --deleted
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:

  1. 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.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about us


About the authors

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Featured on Community

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel