Nota do tradutor.: O artigo foi escrito por Scott Lowe - um engenheiro com vasta experiência em TI, autor/coautor de sete livros impressos (principalmente sobre VMware vSphere). Atualmente, ele trabalha em sua filial da VMware - Heptio (adquirida em 2016), especializado em computação em nuvem e Kubernetes. O texto oferece uma introdução concisa e fácil de entender sobre gerenciamento de configurações para Kubernetes usando a tecnologia , que recentemente foi integrada ao K8s.

Kustomize é uma ferramenta que permite aos usuários “personalizar arquivos YAML simples e sem modelos para vários propósitos, mantendo o YAML original intacto e utilizável” (descrição extraída diretamente do ). Kustomize pode ser executado diretamente ou, a partir do Kubernetes 1.14, pode usar kubectl -k para acessar suas funções (embora, com o Kubernetes 1.15, um binário separado seja mais recente do que as capacidades embutidas no kubectl). (Nota do tradutor.: E com o recente lançamento (a propósito, seu desenvolvimento agora é feito em um repositório separado), ou seja, para processar arquivos YAML adicionais de diretórios especiais de kustomization (detalhes sobre seu uso podem ser encontrados em , também na ferramenta kubeadm.) Nesta publicação, quero apresentar aos leitores os fundamentos do kustomize.
Em sua forma/uso mais simples, o kustomize é apenas um conjunto de recursos (arquivos YAML que definem objetos Kubernetes: Deployments, Services, etc.) mais uma lista de instruções sobre as mudanças que precisam ser feitas nesses recursos. Assim como o make usa um conjunto de instruções contidas em Makefile, e o Docker constrói um contêiner com base nas instruções de Dockerfile, o kustomize usa kustomization.yaml para armazenar as prescrições sobre quais alterações o usuário deseja fazer no conjunto de recursos.
Aqui está um exemplo de arquivo kustomization.yaml:
resources:
- deployment.yaml
- service.yaml
namePrefix: dev-
namespace: development
commonLabels:
environment: development Não tentarei falar sobre todos os campos possíveis no arquivo kustomization.yaml (o que é bem escrito ), mas farei uma breve explicação de um exemplo específico:
- Campo
resourcesindica quais (quais recursos) o kustomize fará alterações. Neste caso, ele procurará recursos nos arquivosdeployment.yamleservice.yamlem seu diretório (caminhos completos ou relativos podem ser especificados, se necessário). - Campo
namePrefixinstrui o kustomize a adicionar um determinado prefixo (neste caso -dev-) ao atributonomede todos os recursos definidos no camporesources. Assim, se houver umnomecom o valornginx-deployment, o kustomize o transformará emdev-nginx-deployment. - Campo
namespaceinstrui o kustomize a adicionar o namespace especificado a todos os recursos. Neste caso, Deployment e Service serão colocados no namespacedesenvolvimento. - Finalmente, o campo
commonLabelscontém um conjunto de rótulos que será adicionado a todos os recursos. No nosso exemplo, o kustomize atribuirá aos recursos um rótulo chamadoenvironmente valordesenvolvimento.
Se o usuário executar kustomize build . no diretório com o arquivo kustomization.yaml e os recursos necessários (ou seja, os arquivos deployment.yaml e service.yaml), a saída será um texto com as alterações definidas em kustomization.yaml.

Nota do tradutor.: Ilustração da documentação do projeto sobre o uso "simples" do kustomize
A saída pode ser redirecionada, se necessário, para registrar as alterações:
kustomize build . > custom-config.yamlA saída é determinística (com os mesmos dados de entrada, os mesmos resultados de saída serão produzidos), portanto, não é necessário salvar o resultado em um arquivo. Em vez disso, ele pode ser passado diretamente para outro comando:
kustomize build . | kubectl apply -f - O acesso às funções do kustomize também pode ser obtido através de kubectl -k (a partir da versão 1.14 do Kubernetes). No entanto, tenha em mente que o pacote kustomize separado é atualizado mais rapidamente do que o integrado ao kubectl (pelo menos, assim é com o lançamento do Kubernetes 1.15).
Os leitores podem perguntar: "Por que todas essas complicações, se posso editar os arquivos diretamente?". Ótima pergunta. No nosso exemplo, realmente é possível modificar arquivos deployment.yaml e service.yaml diretamente, mas e se eles forem um fork de algum projeto? Modificar os arquivos diretamente dificulta (se não impossibilita) o rebase do fork, quando mudanças são feitas na fonte/origem. O uso do kustomize permite centralizar essas alterações em um arquivo kustomization.yaml, mantendo os arquivos originais intocados e, assim, facilitando a necessidade de rebase dos arquivos originais.
As vantagens do kustomize tornam-se evidentes em casos de uso mais complexos. No exemplo acima, kustomization.yaml e os recursos estão no mesmo diretório. No entanto, o kustomize suporta cenários em que há uma configuração base e várias de suas variantes, também conhecidas como Além disso:. Por exemplo, o usuário pode pegar um Deployment e um Service para o nginx, que usei como exemplo, e criar versões (ou variantes) de desenvolvimento, staging e produção desses arquivos. Para isso, ele precisará dos overlays mencionados acima e, de fato, dos próprios recursos base.
Para ilustrar a ideia de overlays e recursos base (base resources), suponha que os diretórios tenham a seguinte estrutura:
- base
- deployment.yaml
- service.yaml
- kustomization.yaml
- overlays
- dev
- kustomization.yaml
- staging
- kustomization.yaml
- prod
- kustomization.yaml No arquivo base/kustomization.yaml os usuários através do campo resources simplesmente declaram os recursos que o kustomize deve incluir.
Em cada um dos arquivos overlays/{dev,staging,prod}/kustomization.yaml os usuários se referem à configuração base no campo resources, e então especificam as mudanças específicas para este ambiente. Por exemplo, o arquivo overlays/dev/kustomization.yaml pode parecer como o exemplo acima:
resources:
- ../../base
namePrefix: dev-
namespace: development
commonLabels:
environment: development Enquanto isso, o arquivo overlays/prod/kustomization.yaml pode ser completamente diferente:
resources:
- ../../base
namePrefix: prod-
namespace: production
commonLabels:
environment: production
sre-team: blue Quando um usuário executa kustomize build . no diretório overlays/dev, o kustomize gerará a variante de desenvolvimento. Se executar kustomize build . no diretório overlays/prod , obterá a variante de produção. E tudo isso — sem fazer nenhuma alteração nos arquivos originais (base) e tudo isso — de uma maneira declarativa e determinística. É possível fazer commit da configuração base e dos diretórios de overlay diretamente no sistema de controle de versão, sabendo que com base nesses arquivos sempre pode-se reproduzir a configuração desejada.

Nota do tradutor.: Ilustração da documentação do projeto sobre o uso de overlays no kustomize
O Kustomize pode muito mais do que é abordado neste artigo. No entanto, espero que ele sirva como uma boa introdução.
Recursos adicionais
Há muitos bons artigos e publicações sobre kustomize. Aqui estão alguns que considerei especialmente úteis:
- ;
- ;
- ;
- .
Nota do tradutor.: Também é possível recomendar um bloco de links, publicados como no site da ferramenta, e a coleção subsequente de vídeos com as últimas palestras sobre kustomize.
Se você tiver dúvidas ou sugestões para melhorar este material, estou sempre aberto a feedback. Você pode entrar em contato comigo no ou para . Divirta-se modificando seus manifests usando o kustomize!
P.S. do tradutor
Confira também em nosso blog:
- «»;
- «»;
- «»;
- «».
Fonte: habr.com
