Como usar o Config Sync com Kustomize e Helm

Saiba como usar o Config Sync para instalar um componente Helm pronto para uso.

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.

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 tutorial, usamos 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 este tutorial, exclua os recursos criados para evitar o faturamento contínuo. Para mais informações, consulte Como fazer a limpeza.

Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

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.

    Acessar o seletor de projetos

  2. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  3. Crie ou verifique se você tem acesso a um cluster que atenda aos requisitos do Config Sync e tenha uma versão 1.9.0 ou posterior.
  4. Registre o cluster em uma frota.
  5. Instale o comando nomos. Se você já instalou o nomos, atualize-o para a versão 1.9.0 ou posterior.
  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 Kustoize. 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 do Anthos Config Management 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.

Como configurar a sincronização no repositório 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.

Console

Para configurar a sincronização no Console do Google Cloud, conclua as seguintes tarefas:

  1. No Console do Google Cloud, acesse a página Anthos Config Management.

    Acessar o Anthos Config Management

  2. Selecione o cluster e clique em Configurar.

  3. Na lista suspensa Autenticação de repositório do Git para ACM, selecione um tipo de autenticação.

  4. Siga as instruções no Console do Google Cloud para conceder acesso somente leitura do Config Sync ao Git e clique em Continuar.

  5. Na seção Configurações do ACM para os clusters, faça o seguinte:

    1. No campo Versão, selecione uma versão.
    2. Marque a caixa de seleção Ativar Config Sync.
    3. Na lista suspensa exibida, faça o seguinte:

      1. No campo URL, adicione o URL do repositório Git. É possível inserir URLs usando o protocolo HTTPS ou SSH. Por exemplo, https://github.com/GoogleCloudPlatform/anthos-config-management-samples/ usa o protocolo HTTPS. Se você não inserir um protocolo, o URL será tratado como um URL HTTPS.
      2. (Opcional): no campo Ramificação, adicione a ramificação do repositório no qual sincronizar. A ramificação padrão é master.
      3. (Opcional): no campo Tag/Confirmação, adicione a revisão do Git (tag ou hash) para finalizar. O padrão é HEAD.
      4. (Opcional): no campo Diretório de políticas, adicione o caminho dentro do repositório no topo da hierarquia de políticas para sincronizar. O padrão é o diretório raiz do repositório.
      5. (Opcional): no campo Espera de sincronização, adicione o período em segundos entre as sincronizações consecutivas. O padrão é 15 segundos.
      6. (Opcional): no campo Proxy Git, insira o URL do proxy HTTPS a ser usado na comunicação com o repositório Git. Este é um campo opcional e, se ficar em branco, não será usado nenhum proxy.
      7. Na lista suspensa Formato de origem, selecione não estruturado. Como seu repositório está usando o Helm, é necessário usar um repositório não estruturado.
  6. Clique em Concluído. Você será redirecionado ao menu do Anthos Config Management.

gcloud

Para configurar a sincronização usando a ferramenta de linha de comando gcloud, conclua as seguintes tarefas:

  1. Crie um arquivo chamado apply-spec.yaml e copie o arquivo YAML a seguir nele.

    # apply-spec.yaml
    
    applySpecVersion: 1
    spec:
      configSync:
        enabled: true
        # Since your repository is using Helm, you need to use an unstructured repository.
        sourceFormat: unstructured
        syncRepo: REPO
        syncBranch: BRANCH
        secretType: TYPE
        policyDir: "DIRECTORY"
    

    Substitua:

    • REPO: adicione o URL do repositório Git. É possível inserir URLs usando o protocolo HTTPS ou SSH. Por exemplo, https://github.com/GoogleCloudPlatform/anthos-config-management-samples/ usa o protocolo HTTPS. Se você não inserir um protocolo, o URL será tratado como um URL HTTPS.
    • BRANCH: a ramificação do repositório com que sincronizar. A ramificação padrão é master.
    • TYPE: uma das seguintes opções SecretTypes:

      • none
      • ssh
      • cookiefile
      • token
      • gcenode

      Se você adicionou um secretType diferente de none, conceda acesso do Config Sync ao repositório Git.

    • DIRECTORY: o caminho no repositório Git ao diretório raiz que contém a configuração que você quer sincronizar. O padrão é o diretório raiz do repositório.

    Por exemplo, o arquivo apply-spec.yaml a seguir é sincronizado com as configurações no diretório helm-component/manifests do repositório de amostras do Anthos Config Management:

    # apply-spec.yaml
    
    applySpecVersion: 1
    spec:
      configSync:
        enabled: true
        sourceFormat: unstructured
        syncRepo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
        syncBranch: main
        secretType: none
        policyDir: helm-component/manifests
    
  2. Aplique o arquivo apply-spec.yaml:

     gcloud alpha container hub config-management apply \
         --membership=MEMBERSHIP_NAME \
         --config=CONFIG_YAML_PATH \
         --project=PROJECT_ID
    

    Substitua:

    • MEMBERSHIP_NAME: o nome da assinatura que você escolheu quando registrou o cluster. Se você registrou o cluster usando o Console do Google Cloud, o nome da assinatura é o mesmo nome do cluster.
    • CONFIG_YAML_PATH: o caminho para o arquivo apply-spec.yaml
    • PROJECT_ID: ID do projeto

Como 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 a instalação está sincronizada:

    Console

    1. No Console do Cloud, acesse a página Anthos Config Management.

      Acessar o Anthos Config Management

    2. Veja a coluna Status. Uma instalação bem-sucedida tem um status de Sincronizado.

    gcloud

    Execute este comando:

    gcloud alpha container hub config-management status \
        --project=PROJECT_ID
    

    Substitua PROJECT_ID pelo ID do projeto.

    Uma instalação bem-sucedida tem um status de SYNCED.

  2. 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
    
  3. 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. No Console do 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 Console do Cloud, conclua as tarefas a seguir:

  1. No Console do 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 ferramenta de linha de comando gcloud, execute o comando a seguir:

gcloud container clusters delete CLUSTER_NAME

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

A seguir