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
- Abra o editor do Cloud Shell no seguinte URL
https://ide.cloud.google.com
- Na janela do terminal, crie um diretório de trabalho para este tutorial.
mkdir kustomize-lab
- 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.
- Para começar, crie uma pasta para armazenar seus arquivos de configuração básicos
mkdir -p chat-app/base
- 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
- 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
- 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
.
- 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
- 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.
- Comece criando pastas para os diferentes ambientes
mkdir -p chat-app/dev
mkdir -p chat-app/prod
- 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
- 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.
- 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
- 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.
- 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
- 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.
- Criar a pasta shared-kustomize
mkdir shared-kustomize
- 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
- Crie um kustomization.yaml na pasta compartilhada
cat <<EOF > shared-kustomize/kustomization.yaml
bases:
- deployment.yaml
EOF
- 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
- 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>