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
- Abra o editor do Cloud Shell acessando o 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 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.
- Para começar, crie uma pasta para armazenar seus arquivos de configuração de base.
mkdir -p chat-app/base
- Crie um
deployment.yamlsimples 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
- Criar o
kustomization.yamlde 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
- 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.
- Atualize o arquivo
kustomization.yamlpara 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
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.
- Comece criando pastas para os diferentes ambientes
mkdir -p chat-app/dev
mkdir -p chat-app/prod
- 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
- 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.
- 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
- 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.
- 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
- 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.
- Criar a pasta shared-kustomize
mkdir shared-kustomize
- Crie um
deployment.yamlsimples 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 arquivo kustomization.yaml na pasta compartilhada.
cat <<EOF > shared-kustomize/kustomization.yaml
bases:
- deployment.yaml
EOF
- 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
- 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>