Nota perev. : O artigo foi escrito por Scott Lowe, um engenheiro de TI sênior que foi o autor / co-autor de sete livros impressos (principalmente para o VMware vSphere). Atualmente, ele trabalha na subsidiária da VMware, Heptio (adquirida em 2016), especializada em computação em nuvem e Kubernetes. O próprio texto serve como uma introdução ampla e fácil de entender ao gerenciamento de configurações do Kubernetes usando a tecnologia Kustomize , incluída recentemente no K8s.
O Kustomize é uma ferramenta que permite aos usuários "personalizar arquivos YAML simples e sem modelos para vários propósitos, deixando o YAML original intacto e utilizável" (a descrição é emprestada diretamente do 
repositório kustomize no GitHub ). O Kustomize pode ser executado diretamente ou, começando no Kubernetes 1.14, use o 
kubectl -k para acessar suas funções (embora, a partir do Kubernetes 1.15, um binário separado seja mais novo que os recursos incorporados no kubectl). 
( Nota : Com a versão recente do Kubernetes 1.16 , o kustomize também é suportado no utilitário kubeadm.) Nesta publicação, quero apresentar aos leitores os conceitos básicos do kustomize. 
Em sua forma / aplicativo mais simples, o kustomize é simplesmente uma coleção de recursos (arquivos YAML que definem objetos do Kubernetes: Implantações, Serviços etc.), além de uma lista de instruções sobre as alterações que precisam ser feitas nesses recursos. Assim como o make usa o conjunto de instruções contido no 
Makefile e o Docker 
Dockerfile contêiner com base nas instruções do 
Dockerfile , o kustomize usa o 
kustomization.yaml para armazenar instruções sobre as alterações que 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 (isso está bem escrito 
aqui ), mas darei uma breve explicação de um exemplo específico:
- O campo de resourcesindica o que (quais recursos) personalizar irá mudar. Nesse caso, ele procurará recursos nos arquivosdeployment.yamleservice.yamlem seu diretório (se necessário, você poderá especificar caminhos completos ou relativos).
- O campo namePrefixinstrui o kustomize a adicionar um prefixo específico (neste caso,dev-) ao atributonamede todos os recursos definidos no campo deresources. Portanto, se houver umnameem Deployment com o valornginx-deployment, o kustomize fará com que odev-nginx-deployment.
- O campo de namespaceinstrui o kustomize a adicionar o espaço para nome especificado a todos os recursos. Nesse caso, o Deployment and Service cairá no namespace dedevelopment.
- Por fim, o campo commonLabelscontém um conjunto de rótulos que serão adicionados a todos os recursos. Em nosso exemplo, o kustomize atribuirá um rótulo aos recursos com oenvironmentnome e odevelopmentvalor.
Se o usuário executar o 
kustomize build . no diretório com o arquivo 
kustomization.yaml e os recursos necessários (ou seja, arquivos 
deployment.yaml e 
service.yaml ), ele receberá o texto com as alterações registradas em 
kustomization.yaml como 
kustomization.yaml .
 Nota perev. : Ilustração da documentação do projeto para o uso "simples" de kustomize
Nota perev. : Ilustração da documentação do projeto para o uso "simples" de kustomizeA saída pode ser redirecionada se você precisar confirmar as alterações:
 kustomize build . > custom-config.yaml 
A saída é determinística (com a mesma entrada, a mesma saída será obtida), portanto, você não pode salvar o resultado em um arquivo. Em vez disso, você pode passá-lo imediatamente para outro comando:
 kustomize build . | kubectl apply -f - 
As funções Kustomize também podem ser acessadas via 
kubectl -k (desde a versão 1.14 do Kubernetes). No entanto, lembre-se de que um pacote kustomize separado é atualizado mais rapidamente do que um pacote integrado no kubectl (pelo menos esse é o caso da versão do Kubernetes 1.15).
Os leitores podem perguntar: "Por que todas essas dificuldades, se você pode editar arquivos diretamente?". Ótima pergunta. No nosso exemplo, é realmente 
possível modificar os arquivos 
deployment.yaml e 
service.yaml diretamente, mas e se eles forem um fork do projeto de outra pessoa? A alteração direta de arquivos dificulta (se não é de todo impossível) reorganizar a bifurcação quando são feitas alterações na fonte / fonte. O uso do kustomize permite centralizar essas alterações no arquivo 
kustomization.yaml , deixando os arquivos originais intactos e facilitando a recuperação dos arquivos de origem, se necessário.
Os benefícios do kustomize se tornam aparentes em casos de uso mais complexos. No exemplo acima, 
kustomization.yaml e recursos estão no mesmo diretório. No entanto, o kustomize suporta cenários de uso quando há uma configuração básica e muitas de suas variantes, também conhecidas como 
sobreposições . Por exemplo, um usuário queria usar o Deployment and Service para nginx, que eu usei como exemplo, e criar versões de desenvolvimento, preparo e produção (ou variantes) desses arquivos. Para fazer isso, ele precisará das sobreposições mencionadas acima e, de fato, dos próprios recursos básicos.
Para ilustrar a idéia de sobreposições e 
recursos básicos , 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 
base/kustomization.yaml usuários simplesmente usam o campo de 
resources para declarar os recursos que o kustomize deve ativar.
Em cada um dos 
overlays/{dev,staging,prod}/kustomization.yaml de 
overlays/{dev,staging,prod}/kustomization.yaml usuários se referem à configuração básica no campo de 
resources e indicam as alterações específicas para 
esse ambiente . Por exemplo, o 
overlays/dev/kustomization.yaml pode se parecer com o exemplo fornecido anteriormente:
 resources: - ../../base namePrefix: dev- namespace: development commonLabels: environment: development 
Ao mesmo tempo, o 
overlays/prod/kustomization.yaml pode ser completamente diferente:
 resources: - ../../base namePrefix: prod- namespace: production commonLabels: environment: production sre-team: blue 
Quando o usuário inicia, personalize a 
kustomize build . no 
overlays/dev , o kustomize irá gerar uma opção de desenvolvimento. Se você executar o 
kustomize build . no diretório 
overlays/prod - você obtém a opção de produção. E tudo isso - sem fazer nenhuma alteração nos arquivos originais 
(base) , e tudo isso - de maneira declarativa e determinística. Você pode confirmar os diretórios básicos de configuração e sobreposição diretamente no sistema de controle de versão, sabendo que, com base nesses arquivos, é possível reproduzir a configuração desejada a qualquer momento.
 Nota perev. : Ilustração da documentação do projeto para usar sobreposições no kustomize
Nota perev. : Ilustração da documentação do projeto para usar sobreposições no kustomizeO Kustomize pode fazer 
muito mais do que o descrito neste artigo. No entanto, espero que sirva como uma boa introdução.
Recursos Adicionais
Existem muitos bons artigos e publicações sobre o kustomize. Aqui estão alguns que eu achei particularmente úteis:
Nota perev. : Você também pode aconselhar o bloco de links publicados como Recursos no site do utilitário e a coleção subseqüente de vídeos com os relatórios mais recentes sobre o kustomize.Se você tiver dúvidas ou sugestões para melhorar este material, estou sempre aberto a comentários. Você pode entrar em contato comigo no 
Twitter ou no 
canal Kubernetes Slack . Divirta-se modificando seus manifestos com o kustomize!
PS do tradutor
Leia também em nosso blog: