Usar o Config Sync com o Kustomize e o Helm


Neste tutorial, você adicionará configurações do Kustomize que fazem referência a gráficos do Helm ao seu repositório e, em seguida, usará o Config Sync para sincronizar seu cluster com seu repositório.

Quando você usa o Config Sync, as configurações do Kustomize e os gráficos Helm colocados no repositório Git são renderizados automaticamente. A renderização automática oferece os seguintes benefícios:

  • Você não precisa mais de um pipeline de hidratação externo. Sem a renderização automatizada, é preciso renderizar manualmente as configurações usando o Kustomize e o Helm na estação de trabalho ou configurar uma etapa para acionar o processo de hidratação nos sistemas de CI. Com a renderização automática, o Config Sync processa a execução.

  • Os custos de manutenção serão reduzidos. Sem a renderização automatizada, é preciso manter um repositório Git com as configurações originais do Kustomize e os gráficos Helm e outro repositório Git com a saída gerada pela hidratação externa. Em seguida, configure o Config Sync para sincronizar do repositório Git com a saída renderizada. Com a renderização automatizada, você só precisa manter um repositório com os configs originais.

  • Seu fluxo de trabalho de desenvolvimento foi simplificado. Sem a renderização automatizada, as alterações feitas nas configurações originais precisam ser revisadas duas vezes antes de serem mescladas. uma vez no repositório original e novamente no repositório renderizado. Com a renderização automatizada, os configs renderizados são gerados pelo Config Sync, e você só precisa revisar as alterações nos configs originais.

Objetivos

  • Configure seu repositório com configurações do Kustomize que fazem referência a um gráfico Helm pronto para uso do cert-manager. O cert-manager é uma ferramenta para Kubernetes que ajuda a gerenciar seus certificados.
  • Visualize e valide os configs que você criar.
  • Use o Config Sync para renderizar automaticamente o gráfico e sincronizar o cluster com o repositório.
  • Verifique se a instalação foi concluída.

Custos

Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.

Antes de começar

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  3. Crie ou garanta que você tenha acesso a um cluster que atenda aos requisitos do Config Sync e use as seguintes configurações do Config Sync:
  4. Registre o cluster em uma frota.
  5. Instale a ferramenta nomos de linha de comando . Se você já instalou a ferramenta nomos, atualize-a para a versão 1.9.0 ou mais recente.
  6. Instale o Helm.

Também é importante ter familiaridade com o Git, o Kustomize e o Helm.

Configurar seu repositório

As tarefas a seguir mostram como preparar um repositório Git com configs que combinam configurações do Kustomize com gráficos do Helm:

  1. Crie um repositório Git ou verifique se você tem acesso a ele. Como o seu repositório usa Kustomize e Helm, ele deve ser um repositório não estruturado.

  2. Na raiz do repositório Git, crie um arquivo chamado kustomization.yaml e cole o código a seguir nele:

    # ./kustomization.yaml
    resources:
    - base
    
    patches:
    - path: ignore-deployment-mutation-patch.yaml
      target:
        kind: Deployment
    

    Esse arquivo é uma sobreposição do Kustomize que aponta para a base do Kustomize. Essa sobreposição inclui um patch para a base do gráfico Helm que adiciona a anotação client.lifecycle.config.k8s.io/mutation: ignore a todos os objetos de implantação. A anotação faz com que o Config Sync ignore qualquer alteração conflitante desse objeto no cluster depois que ele tiver sido criado.

  3. No repositório Git, crie um diretório chamado base:

    mkdir base
    
  4. No diretório base, crie outro arquivo chamado kustomization.yaml e cole o seguinte código nele:

    # ./base/kustomization.yaml
    helmCharts:
    - name: cert-manager
      repo: https://charts.jetstack.io
      version: v1.5.3
      releaseName: my-cert-manager
      namespace: cert-manager
    

    Esse arquivo é a base do Kustomize, que renderiza o gráfico remoto do Helm.

  5. Volte à raiz do repositório Git, crie um arquivo chamado ignore-deployment-mutation-patch.yaml e cole o código a seguir nele:

    # ./ignore-deployment-mutation-patch.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
     name: any
     annotations:
       client.lifecycle.config.k8s.io/mutation: ignore
    

    Esse arquivo é um patch que é aplicado ao gráfico base do Helm. Ele adiciona a anotação client.lifecycle.config.k8s.io/mutation: ignore a todas as implantações no diretório base.

  6. Confirme as alterações no repositório:

    git add .
    git commit -m 'Set up manifests.'
    git push
    

O repositório de amostras tem um exemplo de como esse repositório seria.

Visualizar e validar configurações renderizadas

Antes de o Config Sync renderizar os configs e sincronizá-los com o cluster, verifique se os configs estão corretos. Para isso, execute nomos hydrate para visualizar a configuração renderizada e execute nomos vet para confirmar que o formato está correto.

  1. Execute o seguinte nomos hydrate com as seguintes sinalizações:

    nomos hydrate \
        --source-format=unstructured \
        --output=OUTPUT_DIRECTORY
    

    Nesse comando:

    • --source-format=unstructured permite que nomos hydrate funcione em um repositório não estruturado. Como você está usando configurações do Kustomize e gráficos do Helm, use um repositório não estruturado e adicione essa sinalização.
    • --output=OUTPUT_DIRECTORY permite definir um caminho para os configs renderizados. Substitua OUTPUT_DIRECTORY pelo local em que você quer que a saída seja salva.
  2. Verifique a sintaxe e a validade das configurações executando nomos vet com as sinalizações a seguir:

    nomos vet \
        --source-format=unstructured \
        --keep-output=true \
        --output=OUTPUT_DIRECTORY
    

    Nesse comando:

    • --source-format=unstructured permite que nomos vet funcione em um repositório não estruturado.
    • --keep-output=true salva as configurações renderizadas.
    • --output=OUTPUT_DIRECTORY é o caminho para as configurações renderizadas.

Configurar a sincronização do repositório do Git

Agora que você criou um repositório com as configurações que quer usar, configure a sincronização no cluster para o repositório. Se você já instalou o Config Sync, prossiga para Verificar o status da sincronização.

  1. No console do Google Cloud, ative a API GKE Hub.

    Acessar a API GKE Hub

  2. No console do Google Cloud, acesse a página Configuração na seção Recursos.

    Acessar a configuração

  3. Clique em Instalar o Config Sync.

  4. Selecione Upgrades automáticos para ativar o Config Sync para fazer upgrade das versões automaticamente.

  5. Em Opções de instalação, selecione Instalar o Config Sync em clusters individuais.

  6. Na tabela Clusters disponíveis, selecione cs-cluster e clique em Instalar Config Sync. Na guia Configurações, você verá o status do cs-cluster como Ativado após alguns minutos.

  7. No painel Config Sync, clique em Implantar pacote.

  8. Na tabela Selecionar clusters para implantação do pacote, selecione cs-cluster e clique em Continuar.

  9. Deixe a opção Pacote hospedado no Git selecionada e clique em Continuar.

  10. No campo Package name, insira sample-repository.

  11. No campo URL do repositório, insira https://github.com/GoogleCloudPlatform/anthos-config-management-samples.

  12. No campo Caminho, digite config-sync-quickstart/multirepo/root.

  13. Não mude os valores padrão dos outros campos.

  14. Clique em Implantar pacote.

    Após alguns minutos, você verá a opção Sincronizado na coluna Status de sincronização da cs-cluster.

Verificar a instalação

Depois de instalar e configurar o Config Sync, verifique se a instalação foi concluída com êxito.

  1. Verifique se não há outros erros usando nomos status:

    nomos status
    

    Exemplo de saída:

    *CLUSTER_NAME
    --------------------
    <root>   https:/github.com/GoogleCloudPlatform/anthos-config-management-samples.git/helm-component/manifests@init
    SYNCED   fd17dd5a
    
  2. Verifique se o componente Helm foi instalado:

    kubectl get all -n cert-manager
    

    Exemplo de saída:

    NAME                                              READY   STATUS    RESTARTS   AGE
    pod/my-cert-manager-54f5ccf74-wfzs4               1/1     Running   0          10m
    pod/my-cert-manager-cainjector-574bc8678c-rh7mq   1/1     Running   0          10m
    pod/my-cert-manager-webhook-7454f4c77d-rkct8      1/1     Running   0          10m
    
    NAME                              TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
    service/my-cert-manager           ClusterIP   10.76.9.35     <none>        9402/TCP   10m
    service/my-cert-manager-webhook   ClusterIP   10.76.11.205   <none>        443/TCP    10m
    
    NAME                                         READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/my-cert-manager              1/1     1            1           10m
    deployment.apps/my-cert-manager-cainjector   1/1     1            1           10m
    deployment.apps/my-cert-manager-webhook      1/1     1            1           10m
    
    NAME                                                    DESIRED   CURRENT   READY   AGE
    replicaset.apps/my-cert-manager-54f5ccf74               1         1         1       10m
    replicaset.apps/my-cert-manager-cainjector-574bc8678c   1         1         1       10m
    replicaset.apps/my-cert-manager-webhook-7454f4c77d      1         1         1       10m
    

Limpeza

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

Exclua o projeto

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Excluir recursos individuais

Exclua os manifestos no repositório

Para evitar a exclusão acidental, o Config Sync não permite a remoção de todos os namespaces ou recursos com escopo de cluster em uma única confirmação. Siga estas instruções para desinstalar o componente de maneira prática e remover o namespace em confirmações separadas:

  1. Remova o componente cert-manager do repositório:

    git rm -rf manifests/cert-manager \
        && git commit -m "uninstall cert-manager" \
        && git push origin BRANCH
    

    Substitua BRANCH pela ramificação em que você criou o repositório.

  2. Exclua o namespace cert-manager:

    git rm manifests/namespace-cert-manager.yaml \
        && git commit -m "remove the cert-manager namespace" \
        && git push origin BRANCH
    
  3. Verifique se o namespace cert-manager não existe:

    kubectl get namespace cert-namespace
    

    Exemplo de saída:

    Error from server (NotFound): namespaces "cert-namespace" not found
    

Excluir o cluster

Para excluir o cluster, conclua os seguintes comandos:

Console

Para excluir um cluster usando o console do Google Cloud, conclua as tarefas a seguir:

  1. No console do Google Cloud, abra a página GKE.

    Acessar o GKE

  2. Ao lado do cluster que você quer excluir, clique em Ações e depois em Excluir.

  3. Quando solicitado a confirmar, clique em Excluir novamente.

gcloud

Para excluir um cluster usando a Google Cloud CLI, execute este comando:

gcloud container clusters delete CLUSTER_NAME

Para mais informações, consulte a documentação gcloud container clusters delete.

A seguir