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ê vai 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 um teste sem custo financeiro.

Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Para mais informações, consulte Limpeza.

Antes de começar

  1. No console do Google Cloud , na página do seletor de projetos, selecione ou crie um projeto do Google Cloud .

    Funções necessárias para selecionar ou criar um projeto

    • Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
    • Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos (roles/resourcemanager.projectCreator), que contém a permissão resourcemanager.projects.create. Saiba como conceder papéis.

    Acessar o seletor de projetos

  2. Verifique se o faturamento está ativado para o 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.

  1. Para configurar o objeto RootSync, crie um arquivo root-sync.yaml:

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: root-sync
      namespace: config-management-system
    spec:
      sourceFormat: unstructured
      git:
        repo: YOUR_GIT_REPOSITORY
        branch: main
        auth: none
      override:
        enableShellInRendering: true
    

    Substitua YOUR_GIT_REPOSITORY pelo URL do seu repositório Git.

  2. Aplique o arquivo root-sync.yaml ao cluster:

    kubectl apply -f root-sync.yaml
    

Verifique 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
    

Limpar

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.

Excluir o projeto

  1. No console Google Cloud , acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

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 Google Cloud console, conclua as tarefas a seguir:

  1. No console do Google Cloud , acesse a página do 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