Uma breve introdução ao Kustomize

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 resources indica o que (quais recursos) personalizar irá mudar. Nesse caso, ele procurará recursos nos arquivos deployment.yaml e service.yaml em seu diretório (se necessário, você poderá especificar caminhos completos ou relativos).
  • O campo namePrefix instrui o kustomize a adicionar um prefixo específico (neste caso, dev- ) ao atributo name de todos os recursos definidos no campo de resources . Portanto, se houver um name em Deployment com o valor nginx-deployment , o kustomize fará com que o dev-nginx-deployment .
  • O campo de namespace instrui o kustomize a adicionar o espaço para nome especificado a todos os recursos. Nesse caso, o Deployment and Service cairá no namespace de development .
  • Por fim, o campo commonLabels conté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 o environment nome e o development valor.

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

A 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

O 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:

Source: https://habr.com/ru/post/pt469179/


All Articles