Utilizzo di Config Sync con Kustomize e Helm

Scopri come utilizzare Config Sync per installare un componente Helm pronto all'uso.

In questo tutorial, aggiungerai configurazioni Kustomize che fanno riferimento ai grafici Helm al tuo repository e quindi utilizzerai Config Sync per sincronizzare il cluster con il repository.

Quando utilizzi Config Sync, viene eseguito automaticamente il rendering delle configurazioni Kustomize e dei grafici Helm che inserisci nel repository Git. 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 impostare 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 stati ridotti. Senza il rendering automatico, devi gestire un repository Git con le configurazioni originali di Kustomize e i grafici Helm e un altro repository Git con l'output generato dall'idratazione esterna. Poi devi configurare Config Sync per la sincronizzazione dal repository Git con l'output sottoposto a rendering. Con il rendering automatico, devi mantenere un solo repository con le configurazioni originali.

  • Il flusso di lavoro per lo sviluppo è stato semplificato. Senza il rendering automatico, le modifiche apportate alle configurazioni originali devono essere riviste due volte prima di essere unite: una nel repository originale e di nuovo nel repository sottoposto a rendering. Con il rendering automatico, le configurazioni sottoposte a rendering vengono generate da Config Sync e devi solo esaminare le modifiche apportate alle configurazioni originali.

Obiettivi

  • Configura il tuo repository con configurazioni Kustomize che fanno riferimento a un grafico Helm pronto all'uso per cert-manager. cert-manager è uno strumento per Kubernetes che ti aiuta a gestire i tuoi certificati.
  • Visualizza l'anteprima e convalida le configurazioni che crei.
  • Utilizza Config Sync per eseguire automaticamente il rendering del grafico e sincronizzare il cluster con il repository.
  • Verifica che l'installazione sia riuscita.

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono essere idonei a una prova senza costi aggiuntivi.

Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.

Prima di iniziare

  1. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  2. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  3. Crea, o assicurati di disporre dell'accesso, un cluster che soddisfi i requisiti per Config Sync e che utilizzi le seguenti impostazioni di Config Sync:
  4. Registra il cluster in un parco risorse.
  5. Installa lo strumento a riga di comando nomos. Se hai già installato lo strumento nomos, assicurati di eseguirne l'upgrade alla versione 1.9.0 o successiva.
  6. Installa Helm.

Inoltre, è utile avere un po' di familiarità con Git, Kustomize e Helm.

Configura il repository

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

  1. Crea un repository Git o assicurati di avere accesso. Poiché il repository utilizza Kustomize e Helm, dovrebbe essere un repository non strutturato.

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

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

    Questo file è un overlay Kustomize che rimanda alla base di 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 tuo repository Git, crea una directory denominata base:

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

    # ./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 di Kustomize, che esegue il rendering del grafico Helm remoto.

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

    # ./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 Samples offre un esempio dell'aspetto che potrebbe avere.

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 siano accurate eseguendo nomos hydrate per visualizzare l'anteprima della configurazione sottoposta a rendering ed eseguendo nomos vet per verificare che il formato sia corretto.

  1. Esegui 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 lavorare 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 delle configurazioni sottoposte a rendering. Sostituisci OUTPUT_DIRECTORY con la posizione in cui vuoi salvare l'output.
  2. Controlla la sintassi e la validità delle tue 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 lavorare su un repository non strutturato.
    • --keep-output=true salva le configurazioni di cui è stato eseguito il rendering.
    • --output=OUTPUT_DIRECTORY è il percorso delle configurazioni sottoposte a rendering.

Configura 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. Se hai già installato Config Sync, vai a Verificare lo stato di sincronizzazione.

  1. Nella console Google Cloud, abilita l'API GKE Hub.

    Vai all'API GKE Hub

  2. Nella console Google Cloud, vai alla pagina Configurazione nella sezione Funzionalità.

    Vai a Configurazione

  3. Fai clic su Installa Config Sync.

  4. Seleziona Upgrade automatici per consentire a Config Sync di eseguire automaticamente l'upgrade delle versioni.

  5. In Opzioni di installazione, seleziona Installa Config Sync su singoli cluster.

  6. Nella tabella Cluster disponibili, seleziona cs-cluster e fai clic su Installa Config Sync. Nella scheda Impostazioni, dopo alcuni minuti dovresti visualizzare lo stato Attivato per cs-cluster.

  7. Nella dashboard di Config Sync, fai clic su Esegui il deployment del pacchetto.

  8. Nella tabella Seleziona i cluster per il deployment dei pacchetti, seleziona cs-cluster e fai clic su Continua.

  9. Lascia selezionata l'opzione Pacchetto ospitato su Git e fai clic su Continua.

  10. Nel campo Nome pacchetto, inserisci sample-repository.

  11. Nel campo URL repository, inserisci https://github.com/GoogleCloudPlatform/anthos-config-management-samples.

  12. Nel campo Percorso, inserisci config-sync-quickstart/multirepo/root.

  13. Lascia invariati i valori predefiniti di tutti gli altri campi.

  14. Fai clic su Esegui il deployment del pacchetto.

    Dopo alcuni minuti, dovrebbe essere visualizzato Sincronizzato nella colonna Stato sincronizzazione per cs-cluster.

Verifica 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 che il componente Helm sia 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
    

Esegui la pulizia

Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Elimina singole risorse

Elimina i manifest nel tuo repository

Per evitare l'eliminazione accidentale, Config Sync non consente di rimuovere tutti gli spazi dei nomi o le risorse con ambito cluster in un singolo commit. Segui queste istruzioni per disinstallare agevolmente il componente e rimuovere lo spazio dei nomi in commit separati:

  1. Rimuovi il componente cert-manager dal repository:

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

    Sostituisci BRANCH con il ramo in cui hai creato il repository.

  2. Elimina lo spazio dei nomi cert-manager:

    git rm manifests/namespace-cert-manager.yaml \
        && git commit -m "remove the cert-manager namespace" \
        && git push origin BRANCH
    
  3. Verifica che lo spazio dei nomi cert-manager non esista:

    kubectl get namespace cert-namespace
    

    Output di esempio:

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

Elimina il cluster

Per eliminare il cluster, completa questi comandi:

Console

Per eliminare un cluster utilizzando la console Google Cloud, completa le seguenti attività:

  1. Nella console Google Cloud, vai alla pagina GKE.

    Vai a GKE

  2. Accanto al cluster che vuoi eliminare, fai clic su Azioni e poi su Elimina.

  3. Quando ti viene chiesto di confermare, fai di nuovo clic su Elimina.

gcloud

Per eliminare un cluster utilizzando Google Cloud CLI, esegui questo comando:

gcloud container clusters delete CLUSTER_NAME

Per saperne di più, consulta la documentazione di gcloud container clusters delete.

Passaggi successivi