Skip to main content

Deployando Com Helm Chart

Para procurar chart, utilize o repositório padrão https://artifacthub.io/. Por exemplo vamos instalar o ingress controller do nginx.

nginxfind

Sempre observe se o repositório é o oficial, a quantidade de estrelas, se é um repo que sofre atualizações, etc.

Entrando nesse chart https://artifacthub.io/packages/helm/nginx/nginx-ingress e lendo a documentação observamos que temos dois métodos de instalação. Podemos clonar o projeto que gerou o chart, para que possamos baseado neste chart gerar um subchart (um chart dependente de outro) ou podemos somente seguir o fluxo e adicionar o repositório. Vamos somente fazer o básico e adicionar o repositório com os comandos que ele mesmo mostrou.

# nginx-stable é o nome que vamos dar ao repo, mas poderia ser qualquer outro
helm repo add nginx-stable https://helm.nginx.com/stable
# É necessário atualizar para que helm tenha conhecimento dos charts disponíveis incluindo o novo repo
helm repo update

Antes de instalar podemos observar que nesse repo temos vários chart publicados.

❯ helm search repo nginx  
NAME CHART VERSION APP VERSION DESCRIPTION
nginx-stable/nginx-appprotect-dos-arbitrator 0.1.0 1.1.0 NGINX App Protect Dos arbitrator
nginx-stable/nginx-devportal 1.3.1 1.3.1 A Helm chart for Kubernetes
# Olha ele aqui
nginx-stable/nginx-ingress 0.15.2 2.4.2 NGINX Ingress Controller
nginx-stable/nginx-service-mesh 0.6.0 1.6.0 NGINX Service Mesh
nginx-stable/nms 1.0.0 1.0.0 A chart for installing the NGINX Management Suite
nginx-stable/nms-acm 1.3.1 1.3.1 A Helm chart for Kubernetes
nginx-stable/nms-hybrid 2.6.0 2.6.0 A Helm chart for Kubernetes

Se olharmos a documentação do chart veremos que a instalação referencia esse mesmo chart. O nome do repo é nginx-stable e o chart é o nginx-ingress dentro deste repo.

Se executarmos a instalação com o método abaixo, estaremos utilizando os valores já disponíveis no arquivo Values.yaml do próprio chart.

helm install my-release nginx-stable/nginx-ingress

Você pode analisar o Values.yaml na própria página do projeto. Todo projeto tem um Values.yaml que pode ser alterado para ajustes mais finos de acordo com os seus interesses.

details detailsvalues

Em alguns projetos está e outros não está habilitado, mas com o comando do helm show podemos ver esses valores default.

helm show values nginx-stable/nginx-ingress > ./resources/Values.yaml

De uma olhada nesse arquivo e veja o que poderíamos ajustar.

Para instalar o chart apontando um arquivo de Values.yaml personalizado podemos utilizar o -f.

helm install nginx-ingress nginx-stable/nginx-ingress -f ./resources/Values.yaml  
#NAME: nginx-ingress
#LAST DEPLOYED: Mon Dec 26 01:20:59 2022
#NAMESPACE: default
#STATUS: deployed
#REVISION: 1
#TEST SUITE: None
#NOTES:
#The NGINX Ingress Controller has been installed.

Também poderíamos mudar somente um parâmetro no arquivo dos valores default somente referenciando a chave e o valor usando o --set.

Por exemplo vamos alterar de deployment para daemonset. A parte abaixo é um corte do Values.yaml, mostrando o que poderíamos alterar.

  ## The kind of the Ingress Controller installation - deployment or daemonset.
kind: deployment

Já que não estamos instalando, podemos fazer somente um upgrade. Observe que a revisão vai subir, pois já é a segunda vez que estamos aplicando. Ele faz isso para poder fazer o rollback caso necessário.

helm upgrade nginx-ingress --set kind=daemonset nginx-stable/nginx-ingress
#Release "nginx-ingress" has been upgraded. Happy Helming!
#NAME: nginx-ingress
#LAST DEPLOYED: Mon Dec 26 01:25:48 2022
#NAMESPACE: default
#STATUS: deployed
#REVISION: 2
#TEST SUITE: None
#NOTES:
#The NGINX Ingress Controller has been installed.

Deletar também é muito simples.

helm uninstall #nginx-ingress  
#release "nginx-ingress" uninstalled

Como não definimos um namespace anteriormente na instalação acabou sendo instalado no namespace default. Vamos aplicar novamente passando o namespace desejado.

# --create-namespace irá criar caso não exista o --namespace passado
helm install nginx-ingress nginx-stable/nginx-ingress --values ./resources/Values.yaml --create-namespace --namespace nginx-ingress
#NAME: nginx-ingress
#LAST DEPLOYED: Mon Dec 26 01:54:55 2022
#NAMESPACE: nginx-ingress
#STATUS: deployed
#REVISION: 1
#TEST SUITE: None
#NOTES:
#The NGINX Ingress Controller has been installed.

É sempre bom ter o Values.yaml definido para o que foi aplicado e futuramente usar gitops para controle.

Para verificar o que temos criado com o helm.

helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
nginx-ingress nginx-ingress 1 2022-12-26 02:06:02.518055414 -0300 -03 deployed nginx-ingress-0.15.2 2.4.2