Utilizzo di Config Sync con Kustomize e Helm

In questo tutorial, aggiungi al repository configurazioni Kustomize che fanno riferimento ai grafici Helm, quindi utilizza Config Sync per sincronizzare il cluster con il repository.

Quando utilizzi Config Sync, le configurazioni Kustomize e i grafici Helm che inserisci nel repository Git vengono sottoposti a rendering automatico. Il rendering automatico offre i seguenti vantaggi:

  • Non hai più bisogno di una pipeline di idratazione esterna. Senza il rendering automatico, devi eseguire manualmente il rendering delle configurazioni utilizzando Kustomize e Helm sulla tua workstation oppure configurare un passaggio per attivare il processo di idratazione nei tuoi sistemi CI. Con il rendering automatico, Config Sync gestisce l'esecuzione.

  • I costi di manutenzione sono ridotti. Senza il rendering automatico, devi gestire un repository Git con le configurazioni Kustomize originali e i grafici Helm e un altro repository Git con l'output generato dall'idratazione esterna. Dopodiché, devi configurare Config Sync per la sincronizzazione dal repository Git con l'output sottoposto a rendering. Con il rendering automatico, devi gestire un solo repository con le configurazioni originali.

  • Il workflow di sviluppo è semplificato. Senza il rendering automatico, le modifiche apportate alle configurazioni originali devono essere esaminate due volte prima di essere unite: una volta nel repository originale e una volta nel repository di cui è stato eseguito il rendering. Con il rendering automatico, le configurazioni sottoposte a rendering vengono generate da Config Sync e devi solo rivedere le modifiche alle configurazioni originali.

Configura il repository

Le seguenti attività mostrano come preparare un repository Git con configurazioni che combinano configurazioni Kustomize con grafici Helm:

  1. Crea un repository Git o assicurati di avere accesso a uno esistente. Poiché il tuo repository utilizza Kustomize e Helm, deve essere un repository non strutturato.

  2. Nella radice del repository Git, crea un file denominato kustomization.yaml e incolla il seguente codice:

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

    Questo file è un overlay Kustomize che punta alla base Kustomize. Questo overlay include una patch per la base del grafico Helm che aggiunge l'annotazione client.lifecycle.config.k8s.io/mutation: ignore a tutti gli oggetti Deployment. L'annotazione fa sì che Config Sync ignori eventuali modifiche in conflitto a questo oggetto nel cluster dopo la sua creazione.

  3. Nel repository Git, crea una directory denominata base:

    mkdir base
    
  4. Nella directory base, crea un altro file denominato kustomization.yaml e incolla il seguente codice:

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

    Questo file è la base Kustomize, che esegue il rendering del grafico Helm remoto.

  5. Torna alla radice del repository Git, crea un file denominato ignore-deployment-mutation-patch.yaml e incolla il seguente codice:

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

    Questo file è una patch che viene applicata al grafico Helm di base. Aggiunge l'annotazione client.lifecycle.config.k8s.io/mutation: ignore a tutti i deployment nella directory di base.

  6. Esegui il commit delle modifiche nel repository:

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

Il repository di esempi contiene un esempio di come potrebbe apparire un repository di questo tipo.

Visualizzare l'anteprima e convalidare le configurazioni sottoposte a rendering

Prima che Config Sync esegua il rendering delle configurazioni e le sincronizzi con il cluster, assicurati che le configurazioni siano accurate eseguendo nomos hydrate per visualizzare l'anteprima della configurazione di cui è stato eseguito il rendering ed eseguendo nomos vet per verificare che il formato sia corretto.

  1. Esegui il seguente comando nomos hydrate con i seguenti flag:

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

    In questo comando:

    • --source-format=unstructured consente a nomos hydrate di funzionare su un repository non strutturato. Poiché utilizzi configurazioni Kustomize e grafici Helm, devi utilizzare un repository non strutturato e aggiungere questo flag.
    • --output=OUTPUT_DIRECTORY consente di definire un percorso per le configurazioni sottoposte a rendering. Sostituisci OUTPUT_DIRECTORY con la posizione in cui vuoi salvare l'output.
  2. Controlla la sintassi e la validità delle configurazioni eseguendo nomos vet con i seguenti flag:

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

    In questo comando:

    • --source-format=unstructured consente a nomos vet di funzionare su un repository non strutturato.
    • --keep-output=true salva le configurazioni sottoposte a rendering.
    • --output=OUTPUT_DIRECTORY è il percorso delle configurazioni renderizzate.

Configurare la sincronizzazione dal repository Git

Ora che hai creato un repository con le configurazioni che vuoi utilizzare, puoi configurare la sincronizzazione dal cluster al repository.

  1. Per configurare l'oggetto RootSync, crea un file 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
    

    Sostituisci YOUR_GIT_REPOSITORY con l'URL del tuo repository Git.

  2. Applica il file root-sync.yaml al tuo cluster:

    kubectl apply -f root-sync.yaml
    

Verificare l'installazione

Dopo aver installato e configurato Config Sync, puoi verificare che l'installazione sia stata completata correttamente.

  1. Verifica che non siano presenti altri errori utilizzando nomos status:

    nomos status
    

    Output di esempio:

    *CLUSTER_NAME
    --------------------
    <root>   https:/github.com/GoogleCloudPlatform/anthos-config-management-samples.git/helm-component/manifests@init
    SYNCED   fd17dd5a
    
  2. Verifica se il componente Helm è stato installato correttamente:

    kubectl get all -n cert-manager
    

    Output di esempio:

    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