1. Criando um modelo personalizado
O comando helm create <nome_do_modelo> é usado para criar um novo chart Helm. Helm é o gerenciador de pacotes do Kubernetes, utilizado para definir, instalar e atualizar aplicações no Kubernetes.
Ao executar o comando helm create mychart, o Helm cria uma estrutura de diretórios contendo um chart básico. Este chart é um modelo para definir aplicações no Kuberentes, incluindo arquivos como Chart.yaml (que descreve metadados do chart), values.yaml (para armazenar valores padrão e prompts de entrada) e templates/ (que define os templates dos recursos do Kubernetes).
Após a criação do chart, ele pode ser empacotado em um arquivo .tgz usando o comando helm package e instalado ou atualizado no cluster Kubernetes com helm install ou helm upgrade.
# Cria um novo chart
$ helm create mychart
# Verifica a criação do chart
$ ls
mychart
# Navega até o diretório do chart
$ cd mychart
$ ls
charts Chart.yaml templates values.yaml
2. Limpar a pasta templates e usar comandos k8s para exportar YAML
# Navega até a pasta templates
$ cd templates
$ ls
deployment.yaml _helpers.tpl hpa.yaml ingress.yaml NOTES.txt serviceaccount.yaml service.yaml tests
# Limpa a pasta templates
$ rm -rf *
$ ls
3. Criar YAML usando comandos k8s
# Cria um novo deployment e salva o YAML
$ kubectl create deploy web-test --image=nginx --dry-run -o yaml > web-deploy.yaml
Este comando cria um novo objeto Deployment no Kubernetes, chamado web-test, utilizando a imagem nginx como base. As opções utilizadas são:
kubectl: ferramenta de linha de comando para interagir com o Kubernetes.create: cria um novo recurso.deploy: especifica que o recurso criado será um Deployment.web-test: nome do Deployment.--image=nginx: imagem Docker a ser usada.--dry-run: simula a execução sem realmente criar o recurso.-o yaml: formata a saída como YAML.> web-deploy.yaml: redireciona a saída para um arquivo.
4. Criar um serviço (svc)
$ kubectl expose deployment web-test --port=80 --target-port=80 --type=NodePort --dry-run -o yaml > servics.yaml
Este comando expõe o Deployment web-test como um serviço, configurando a porta 80. As opções utilizadas são:
expose: expõe um Pod como um serviço.--port=80: porta do serviço.--target-port=80: porta do alvo (Pod).--type=NodePort: tipo de serviço.--dry-rune-o yaml: simulam a criação e formatam a saída como YAML.> servics.yaml: redireciona a saída para um arquivo.
5. Arquivos criados na pasta templates
$ ls
servics.yaml web-deploy.yaml
6. Instalando o template personalizado com Helm
# Instala o chart
$ helm install web1 mychart/
NAME: web1
LAST DEPLOYED: Sun Jan 14 01:10:06 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
# Verifica os pods e serviços criados
$ kubectl get svc -A
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 203d
default web-test NodePort 10.103.178.251 <none> 80:30187/TCP 39s
$ kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
default nginx-dep1-cf6cfcf66-2sh46 0/1 Completed 0 37d
default web-test-5f547489c6-rm5c8 0/1 ContainerCreating 0 63s
7. Desinstalando o aplicativo com Helm
# Desinstala o release
$ helm uninstall web1
release "web1" uninstalled
8. Atualizando o aplicativo com Helm
# Instala o chart novamente
$ helm install web1 mychart/
NAME: web1
LAST DEPLOYED: Sun Jan 14 01:14:16 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
# Atualiza o chart
$ helm upgrade web1 mychart/
Release "web1" has been upgraded. Happy Helming!
NAME: web1
LAST DEPLOYED: Sun Jan 14 01:14:23 2024
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None