Escalonamento com o Kustomize

1. Objetivos

O Kustomize é uma ferramenta que apresenta uma maneira sem modelos de personalizar a configuração do aplicativo, simplificando o uso de aplicativos prontos para uso. Ele está disponível como um utilitário independente e é integrado ao kubectl por kubectl apply -k ou pode ser usado como uma CLI independente. Para mais detalhes, leia kustomize.io.

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

Você vai:

  • Usar o cliente de linha de comando do kustomize
  • Substituir elementos comuns
  • Adicionar patchs a estruturas YAML maiores
  • Usar várias camadas de sobreposições

2. Preparar seu espaço de trabalho

  1. Abra o editor do Cloud Shell acessando o 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 básicos do Kubernetes com valores personalizados. Para isso, o kustomize exige um arquivo de base com instruções sobre onde os arquivos estão e o que substituir. O Kustomize está incluído no ecossistema do Kubernetes e pode ser executado por vários métodos.

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

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

mkdir -p chat-app/base

  1. Crie um deployment.yaml simples do Kubernetes 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 o kustomization.yaml de base

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

Crie um arquivo kustomization.yaml que referencie o deployment.yaml como os recursos básicos.

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 nenhuma variação.

kustomize build chat-app/base

Esse cliente independente pode ser combinado com o cliente kubectl para aplicar a saída diretamente, como no exemplo a seguir. Isso transmite a saída do comando de build diretamente para o comando kubectl apply.

(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 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. Substituir elementos comuns

Agora que seu espaço de trabalho está configurado e você verificou se o kustomize está funcionando, é hora de substituir alguns dos valores básicos.

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

Essa técnica é usada com frequência 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 apenas mudando o nome e o namespace.

Neste exemplo, você vai adicionar um namespace, um prefixo de nome e alguns rótulos ao seu 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

Executar o build neste ponto mostra que o arquivo YAML resultante agora contém o namespace, os rótulos e os nomes com prefixo 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

(Resposta – não copie)

kind: Deployment

metadata:

labels:

`app: my-app`

name: my-chat-app

namespace: my-namespace

5. Como fazer patch em estruturas YAML maiores

O Kustomize também oferece a capacidade de aplicar patches que substituem os recursos básicos. Essa técnica é usada com frequência para oferecer variabilidade entre aplicativos e ambientes.

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

  1. Comece criando pastas para os diferentes ambientes

mkdir -p chat-app/dev

mkdir -p chat-app/prod

  1. Escreva o patch de estágio 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 de produção 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

Observe que 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 desenvolvimento e produção.

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

Reescreva o kustomization.yaml de base, remova o namespace e o prefixo do nome, já que essa é apenas a configuração de base 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 desenvolvimento e produção executando os seguintes comandos no 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 aos recursos básicos.

  1. Implemente os arquivos YAML do kustomize para o diretório "prod"

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

bases:

- ../base

namespace: prod

nameprefix: prod-

commonLabels:

env: prod

patches:

- deployment.yaml

EOF

  1. Executar o kustomize para mesclar os arquivos

Com os arquivos de base e de ambiente criados, é possível executar o processo kustomize para corrigir os arquivos de base.

Execute o comando a seguir para que o desenvolvedor veja o resultado combinado.

kustomize build chat-app/dev

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

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

Muitas organizações têm uma equipe que ajuda a apoiar as equipes de apps e gerenciar a plataforma. Muitas vezes, essas equipes querem incluir detalhes específicos que devem estar em todos os apps e ambientes, como um agente de geração de registros.

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

  1. Criar a pasta shared-kustomize

mkdir shared-kustomize

  1. Crie 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 arquivo kustomization.yaml na pasta compartilhada.

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

bases:

- deployment.yaml

EOF

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

Como você quer que a pasta shared-kustomize seja a base de todos os seus aplicativos, será necessário atualizar o chat-app/base/kustomization.yaml para usar shared-kustomize como base. Em seguida, adicione o próprio deployment.yaml por cima. Em seguida, as pastas de ambiente serão corrigidas novamente.

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. Executar o kustomize e conferir os resultados combinados para desenvolvimento

kustomize build chat-app/dev

A saída contém resultados mesclados da base do app, do ambiente do app e das pastas shared-kustomize. Especificamente, você pode ver na seção de contêineres valores de todos os três locais.

(Resposta – não copie)

<pre>

`containers:`

      `- env:`

        `- name: ENVIRONMENT`

          `value: dev`

        `name: chat-app`

      `- image: image`

        `name: app`

      `- image: logging-agent-image`

        `name: logging-agent`

</pre>