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.

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