From b2857c3d81cd8ecec708e7d182344088c25c6123 Mon Sep 17 00:00:00 2001 From: Jeferson Fernando Date: Tue, 13 Feb 2024 12:10:12 +0100 Subject: [PATCH] adicionando mais coisas sobre o helm --- pt/day-16/README.md | 790 +++++++++++++++++- pt/day-16/files/README.md | 1 + .../files/charts/giropops-senhas/.helmignore | 0 .../files/charts/giropops-senhas/Chart.yaml | 7 + .../giropops-senhas/templates/_helpers.tpl | 45 + .../templates/configmap-db.yaml | 4 + .../templates/configmap-observability.yaml | 4 + .../templates/deployments.yaml | 33 + .../giropops-senhas/templates/services.yaml | 23 + .../files/charts/giropops-senhas/values.yaml | 69 ++ pt/day-16/images/github-pages.png | Bin 0 -> 76710 bytes 11 files changed, 975 insertions(+), 1 deletion(-) create mode 100644 pt/day-16/files/README.md create mode 100644 pt/day-16/files/charts/giropops-senhas/.helmignore create mode 100644 pt/day-16/files/charts/giropops-senhas/Chart.yaml create mode 100644 pt/day-16/files/charts/giropops-senhas/templates/_helpers.tpl create mode 100644 pt/day-16/files/charts/giropops-senhas/templates/configmap-db.yaml create mode 100644 pt/day-16/files/charts/giropops-senhas/templates/configmap-observability.yaml create mode 100644 pt/day-16/files/charts/giropops-senhas/templates/deployments.yaml create mode 100644 pt/day-16/files/charts/giropops-senhas/templates/services.yaml create mode 100644 pt/day-16/files/charts/giropops-senhas/values.yaml create mode 100644 pt/day-16/images/github-pages.png diff --git a/pt/day-16/README.md b/pt/day-16/README.md index 30680b18..d0de3b2c 100644 --- a/pt/day-16/README.md +++ b/pt/day-16/README.md @@ -13,6 +13,32 @@ - [Instalando o nosso Chart](#instalando-o-nosso-chart) - [Atualizando o nosso Chart](#atualizando-o-nosso-chart) - [Utilizando `range` e o `if` no Helm](#utilizando-range--e-o-if-no-helm) + - [Utilizando `default`, `toYaml` e `toJson` no Helm](#utilizando-default-toyaml-e-tojson-no-helm) + - [O Que São Helpers no Helm?](#o-que-são-helpers-no-helm) + - [Por Que Usar Helpers?](#por-que-usar-helpers) + - [Criando o Nosso Primeiro Helper](#criando-o-nosso-primeiro-helper) + - [Helpers Avançados: Exemplos Práticos](#helpers-avançados-exemplos-práticos) + - [Exemplo 1: Controlando a Complexidade](#exemplo-1-controlando-a-complexidade) + - [Exemplo 2: Personalização Baseada em Ambiente](#exemplo-2-personalização-baseada-em-ambiente) + - [Melhores Práticas ao Usar Helpers](#melhores-práticas-ao-usar-helpers) + - [Criando o `_helpers.tpl` da nossa App](#criando-o-_helperstpl-da-nossa-app) + - [Passo 1: Criando o arquivo `_helpers.tpl`](#passo-1-criando-o-arquivo-_helperstpl) + - [Labels](#labels) + - [Resources](#resources) + - [Ports](#ports) + - [Passo 2: Refatorando `Deployments.yaml` e `Services.yaml`](#passo-2-refatorando-deploymentsyaml-e-servicesyaml) + - [O nosso `Deployments.yaml`](#o-nosso-deploymentsyaml) + - [O nosso `Services.yaml`](#o-nosso-servicesyaml) + - [Passo 3: Refatorando os ConfigMaps](#passo-3-refatorando-os-configmaps) + - [Atualizando o `_helpers.tpl`](#atualizando-o-_helperstpl) + - [Refatorando `config-map-dp.yaml`](#refatorando-config-map-dpyaml) + - [Refatorando `config-map-obs.yaml`](#refatorando-config-map-obsyaml) + - [Criando um repositório de Helm Charts](#criando-um-repositório-de-helm-charts) + - [Criando o repositório no Github](#criando-o-repositório-no-github) + - [Inicializando o repositório](#inicializando-o-repositório) + - [Configurando o GitHub Pages](#configurando-o-github-pages) + - [Utilizando o nosso repositório de Helm Charts](#utilizando-o-nosso-repositório-de-helm-charts) + - [O que vimos no dia de hoje](#o-que-vimos-no-dia-de-hoje) ## O que iremos ver hoje? @@ -1127,4 +1153,766 @@ service/redis-service ClusterIP 10.96.77.187 6379/ Pronto! Tudo criado com sucesso! -Agora você já sabe como utilizar o `range` e o `if` no Helm, e já sabe como criar um Chart do zero, e já sabe como instalar, atualizar e remover a sua aplicação utilizando o Helm. \ No newline at end of file +Agora você já sabe como utilizar o `range`, `index` e o `if` no Helm, e já sabe como criar um Chart do zero, e já sabe como instalar, atualizar e remover a sua aplicação utilizando o Helm. + + +#### Utilizando `default`, `toYaml` e `toJson` no Helm + +Vamos comecer mais algumas funções do Helm, que são o `default`, `toYaml` e `toJson`, que nos ajudarão a deixar o nosso Chart ainda mais dinâmico e customizável. + +Suponhamos que queremos garantir que sempre haja um valor padrão para o número de réplicas nos nossos deployments, mesmo que esse valor não tenha sido especificamente definido no `values.yaml`. Podemos modificar o nosso `giropops-senhas-deployment.yaml` para incluir a função `default`: + +```yaml +replicas: {{ .Values.giropopsSenhas.replicas | default 3 }} +``` + +Agora vamos adicionar a configuração necessária para a observabilidade da nossa aplicação "Giropops-Senhas", que inclui diversos parâmetros de configuração, e precisamos passá-la como uma string JSON para um ConfigMap. E o `toJson` irá nos salvar: + +No `values.yaml`, adicionamos uma configuração complexa: + +```yaml +observability: + giropops-senhas: + logging: true + metrics: + enabled: true + path: "/metrics" +``` + +Agora vamos criar um ConfigMap que inclui essa configuração como uma string JSON: + +```yaml +{{- range $component, $config := .Values.observability }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ $component }}-observability-config +data: + app-config.json: | + {{ toJson $config }} +{{- end }} +``` + +Dessa forma, transformamos a configuração definida no `values.yaml` em uma string JSON formatada, que é injetada diretamente no ConfigMap. A função `nindent 4` garante que iremos usar com 4 espaços de indentação a cada linha do conteúdo injetado. + +```json +{ + "logging": true, + "metrics": { + "enabled": true, + "path": "/metrics" + } +} +``` + +Fácil! + +E por fim, vamos adicionar o endereço de um banco de dados como uma configuração YAML, e precisamos passá-la como uma string YAML para um ConfigMap. E o `toYaml` é a função que irá garantir que a configuração seja injetada corretamente: + +A configuração no `values.yaml`: + +```yaml +databases: + giropops-senhas: + type: "MySQL" + host: "mysql.svc.cluster.local" + port: 3306 + name: "MyDB" +``` + +Com isso, já podemos criar um ConfigMap que inclui essa configuração como uma string YAML: + +```yaml +{{- range $component, $config := .Values.databases }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ $component }}-db-config +data: + app-config.yaml: | + {{- toYaml $config | nindent 4 }} +{{- end }} +``` + +Dessa forma, transformamos a configuração definida no `values.yaml` em uma string YAML formatada, que é injetada diretamente no ConfigMap. A função `nindent 2` garante que o conteúdo injetado esteja corretamente indentado, pois ela adiciona 2 espaços de indentação a cada linha do conteúdo injetado. + +Para que possamos aplicar essas modificações, precisamos realizar o `upgrade` da nossa aplicação, para isso, execute o comando abaixo: + +```bash +helm upgrade giropops-senhas ./ +``` + +Agora já temos além dos deployments e services, também os ConfigMaps para a nossa aplicação. + +Para ver os ConfigMaps, execute o comando abaixo: + +```bash +kubectl get configmaps +``` + +Para ver os detalhes de cada ConfigMap, execute o comando abaixo: + +```bash +kubectl get configmap -o yaml +``` + +Chega a ser lacrimejante de tão lindo! :D + + +#### O Que São Helpers no Helm? + +Helpers no Helm são funções definidas em arquivos `_helpers.tpl` dentro do diretório `templates` de um gráfico Helm. Eles permitem a reutilização de código e lógicas complexas em seus templates, promovendo práticas de codificação DRY (Don't Repeat Yourself). Isso significa que, em vez de repetir o mesmo código em vários lugares, você pode definir uma função helper e chamá-la sempre que precisar. + +##### Por Que Usar Helpers? + +- **Reutilização de Código:** Evita duplicação e facilita a manutenção. +- **Abstração de Complexidade:** Encapsula lógicas complexas, tornando os templates mais limpos e fáceis de entender. +- **Personalização e Flexibilidade:** Permite a criação de templates mais dinâmicos e adaptáveis às necessidades específicas do usuário. + +##### Criando o Nosso Primeiro Helper + +Para ilustrar a criação e o uso de helpers, vamos começar com um exemplo prático. Imagine que você precisa incluir o nome padrão do seu aplicativo em vários recursos Kubernetes no seu chart Helm. Em vez de escrever manualmente o nome em cada recurso, você pode definir um helper para isso. + +1. **Definindo um Helper:** + No diretório `templates`, crie um arquivo chamado `_helpers.tpl` e adicione o seguinte conteúdo: + + ```yaml + {{/* + Define um helper para o nome do aplicativo. + */}} + {{- define "meuapp.name" -}} + {{- default .Chart.Name .Values.appName | trunc 63 | trimSuffix "-" -}} + {{- end -}} + ``` + + Esta função define um nome padrão para o seu aplicativo, usando o nome do gráfico (`Chart.Name`) ou um nome personalizado definido em `Values.appName`, limitando-o a 63 caracteres e removendo quaisquer hífens no final. + +2. **Usando o Helper:** + Agora, você pode usar este helper em seus templates para garantir que o nome do aplicativo seja consistente em todos os recursos. Por exemplo, em um template de Deployment, você pode usar: + + ```yaml + apiVersion: apps/v1 + kind: Deployment + metadata: + name: {{ include "meuapp.name" . }} + labels: + app: {{ include "meuapp.name" . }} + ``` + +##### Helpers Avançados: Exemplos Práticos + +À medida que você se familiariza com os helpers, pode começar a explorar usos mais avançados. Aqui estão alguns exemplos que demonstram a flexibilidade e o poder dos helpers no Helm. + +###### Exemplo 1: Controlando a Complexidade + +Imagine que você tenha múltiplos serviços que precisam ser configurados de maneira ligeiramente diferente com base em certos valores de entrada. Você pode criar um helper complexo que gera a configuração apropriada para cada serviço. + +```yaml +{{/* +Gerar configuração específica do serviço. +*/}} +{{- define "meuapp.serviceConfig" -}} +{{- if eq .Values.serviceType "frontend" -}} +# Configuração específica do frontend +{{- else if eq .Values.serviceType "backend" -}} +# Configuração específica do backend +{{- end -}} +{{- end -}} +``` + +###### Exemplo 2: Personalização Baseada em Ambiente + +Em ambientes de desenvolvimento, você pode querer configurar seus serviços de maneira diferente do que em produção. Um helper pode ajudar a injetar essas configurações com base no ambiente. + +```yaml +{{/* +Ajustar configurações com base no ambiente. +*/}} +{{- define "meuapp.envConfig" -}} +{{- if eq .Values.environment "prod" -}} +# Configurações de produção +{{- else -}} +# Configurações de desenvolvimento +{{- end + + -}} +{{- end -}} +``` + +##### Melhores Práticas ao Usar Helpers + +- **Mantenha os Helpers Simples:** Funções muito complexas podem ser difíceis de manter e entender. +- **Nomeie os Helpers de Forma Clara:** Os nomes devem refletir o propósito da função para facilitar a compreensão e o uso. +- **Documente Seus Helpers:** Comentários claros sobre o que cada helper faz ajudam outros desenvolvedores a entender seu código mais rapidamente. +- **Use Helpers para Lógicas Recorrentes:** Aproveite os helpers para evitar a repetição de lógicas complexas ou padrões comuns em seus templates. + + + +#### Criando o `_helpers.tpl` da nossa App + +Chegou o momento de chamar os Helpers do Helm para nos ajudar a dimunir a repetição de códigos e também para reduzir a complexidade de nossos Templates. + +Vamos dividir em algumas etapas para ficar fácil o entendimento sobre o que estamos fazendo em cada passo. :) + +##### Passo 1: Criando o arquivo `_helpers.tpl` + +Como já vimos, o arquivo `_helpers.tpl` contém definições de templates que podem ser reutilizadas em vários lugares. Aqui estão alguns templates úteis para o nosso caso: + +###### Labels + +Para reutilizar as labels de aplicativos em seus deployments e services: + +```yaml +{{/* +Generate application labels +*/}} +{{- define "app.labels" -}} +app: {{ .labels.app }} +env: {{ .labels.env }} +live: {{ .labels.live }} +{{- end }} +``` + +No arquivo acima estamos definindo um helper que gera as labels do aplicativo com base nas configurações fornecidas. Isso nos permite reutilizar as mesmas labels em vários recursos, garantindo consistência e facilitando a manutenção. + + +###### Resources + +Template para definir os requests e limits de CPU e memória: + +```yaml +{{/* +Generate container resources +*/}} +{{- define "app.resources" -}} +requests: + memory: {{ .resources.requests.memory }} + cpu: {{ .resources.requests.cpu }} +limits: + memory: {{ .resources.limits.memory }} + cpu: {{ .resources.limits.cpu }} +{{- end }} +``` + +Aqui estamos definindo um helper que gera as configurações de recursos para um contêiner com base nas configurações fornecidas. + +###### Ports + +Template para a definição de portas no deployment: + +```yaml +{{/* +Generate container ports +*/}} +{{- define "app.ports" -}} +{{- range .ports }} +- containerPort: {{ .port }} +{{- end }} +{{- end }} +``` + +#### Passo 2: Refatorando `Deployments.yaml` e `Services.yaml` + +Com os helpers definidos, já podemos refatorar nossos arquivos `Deployments.yaml` e `Services.yaml` para utilizar esses templates. + +###### O nosso `Deployments.yaml` + +```yaml +{{- range $component, $config := .Values.deployments }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ $component }} + labels: + {{- include "app.labels" $config | nindent 4 }} +spec: + replicas: {{ $config.replicas | default 3 }} + selector: + matchLabels: + app: {{ $config.labels.app }} + template: + metadata: + labels: + {{- include "app.labels" $config | nindent 8 }} + spec: + containers: + - name: {{ $component }} + image: {{ $config.image }} + ports: + {{- include "app.ports" $config | nindent 10 }} + resources: + {{- include "app.resources" $config | nindent 12 }} +{{- if $config.env }} + env: + {{- range $config.env }} + - name: {{ .name }} + value: {{ .value }} + {{- end }} +{{- end }} +--- +{{- end }} +``` + +###### O nosso `Services.yaml` + +```yaml +{{- range $component, $config := .Values.services }} + {{- range $port := $config.ports }} +apiVersion: v1 +kind: Service +metadata: + name: {{ $component }}-{{ $port.name }} + labels: + {{- include "app.labels" $config | nindent 4 }} +spec: + type: {{ $port.serviceType }} + ports: + - port: {{ $port.port }} + targetPort: {{ $port.targetPort }} + protocol: TCP + name: {{ $port.name }} + {{- if eq $port.serviceType "NodePort" }} + nodePort: {{ $port.nodePort }} + {{- end }} + selector: + app: {{ $config.labels.app }} +--- + {{- end }} +{{- end }} +``` + +Pronto! Agora já temos o `_helpers.tpl` criado e os templates atualizados! + +Caso queira testar, basta instalar ou fazer o upgrade do nosso Chart. Não vou fazer aqui novamente pois já executamos mais de 1 milhão de vezes, você já sabe como fazer isso com os pés nas costas. :) + +#### Passo 3: Refatorando os ConfigMaps + +Ainda precisamos trabalhar com os nosso ConfigMaps, e para isso eu pensei em executar algo um pouco mais complexo, somente para que possamos gastar todo o nosso conhecimento. hahaha + +Para tornar os arquivos `config-map-dp.yaml` e `config-map-obs.yaml` mais inteligentes e menos complexos com a ajuda do arquivo `_helpers.tpl`, podemos adicionar mais definições de template que facilitam a criação de ConfigMaps para bases de dados e configurações de observabilidade. Vou adicionar templates específicos para esses dois tipos de ConfigMap no arquivo `_helpers.tpl` e, em seguida, refatorar os arquivos de ConfigMap para utilizar esses templates. + +##### Atualizando o `_helpers.tpl` + +Adicionaremos templates para gerar ConfigMaps de bancos de dados e observabilidade: + +```yaml +{{/* +Generate database config map +*/}} +{{- define "database.configmap" -}} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .component }}-db-config +data: + app-config.yaml: | + {{- toYaml .config | nindent 4 }} +{{- end }} + +{{/* +Generate observability config map +*/}} +{{- define "observability.configmap" -}} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .component }}-observability-config +data: + app-config.json: | + {{ toJson .config }} +{{- end }} +``` + +Agora estamos praticamente colocando todo o conteúdo dos ConfigMaps aqui, isso fará com que os nossos arquivos fiquem bem pequenos e somente utilizando a combinação do `values.yaml` e o `_helpers.tpl`. + + +##### Refatorando `config-map-dp.yaml` + +Para utilizar o template do `_helpers.tpl`, bora modificar o arquivo `config-map-dp.yaml` da seguinte forma: + +```yaml +{{- range $component, $config := .Values.databases }} + {{- $data := dict "component" $component "config" $config }} + {{- include "database.configmap" $data | nindent 0 }} +{{- end }} +``` + +Isso irá percorrer todos os componentes definidos em `.Values.databases` e aplicar o template definido para criar um ConfigMap para cada banco de dados. + +##### Refatorando `config-map-obs.yaml` + +Da mesma forma, modifique o arquivo `config-map-obs.yaml` para usar o template de observabilidade: + +```yaml +{{- range $component, $config := .Values.observability }} + {{- $data := dict "component" $component "config" $config }} + {{- include "observability.configmap" $data | nindent 0 }} +{{- end }} +``` + +Isso irá iterar sobre os componentes definidos em `.Values.observability` e aplicar o template para criar um ConfigMap de observabilidade para cada componente. + +Ahhh, o nosso arquivo `_helpers.tpl` ficou da seguinte maneira: + +```yaml +{{/* Define a base para reutilização de labels */}} +{{- define "app.labels" -}} +app: {{ .labels.app }} +env: {{ .labels.env }} +live: {{ .labels.live }} +{{- end }} + +{{/* Template para especificações de recursos de containers */}} +{{- define "app.resources" -}} +requests: + memory: {{ .resources.requests.memory }} + cpu: {{ .resources.requests.cpu }} +limits: + memory: {{ .resources.limits.memory }} + cpu: {{ .resources.limits.cpu }} +{{- end }} + +{{/* Template para definição de portas em containers */}} +{{- define "app.ports" -}} +{{- range .ports }} +- containerPort: {{ .port }} +{{- end }} +{{- end }} + +{{/* Template para gerar um ConfigMap para configurações de banco de dados */}} +{{- define "database.configmap" -}} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .component }}-db-config +data: + app-config.yaml: | + {{- toYaml .config | nindent 4 }} +{{- end }} + +{{/* Template para gerar um ConfigMap para configurações de observabilidade */}} +{{- define "observability.configmap" -}} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .component }}-observability-config +data: + app-config.json: | + {{ toJson .config }} +{{- end }} +``` + +Veja o quanto conseguimos modificar os nossos Templates utilizando o nosso `_helpers.tpl`, isso é mágico demais! Porém é importante lembrar que não devemos usar os helpers para deixar as coisas mais complexas, e sim, facilitar e diminuir a nossa carga cognitiva e a repetição de códigos. Aqui estamos trabalhando de forma que fique mais didática, porém isso não quer dizer que você deva repetir isso em sua produção. Tudo depende, e dito isso, agora que você já conhece bem o que são os Helm Charts, acho que já podemos conhecer como criar o nosso repositório de Helm Charts! + +#### Criando um repositório de Helm Charts + +É bem comum que você tenha um repositório interno para armazenar os seus Helm Charts, para que outras pessoas consigam utilizar e ajudar no gerenciamento do repositório. + +A criação de um repositório é bastante simples, e para o nosso exemplo vamos utilizar o Github para ser o nosso repo de Charts. Esse repositório pode ser público ou privado, depende da sua necessidade. + +Vou colocar alguns passos para que você possa criar o seu repositório no Github, antes da gente começar a começar a trabalhar com o nosso repositório de Helm Charts. + +##### Criando o repositório no Github + +1. Acesse o Github e faça o login na sua conta. +2. Clique no ícone de "+" no canto superior direito e selecione "New repository". +3. Nomeie o seu repositório (por exemplo, meu-repo-charts). +4. Deixe o repositório público ou privado, conforme sua necessidade. +5. Clique em "Create repository". + +Pronto, repo criado! + +Agora vamos clona-lo para a nossa máquina e começar a trabalhar com ele. + +```bash +git clone < endereço do seu repo > +``` + +Agora acesse o diretório do seu repositório e vamos começar a brincadeira do lado do Helm. + +##### Inicializando o repositório + +Primeira coisa, vamos criar o diretórios charts e acessa-lo: + +```bash +mkdir charts +cd charts +``` + +Agora vamos copiar o nosso Chart para o diretório `charts`: + +```bash +cp -r ./ +``` + +O conteúdo será algo assim: + +```bash +. +├── charts +│ └── giropops-senhas +│ ├── charts +│ ├── Chart.yaml +│ ├── templates +│ │ ├── configmap-db.yaml +│ │ ├── configmap-observability.yaml +│ │ ├── deployments.yaml +│ │ ├── _helpers.tpl +│ │ └── services.yaml +│ └── values.yaml +└── README.md +``` + +Vamos aproveitar e conhecer dois comandos que irão nos ajudar a ter certeza que está tudo certo com o nosso Chart. + +O primeiro é o `lint`, usado para ver como está a qualidade do nosso Chart: + +```bash +helm lint giropops-senhas +``` + +Com isso, se tudo estiver bem você verá a seguinte saída: + +```bash +==> Linting charts/giropops-senhas +[INFO] Chart.yaml: icon is recommended + +1 chart(s) linted, 0 chart(s) failed +``` + +Temos um aviso, mas isso não é um problema, é apenas uma recomendação. + +Outro comando que nos ajuda a ter certeza que está tudo certo com o nosso Chart é o `template`, que irá renderizar o nosso Chart e verificar se está tudo certo: + +```bash +helm template charts/giropops-senhas +``` + +Com isso você verá a saída do seu Chart renderizado, e assim você consegue conferir os manifestos gerados e ver se está tudo certo. :) + +O próximo passo é criar um pacote do nosso Chart, que nada mais é que um .tgz que contém o nosso Chart, e para isso, execute o comando abaixo: + +```bash +helm package charts/giropops-senhas +``` + +A saída: + +```bash +Successfully packaged chart and saved it to: /home/LINUXtips/meu-repo/giropops-senhas-0.1.0.tgz +``` + +Agora que já temosk o tarball do nosso Chart, vamos adicionar ele ao nosso repositório, e para que isso seja possível vamos conhecer um comando que irá nos ajudar nessa tarefa, que é o `repo index`. + +O `repo index` irá criar um arquivo index.yaml que contém as informações sobre os pacotes disponíveis no repositório, e para isso, execute o comando abaixo: + +```bash +helm repo index --url . +``` + +Perceba que ele criou um arquivo chamado `index.yaml`, e nesse arquivo temos informções sobre o nosso Chart, como o nome, a versão, a descrição, o tipo de aplicação, e o endereço do Chart. + +Vamos dar um `cat` nesse arquivo para ver o que temos: + +```bash +cat index.yaml +``` + +```yaml +apiVersion: v1 +entries: + giropops-senhas: + - apiVersion: v2 + appVersion: 0.1.0 + created: "2024-02-13T11:40:40.803868957+01:00" + description: Esse é o chart do Giropops-Senhas, utilizados nos laboratórios de + Kubernetes. + digest: 05bc20f073f5e7824ok43o4k3okfdfac1be5c46e4bdc0ac3a8a45eec + name: giropops-senhas + sources: + - https://github.com/seu-user/seu-repo + urls: + - https://github.com/seu-user/seu-repo/giropops-senhas-0.1.0.tgz + version: 0.1.0 +generated: "2024-02-13T11:40:40.803383504+01:00" +``` + +Com o index.yaml, precisamos ir para o próximo passo, que é fazer o commit e o push do nosso repositório. + +```bash +git add . +git commit -m "Adicionando o Chart do Giropops-Ssenhas" +git push origin main +``` + +Pronto, o nosso código está no repo lá no GitHub. \o/ + +Mas o nosso trabalho não para por aqui, precisamos configurar o GitHub Pages para o nosso repositório de Helm Charts. + +##### Configurando o GitHub Pages + +Siga os passos abaixo para configurar o seu GitHub Pages: + +1. Acesse o repositório no Github. +2. Clique na aba "Settings". +3. Role a página até a seção "Pages". +4. Selecione a branch `main` e a pasta `root` e clique em "Save". +5. Aguarde alguns minutos e copie o link que aparecerá na seção "Pages". + + +Algo parecido com a imagem abaixo: + +![Alt text](images/github-pages.png?raw=true "GitHub Pages") + +Pronto, o nosso repositorio de Helm Charts está configurado e pronto para ser utilizado! + +Um coisa importante é alterar o `index.yaml` para que ele aponte para o endereço do GitHub Pages, e para isso, execute o comando abaixo: + +```bash +helm repo index --url . +``` + +Com isso, o seu `index.yaml` estará apontando para o endereço do GitHub Pages, do contrário o seu repositório não funcionará. + +Agora que já temos o nosso repositório de Helm Charts, vamos ver como utilizá-lo. + +#### Utilizando o nosso repositório de Helm Charts + +Deu trabalho, mas agora já temos o nosso repo de Helm Charts criado com sucesso, porém ainda não sabemos qual o seu gostinho, afinal ainda não utilizamos ele. + +Vamos resolver isso! + +Primeira coisa, para que possamos utilizar o Chart de um determinado repositório, precisamos adicionar esse repositório ao Helm, e para isso, execute o comando abaixo: + +```bash +helm repo add meu-repo +``` + +Vamos listar os repositórios que temos no Helm: + +```bash +helm repo list +``` + +A minha saída: + +```bash +NAME URL +metrics-server https://kubernetes-sigs.github.io/metrics-server/ +kyverno https://kyverno.github.io/kyverno/ +meurepo https://badtuxx.github.io/charts-example/ +``` + +Veja que o nosso repo está lá! Além do nosso repo, temos mais dois outros repos adicionados por mim anteriomente, que são o `metrics-server` e o `kyverno`. É com esse comando que conseguimos ver todos os repositórios que temos no Helm. + +Podemos listar os Charts que temos no nosso repositório da seguinte maneira: + +```bash +helm search repo meu-repo +``` + +A saída: + +```bash +NAME CHART VERSION APP VERSION DESCRIPTION +meure2po/giropops-senhas 0.1.0 0.1.0 Esse é o chart do Giropops-Senhas, utilizados n... +``` + +O nosso está lá, e o melhor, pronto para ser utilizado! + +Agora, caso você queria instalar o Chart do Giropops-Senhas, basta executar o comando abaixo: + +```bash +helm install giropops-senhas meu-repo/giropops-senhas +``` + +E pronto, o seu Chart já está instalado e funcionando! + +Caso você queira personalizar o seu Chart, basta criar um arquivo `values.yaml` e passar as configurações que você deseja, e depois passar esse arquivo para o Helm, da seguinte maneira: + +```bash +helm install giropops-senhas meu-repo/giropops-senhas -f values.yaml +``` + +E para atualizar um Chart que já está instalado, basta executar o comando abaixo: + +```bash +helm upgrade giropops-senhas meu-repo/giropops-senhas +``` + +Quer ver os detalhes do seu Chart? Execute o comando abaixo: + +```bash +helm show all meu-repo/giropops-senhas +``` + +O que teremos será uma descrição do nosso Chart, com todas as informações que definimos no `Chart.yaml` e no `values.yaml`, algo como a saida abaixo: + +```bash +apiVersion: v2 +appVersion: 0.1.0 +description: Esse é o chart do Giropops-Senhas, utilizados nos laboratórios de Kubernetes. +name: giropops-senhas +sources: +- https://github.com/badtuxx/giropops-senhas +version: 0.1.0 + +--- +giropopsSenhas: + name: "giropops-senhas" + image: "linuxtips/giropops-senhas:1.0" + replicas: "3" + port: 5000 + labels: + app: "giropops-senhas" + env: "labs" + live: "true" + service: + type: "NodePort" + port: 5000 + targetPort: 5000 + name: "giropops-senhas-port" + resources: + requests: + memory: "128Mi" + cpu: "250m" + limits: + memory: "256Mi" + cpu: "500m" + +redis: + image: "redis" + replicas: 1 + port: 6379 + labels: + app: "redis" + env: "labs" + live: "true" + service: + type: "ClusterIP" + port: 6379 + targetPort: 6379 + name: "redis-port" + resources: + requests: + memory: "128Mi" + cpu: "250m" + limits: + memory: "256Mi" + cpu: "500m" +``` + +E por fim, caso você queira remover o seu Chart, basta executar o comando abaixo: + +```bash +helm uninstall giropops-senhas +``` + +Simples como voar! Sim, eu sei, chega a ser lacrimejante, mas agora eu já posso dizer que você domina o Helm! + +#### O que vimos no dia de hoje + +Hoje o dia foi intenso, pois conseguimos descomplicar como usar o Helm para deixar a nossa vida ainda melhor. Aprendemos a criar um Chart do zero, utilizando diversas técnicas e deixando muito conhecimento para que você possa utilizar em sua vida! +Agora eu quero que você me manda algum Chart que você criou com o que você aprendeu por aqui! Deixa o tio Jefinho feliz! hahahha + +E por hoje é só! #VAIIII diff --git a/pt/day-16/files/README.md b/pt/day-16/files/README.md new file mode 100644 index 00000000..10de0b5d --- /dev/null +++ b/pt/day-16/files/README.md @@ -0,0 +1 @@ +# charts-example diff --git a/pt/day-16/files/charts/giropops-senhas/.helmignore b/pt/day-16/files/charts/giropops-senhas/.helmignore new file mode 100644 index 00000000..e69de29b diff --git a/pt/day-16/files/charts/giropops-senhas/Chart.yaml b/pt/day-16/files/charts/giropops-senhas/Chart.yaml new file mode 100644 index 00000000..bd82a5e9 --- /dev/null +++ b/pt/day-16/files/charts/giropops-senhas/Chart.yaml @@ -0,0 +1,7 @@ +apiVersion: v2 +name: giropops-senhas +description: Esse é o chart do Giropops-Senhas, utilizados nos laboratórios de Kubernetes. +version: 0.1.0 +appVersion: 0.1.0 +sources: + - https://github.com/badtuxx/giropops-senhas diff --git a/pt/day-16/files/charts/giropops-senhas/templates/_helpers.tpl b/pt/day-16/files/charts/giropops-senhas/templates/_helpers.tpl new file mode 100644 index 00000000..6b53ba7f --- /dev/null +++ b/pt/day-16/files/charts/giropops-senhas/templates/_helpers.tpl @@ -0,0 +1,45 @@ +{{/* Define a base para reutilização de labels */}} +{{- define "app.labels" -}} +app: {{ .labels.app | quote }} +env: {{ .labels.env | quote }} +live: {{ .labels.live | quote }} +{{- end }} + +{{/* Template para especificações de recursos de containers */}} +{{- define "app.resources" -}} +requests: + memory: {{ .resources.requests.memory }} + cpu: {{ .resources.requests.cpu }} +limits: + memory: {{ .resources.limits.memory }} + cpu: {{ .resources.limits.cpu }} +{{- end }} + +{{/* Template para definição de portas em containers */}} +{{- define "app.ports" -}} +{{- range .ports }} +- containerPort: {{ .port }} +{{- end }} +{{- end }} + +{{/* Template para gerar um ConfigMap para configurações de banco de dados */}} +{{- define "database.configmap" -}} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .component }}-db-config +data: + app-config.yaml: | + {{- toYaml .config | nindent 4 }} +{{- end }} + +{{/* Template para gerar um ConfigMap para configurações de observabilidade */}} +{{- define "observability.configmap" -}} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .component }}-observability-config +data: + app-config.json: | + {{ toJson .config }} +{{- end }} \ No newline at end of file diff --git a/pt/day-16/files/charts/giropops-senhas/templates/configmap-db.yaml b/pt/day-16/files/charts/giropops-senhas/templates/configmap-db.yaml new file mode 100644 index 00000000..8d303b3d --- /dev/null +++ b/pt/day-16/files/charts/giropops-senhas/templates/configmap-db.yaml @@ -0,0 +1,4 @@ +{{- range $component, $config := .Values.databases }} + {{- $data := dict "component" $component "config" $config }} + {{- include "database.configmap" $data | nindent 0 }} +{{- end }} \ No newline at end of file diff --git a/pt/day-16/files/charts/giropops-senhas/templates/configmap-observability.yaml b/pt/day-16/files/charts/giropops-senhas/templates/configmap-observability.yaml new file mode 100644 index 00000000..3c85b7eb --- /dev/null +++ b/pt/day-16/files/charts/giropops-senhas/templates/configmap-observability.yaml @@ -0,0 +1,4 @@ +{{- range $component, $config := .Values.observability }} + {{- $data := dict "component" $component "config" $config }} + {{- include "observability.configmap" $data | nindent 0 }} +{{- end }} \ No newline at end of file diff --git a/pt/day-16/files/charts/giropops-senhas/templates/deployments.yaml b/pt/day-16/files/charts/giropops-senhas/templates/deployments.yaml new file mode 100644 index 00000000..e4019508 --- /dev/null +++ b/pt/day-16/files/charts/giropops-senhas/templates/deployments.yaml @@ -0,0 +1,33 @@ +{{- range $component, $config := .Values.deployments }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ $component }} + labels: + {{- include "app.labels" $config | nindent 4 }} +spec: + replicas: {{ $config.replicas | default 3 }} + selector: + matchLabels: + app: {{ $config.labels.app }} + template: + metadata: + labels: + {{- include "app.labels" $config | nindent 8 }} + spec: + containers: + - name: {{ $component }} + image: {{ $config.image }} + ports: + {{- include "app.ports" $config | nindent 10 }} + resources: + {{- include "app.resources" $config | nindent 12 }} +{{- if $config.env }} + env: + {{- range $config.env }} + - name: {{ .name }} + value: {{ .value }} + {{- end }} +{{- end }} +--- +{{- end }} \ No newline at end of file diff --git a/pt/day-16/files/charts/giropops-senhas/templates/services.yaml b/pt/day-16/files/charts/giropops-senhas/templates/services.yaml new file mode 100644 index 00000000..87c04d03 --- /dev/null +++ b/pt/day-16/files/charts/giropops-senhas/templates/services.yaml @@ -0,0 +1,23 @@ +{{- range $component, $config := .Values.services }} + {{- range $port := $config.ports }} +apiVersion: v1 +kind: Service +metadata: + name: {{ $component }}-{{ $port.name }} + labels: + {{- include "app.labels" $config | nindent 4 }} +spec: + type: {{ $port.serviceType }} + ports: + - port: {{ $port.port }} + targetPort: {{ $port.targetPort }} + protocol: TCP + name: {{ $port.name }} + {{- if eq $port.serviceType "NodePort" }} + nodePort: {{ $port.nodePort }} + {{- end }} + selector: + app: {{ $config.labels.app }} +--- + {{- end }} +{{- end }} \ No newline at end of file diff --git a/pt/day-16/files/charts/giropops-senhas/values.yaml b/pt/day-16/files/charts/giropops-senhas/values.yaml new file mode 100644 index 00000000..5dc94bfd --- /dev/null +++ b/pt/day-16/files/charts/giropops-senhas/values.yaml @@ -0,0 +1,69 @@ +deployments: + giropops-senhas: + name: "giropops-senhas" + image: "linuxtips/giropops-senhas:1.0" + replicas: 2 + labels: + app: "giropops-senhas" + env: "labs" + live: "true" + resources: + requests: + memory: "128Mi" + cpu: "250m" + limits: + memory: "256Mi" + cpu: "500m" + redis: + image: "redis" + replicas: 1 + port: 6379 + labels: + app: "redis" + env: "labs" + live: "true" + resources: + requests: + memory: "128Mi" + cpu: "250m" + limits: + memory: "256Mi" + cpu: "500m" +services: + giropops-senhas: + ports: + - port: 5000 + targetPort: 5000 + name: "app" + serviceType: NodePort + NodePort: 32500 + - port: 8088 + targetPort: 8088 + name: "metrics" + serviceType: ClusterIP + labels: + app: "giropops-senhas" + env: "labs" + live: "true" + redis: + ports: + - port: 6379 + targetPort: 6379 + name: "service" + serviceType: ClusterIP + labels: + app: "redis" + env: "labs" + live: "true" +observability: + giropops-senhas: + logging: true + metrics: + enabled: true + path: "/metrics" +databases: + giropops-senhas: + type: "MySQL" + host: "mysql.svc.cluster.local" + port: 3306 + name: "MyDB" \ No newline at end of file diff --git a/pt/day-16/images/github-pages.png b/pt/day-16/images/github-pages.png new file mode 100644 index 0000000000000000000000000000000000000000..fcb6e86872be421970d7c21f29e8ae0805c279a3 GIT binary patch literal 76710 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