Use o Config Sync com o Kustomize e o Helm

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

Quando usa a sincronização de configuração, as configurações do Kustomize e os gráficos do Helm que coloca no seu repositório Git são renderizados automaticamente. A renderização automática oferece-lhe as seguintes vantagens:

  • Já não precisa de um pipeline de hidratação externo. Sem a renderização automática, tem de renderizar manualmente as configurações com o Kustomize e o Helm na sua estação de trabalho ou configurar um passo para acionar o processo de hidratação nos seus sistemas de CI. Com a renderização automática, o Config Sync processa a execução.

  • Os seus custos de manutenção são reduzidos. Sem a renderização automatizada, tem de manter um repositório Git com as configurações originais do Kustomize e os gráficos Helm, e outro repositório Git com o resultado gerado pela hidratação externa. Em seguida, tem de configurar o Config Sync para sincronizar a partir do repositório Git com o resultado renderizado. Com a renderização automatizada, só tem de manter um repositório com as configurações originais.

  • O seu fluxo de trabalho de desenvolvimento é simplificado. Sem a renderização automática, as alterações feitas às configurações originais têm de ser revistas duas vezes antes de serem unidas: uma vez no repositório original e outra vez no repositório renderizado. Com a renderização automatizada, as configurações renderizadas são geradas pelo Config Sync, e só tem de rever as alterações às configurações originais.

Objetivos

  • Configure o seu repositório com configurações do Kustomize que referenciam um gráfico Helm disponível para o cert-manager. O cert-manager é uma ferramenta para o Kubernetes que ajuda a gerir os seus certificados.
  • Pré-visualize e valide as configurações que criar.
  • Use a sincronização de configuração para renderizar automaticamente o seu gráfico e sincronizar o seu cluster com o repositório.
  • Verifique se a instalação foi bem-sucedida.

Custos

Neste documento, usa os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custos com base na sua utilização projetada, use a calculadora de preços.

Os novos Google Cloud utilizadores podem ser elegíveis para uma avaliação gratuita.

Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.

Antes de começar

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. Crie ou certifique-se de que tem acesso a um cluster que cumpre os requisitos do Config Sync e usa as seguintes definições do Config Sync:
  4. Registe o seu cluster numa frota.
  5. Instale a nomosferramenta de linha de comandos. Se já instalou a ferramenta nomos, certifique-se de que a atualiza para a versão 1.9.0 ou posterior.
  6. Instale o Helm.

Também é útil ter alguma familiaridade com o Git, o Kustomize e o Helm.

Configure o seu repositório

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

  1. Crie ou certifique-se de que tem acesso a um repositório Git. Uma vez que o seu repositório usa o Kustomize e o Helm, deve ser um repositório não estruturado.

  2. Na raiz do seu repositório Git, crie um ficheiro com o nome kustomization.yaml e cole o seguinte código no mesmo:

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

    Este ficheiro é uma sobreposição do Kustomize que aponta para a base do Kustomize. Esta sobreposição inclui uma correção para a base do gráfico Helm que adiciona a anotação client.lifecycle.config.k8s.io/mutation: ignore a todos os objetos de implementação. A anotação faz com que o Config Sync ignore quaisquer alterações em conflito a este objeto no cluster depois de o ter criado.

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

    mkdir base
    
  4. No diretório base, crie outro ficheiro denominado kustomization.yaml e cole o seguinte código no mesmo:

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

    Este ficheiro é a base do Kustomize, que renderiza o gráfico Helm remoto.

  5. Navegue novamente para a raiz do seu repositório Git, crie um ficheiro com o nome ignore-deployment-mutation-patch.yaml e cole o seguinte código no mesmo:

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

    Este ficheiro é um patch que é aplicado ao gráfico Helm base. Adiciona a anotação client.lifecycle.config.k8s.io/mutation: ignore a todas as implementações no diretório base.

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

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

O repositório de exemplos tem um exemplo de como seria um repositório deste tipo.

Pré-visualize e valide as configurações renderizadas

Antes de o Config Sync renderizar as configurações e sincronizá-las com o cluster, certifique-se de que as configurações estão corretas executando nomos hydrate para pré-visualizar a configuração renderizada e executando nomos vet para validar se o formato está correto.

  1. Execute o seguinte comando nomos hydrate com as seguintes flags:

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

    Neste comando:

    • --source-format=unstructured permite que nomos hydrate funcione num repositório não estruturado. Uma vez que está a usar configurações do Kustomize e gráficos do Helm, tem de usar um repositório não estruturado e adicionar este sinalizador.
    • --output=OUTPUT_DIRECTORY permite-lhe definir um caminho para as configurações renderizadas. Substitua OUTPUT_DIRECTORY pela localização onde quer guardar o resultado.
  2. Verifique a sintaxe e a validade das suas configurações executando nomos vet com os seguintes flags:

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

    Neste comando:

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

Configure a sincronização a partir do repositório Git

Agora que criou um repositório com as configurações que quer usar, pode configurar a sincronização do cluster com o repositório.

  1. Para configurar o objeto RootSync, crie um ficheiro 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 ficheiro root-sync.yaml ao cluster:

    kubectl apply -f root-sync.yaml
    

Valide a instalação

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

  1. Verifique se existem outros erros através de 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 está instalado com êxito:

    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 incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.

Elimine 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.

Elimine recursos individuais

Elimine os manifestos no seu repositório

Para ajudar a evitar a eliminação acidental, o Config Sync não permite remover todos os espaços de nomes nem recursos com âmbito de cluster num único commit. Siga estas instruções para desinstalar corretamente o componente e remover o espaço de nomes em commits separados:

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

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

    Substitua BRANCH pelo ramo no qual criou o seu repositório.

  2. Elimine o espaço de nomes do 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 espaço de nomes cert-manager não existe:

    kubectl get namespace cert-namespace
    

    Exemplo de saída:

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

Elimine o cluster

Para eliminar o cluster, conclua os seguintes comandos:

Consola

Para eliminar um cluster através da consola Google Cloud , conclua as seguintes tarefas:

  1. Na Google Cloud consola, aceda à página do GKE.

    Aceda ao GKE

  2. Junto ao cluster que quer eliminar, clique em Ações e, de seguida, em Eliminar.

  3. Quando lhe for pedido que confirme, clique novamente em Eliminar.

gcloud

Para eliminar um cluster através da CLI Google Cloud, execute o seguinte comando:

gcloud container clusters delete CLUSTER_NAME

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

O que se segue?