Escalonamento com o Kustomize

1. Objetivos

Kustomize é uma ferramenta que apresenta uma maneira sem modelos de personalizar a configuração de aplicativos, simplificando o uso de aplicativos prontos para uso. Ele está disponível como um utilitário autônomo e é integrado ao kubectl por meio de kubectl apply -k e pode ser usado como uma CLI independente. Para mais detalhes, leia mais em kustomize.io (link em inglês).

Neste tutorial, você trabalhará com alguns dos principais conceitos do Kustomize e os usará para gerenciar variações nos aplicativos e ambientes.

Você vai:

  • Use o cliente de linha de comando kustomize
  • Substituir elementos comuns
  • Corrija estruturas yaml maiores
  • Usar várias camadas de sobreposições

2. Como preparar seu espaço de trabalho

  1. Abra o editor do Cloud Shell no seguinte URL

https://ide.cloud.google.com

  1. Na janela do terminal, crie um diretório de trabalho para este tutorial.

mkdir kustomize-lab

  1. Mude para o diretório e defina o espaço de trabalho do ambiente de desenvolvimento integrado

cd kustomize-lab && cloudshell workspace .

3. Como usar o cliente de linha de comando do Kustomize

O poder do Kustomize vem da capacidade de sobrepor e modificar yamls de base do Kubernetes com valores personalizados. Para fazer isso, o Kustomize exige um arquivo base com instruções sobre onde estão os arquivos e o que deve ser substituído. O Kustomize está incluído no ecossistema do Kubernetes e pode ser executado usando vários métodos.

Nesta seção, você criará uma configuração básica do Kustomize e processará os arquivos com o cliente de linha de comando autônomo kustomize.

  1. Para começar, crie uma pasta para armazenar seus arquivos de configuração básicos

mkdir -p chat-app/base

  1. Crie um deployment.yaml do Kubernetes simples na pasta base

cat <<EOF > chat-app/base/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`metadata:`

  `name: chat-app`

`spec:`

  `containers:`

  `- name: chat-app`

    `image: chat-app-image`

EOF

  1. Criar a base kustomization.yaml

O Kustomize procura um arquivo chamado kustomization.yaml como ponto de entrada. Esse arquivo contém referências aos vários arquivos base e de substituição, bem como a valores específicos de substituição.

Crie um arquivo kustomization.yaml que referencie o deployment.yaml como os recursos base.

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. Execute o comando kustomize na pasta base. Isso gera os arquivos YAML de implantação sem alterações, o que é esperado, já que você ainda não incluiu variações.

kustomize build chat-app/base

Esse cliente autônomo pode ser combinado com o cliente kubectl para aplicar a saída diretamente, como no exemplo a seguir. Isso faz o streaming da saída do comando build diretamente para o comando apply do kubectl.

(Não executar - Incluído apenas para referência)

kustomize build chat-app/base | kubectl apply -f -

Essa técnica é útil se uma versão específica do cliente do Kustomize for necessária.

Como alternativa, o kustomize pode ser executado com as ferramentas integradas ao próprio kubectl. Como no exemplo a seguir.

(Não executar - Incluído apenas para referência)

kubectl apply -k chat-app/base

4. Substituição de elementos comuns

Agora que o espaço de trabalho está configurado e você verificou que o Kustomize está funcionando, é hora de substituir alguns dos valores base.

Imagens, namespaces e rótulos costumam ser personalizados para cada aplicativo e ambiente. Como elas costumam ser alteradas, o Kustomize permite declará-las diretamente no kustomize.yaml, eliminando a necessidade de criar muitos patches para esses cenários comuns.

Essa técnica é muito usada para criar uma instância específica de um modelo. Um conjunto básico de recursos agora pode ser usado para várias implementações. Basta alterar o nome e o namespace dele.

Neste exemplo, você vai adicionar um namespace, o prefixo de nome e alguns rótulos ao kustomization.yaml.

  1. Atualize o arquivo kustomization.yaml para incluir rótulos e namespaces comuns.

Copie e execute os comandos a seguir no terminal

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

namespace: my-namespace

nameprefix: my-

commonLabels:

app: my-app

EOF

  1. Executar o comando de build

A execução do build nesse ponto mostra que o arquivo YAML resultante agora contém o namespace, os rótulos e os nomes prefixados nas definições de serviço e implantação.

kustomize build chat-app/base

Observe como a saída contém rótulos e namespaces que não estão no arquivo YAML de implantação. Observe também como o nome mudou de chat-app para my-chat-app

(Não copie a resposta)

kind: Deployment

metadata:

labels:

`app: my-app`

name: my-chat-app

namespace: my-namespace

5. Correção de estruturas yaml maiores

Com o Kustomize, também é possível aplicar patches que se sobrepõem aos recursos básicos. Essa técnica costuma ser usada para fornecer variabilidade entre aplicativos e ambientes.

Nesta etapa, você vai criar variações de ambiente para um único aplicativo que usa os mesmos recursos base.

  1. Comece criando pastas para os diferentes ambientes

mkdir -p chat-app/dev

mkdir -p chat-app/prod

  1. Escreva o patch do cenário com o seguinte comando

cat <<EOF > chat-app/dev/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

  `containers:`

  `- name: chat-app`

    `env:`

    `- name: ENVIRONMENT`

      `value: dev`

EOF

  1. Agora, escreva o patch prod com o seguinte comando:

cat <<EOF > chat-app/prod/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

  `containers:`

  `- name: chat-app`

    `env:`

    `- name: ENVIRONMENT`

      `value: prod`

EOF

Os patches acima não contêm o nome da imagem do contêiner. Esse valor é fornecido no base/deployment.yaml criado na etapa anterior. No entanto, esses patches contêm variáveis de ambiente exclusivas para dev e prod.

  1. Implementar os arquivos YAML do Kustomize para o diretório base

Reescreva o kustomization.yaml base e remova o namespace e o prefixo de nome, já que essa é apenas a configuração básica sem variação. Esses campos serão movidos para os arquivos de ambiente em breve.

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

commonLabels:

app: chat-app

EOF

  1. Implementar os arquivos YAML do Kustomize para o diretório dev

Agora implemente as variações para dev e prod executando os seguintes comandos no seu terminal.

cat <<EOF > chat-app/dev/kustomization.yaml

bases:

- ../base

namespace: dev

nameprefix: dev-

commonLabels:

env: dev

patches:

- deployment.yaml

EOF

Observe a adição da seção patches: do arquivo. Isso indica que o kustomize deve sobrepor esses arquivos sobre os recursos base.

  1. Implementar os arquivos YAML do Kustomize para o diretório de produção

cat <<EOF > chat-app/prod/kustomization.yaml

bases:

- ../base

namespace: prod

nameprefix: prod-

commonLabels:

env: prod

patches:

- deployment.yaml

EOF

  1. Execute o Kustomize para mesclar os arquivos

Com os arquivos de base e de ambiente criados, você pode executar o processo do Kustomize para corrigir os arquivos de base.

Execute o comando a seguir para dev e confira o resultado combinado.

kustomize build chat-app/dev

Observe que a saída contém resultados mesclados, como rótulos das configurações base e de desenvolvimento, bem como o nome da imagem do contêiner da base e a variável de ambiente das pastas de desenvolvimento.

6. Utilizar várias camadas de sobreposições

Muitas organizações têm uma equipe que oferece suporte às equipes de apps e gerencia a plataforma. Muitas vezes, essas equipes querem incluir detalhes específicos que devem ser incluídos em todos os apps e ambientes, como um agente do Logging.

Neste exemplo, você vai criar uma pasta e recursos shared-kustomize que serão incluídos por todos os aplicativos e independente do ambiente em que forem implantados.

  1. Criar a pasta shared-kustomize

mkdir shared-kustomize

  1. Criar um deployment.yaml simples na pasta compartilhada

cat <<EOF > shared-kustomize/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

  `containers:`

  `- name: logging-agent`

    `image: logging-agent-image`

EOF

  1. Crie um kustomization.yaml na pasta compartilhada

cat <<EOF > shared-kustomize/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. Faça referência à pasta shared-kustomize no seu aplicativo.

Como você quer que a pasta shared-kustomize seja a base de todos os seus aplicativos, será necessário atualizar chat-app/base/kustomization.yaml para usar shared-kustomize como base. Em seguida, corrija o próprio deployment.yaml. O patch será aplicado novamente às pastas do ambiente.

Copie e execute os comandos a seguir no terminal

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- ../../shared-kustomize

commonLabels:

app: chat-app

patches:

- deployment.yaml

EOF

  1. Execute o Kustomize e veja os resultados mesclados para o desenvolvimento

kustomize build chat-app/dev

Observe que a saída contém resultados mesclados da base do app, do ambiente do app e das pastas shared-kustomize. Especificamente, é possível ver na seção de contêineres os valores dos três locais.

(a saída não é copiada)

<pre>

`containers:`

      `- env:`

        `- name: ENVIRONMENT`

          `value: dev`

        `name: chat-app`

      `- image: image`

        `name: app`

      `- image: logging-agent-image`

        `name: logging-agent`

</pre>