Como criar um helm package Hello World

Não é difícil notar que ao avançar com o uso do Kubernetes a gestão sobre as alterações vai ficando progressivamente mais complexa. Os pacotes helm são meios muito uteis para organizar e facilitar o deploy, atualização ou mesmo reversão de uma mudança no Kubernetes. Não se engane: implantar no kubernetes sempre é muito mais complexo do que apenas um service e um deployment. Consequentemente esse artigo oferece meios objetivos sobre como criar um helm package Hello World em seu Kubernetes. Para tal é fundamental que se tenha instalado o Helm: vejo o artigo como instalar o helm no kubernetes antes.

Listando os releases instalados

O seu ambiente kubernetes pode ter aplicações já instaladas através do Helm. A linha de comando do produto te oferece meios para fazer toda a gestão. Seja listando, criando novos packages, examinando se há problemas, instalando, desinstalando e etc. O comando a seguir é o mais básico para ver os releases instalados.

helm list

Criando um helm package

Bem como o uso natural do kubernetes com o kubectl, a criação de um pacote do helm precisa ser feita através da linha de comando. Posteriormente o comando uma arvore de diretórios é criada junto a uma aplicação no estilo ‘Hello World’, com um site simples num nginx. Ao fazer isso o seu ambiente kubernetes não sofrerá nenhuma alteração: pode ficar bastante tranquilo.

helm create nome-da-minha-aplicacao

Árvore de diretórios

A seguir você pode ver um tree da pasta criada. Ela possui alguns arquivos essenciais, obrigatórios para a construção do package; possui algumas pastas, como a Charts e Templates, que organizam o pacote.

nome-da-minha-aplicacao/
├── Chart.yaml
├── charts
├── templates
│   ├── NOTES.txt
│   ├── _helpers.tpl
│   ├── deployment.yaml
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── service.yaml
│   ├── serviceaccount.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml

Arquivos essenciais

Primeiramente o arquivo essencial é o Chart.yaml. Ele possui metadados de controle sobre o helm package em si, com informações como: nome, descrição, versão. A alteração desse arquivo é altamente recomendada para que o pacote reflita o seu escopo.

Assim também, o segundo arquivo essencial é o values.yaml, possuindo um conjunto de parâmetros para a construção da aplicação. Note que que a pasta templates possui dados a serem substituidos. Esse arquivo values.yaml possui os paramatros para substituição. É importante que, antes de utilizar pacotes helm em seu ambiente produtivo, se avalie e entenda as alterações configuradas nesse arquivo.

Finalmente há um terceiro arquivo, que não apareceu no tree: o .helmignore. Esse é um arquivo de ignore, bem como o .gitignore, .dockerignore, etc. Ele indica quais arquivos não poderão fazer parte do release, ainda que estejam na pasta o package.

Pasta Charts

A pasta charts é importante por definir quais são os outros helm packages que esse package depende. Para a construção de uma solução no estilo ‘Hello world’ ela não será utilizada.

Pasta Templates

Já essa é a pasta que guarda os yaml files específicos do package. Assim, nesse caso há um deployment, um hpa, um ingress, um service e um serviceaccount. Há também um notes.txt, helpers e testes.

Além disso os arquivos que falam sobre os objetos do kubernetes possuem uma série de comandos específicos que serão substituídos pelo que está configurado no values.yaml.

Note, por exemplo, que ao abrir o serviceaccount.yaml há comandos como if, include, with e end.

Exemplo de arquivo Yaml para ServiceAccount com comandos característicos do Helm
Exemplo de arquivo Yaml para ServiceAccount com comandos característicos do Helm

Criando um helm relase no estilo Hello World

Após entender um pouco da estrutura de um helm package para saber como criar um helm package Hello World, agora vamos efetivamente instalá-lo no kubernetes. A instalação é muito simples através do comando helm install.

kubectl create ns meu-namespace
helm install ./nome-da-minha-aplicacao --generate-name -n meu-namespace

Note que após rodar essa linha de comando o arquivo notes.txt aparece para orientar sobre o uso prático do release após instalado. Esse é um ponto interessante uma vez que ele também substitui os termos desse arquivo.

# Descubra o nome exato do pod através desse comando
kubectl get pods -n meu-namespace 

# Coloque o nome correto do pod no comando abaixo
kubectl port-forward nome-da-minha-aplicacao-1663516616-56cb9b5c99-75grj 8080:80 -n meu-namespace
Site nginx estilo 'Hello world' a partir de um helm package / helm release
Site nginx estilo ‘Hello world’ a partir de um helm package / helm release

Caso queira mais informações específicas sobre esse tema consulte esse link do site oficial em https://helm.sh/docs/helm/helm_create/


Thiago Anselme
Thiago Anselme - Gerente de TI - Arquiteto de Soluções

Ele atua/atuou como Dev Full Stack C# .NET / Angular / Kubernetes e afins. Ele possui certificações Microsoft MCTS (6x), MCPD em Web, ITIL v3 e CKAD (Kubernetes) . Thiago é apaixonado por tecnologia, entusiasta de TI desde a infância bem como amante de aprendizado contínuo.

Deixe um comentário