Utilizzo di Config Sync in più ambienti con rendering automatico

Questo tutorial mostra come configurare Config Sync per Google Kubernetes Engine (GKE) in due ambienti, uno per lo sviluppo e l'altro per la produzione, utilizzando le best practice per Anthos Config Management.

In questo scenario, fai parte del team di amministrazione della piattaforma di Foo Corp. Le applicazioni Foo Corp vengono sottoposte a deployment in GKE, con le risorse suddivise in due progetti, dev e prod. Il progetto dev contiene un cluster GKE di sviluppo, mentre il progetto prod contiene il cluster GKE di produzione. Il tuo obiettivo come amministratore della piattaforma è garantire che entrambi gli ambienti rispettino i criteri di Foo Corp's e che le risorse di livello base, come gli spazi dei nomi e gli account di servizio di Kubernetes, rimangano coerenti in entrambi.

Il seguente diagramma mostra una panoramica degli ambienti che hai configurato in questo tutorial:

Panoramica degli ambienti che hai configurato in questo tutorial.

Come mostrato nel diagramma precedente, in questo tutorial creerai le seguenti risorse:

  • Due progetti Google Cloud che rappresentano gli ambienti di sviluppo e produzione.
  • Due cluster GKE, dev e prod, nei progetti separati con Config Sync installato.

Architettura di repository

In questo tutorial, configurerai Config Sync per la sincronizzazione con le configurazioni nella directory config-source/ del repository di esempio di Anthos Config Management. Questa directory contiene i seguenti file e directory:

config-source/
├── base
│   ├── foo
│   │   ├── kustomization.yaml
│   │   ├── namespace.yaml
│   │   └── serviceaccount.yaml
│   ├── kustomization.yaml
│   ├── pod-creator-clusterrole.yaml
│   └── pod-creator-rolebinding.yaml
├── cloudbuild.yaml
├── overlays
│   ├── dev
│   │   └── kustomization.yaml
│   └── prod
│       └── kustomization.yaml
└── README.md

La directory config-source include i manifest di base/ e gli overlay dev/ e prod/ Kustomize. Ogni directory contiene un file kustomization.yaml, che elenca i file che Kustomize deve gestire e applicare al cluster. In dev/kustomization.yaml e prod/kustomization.yaml viene definita una serie di patch. Queste patch manipolano le risorse base/ per quell'ambiente specifico.

Ad esempio, lo sviluppo di ruoli RoleBinding consente a tutti gli sviluppatori Foo Corp di eseguire il deployment di pod nel cluster di sviluppo, mentre l'oggetto RoleBinding di produzione consente solo a un agente di deployment continuo, deploy-bot@foo-corp.com, di eseguire il deployment dei pod in produzione:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../../base
patches:
# ServiceAccount - make name unique per environ
- target:
    kind: ServiceAccount
    name: foo-ksa
  patch: |-
    - op: replace
      path: /metadata/name
      value: foo-ksa-dev
    - op: replace
      path: /metadata/namespace
      value: foo-dev
# Pod creators - give all Foo Corp developers access
- target:
    kind: RoleBinding
    name: pod-creators
  patch: |-
    - op: replace
      path: /subjects/0/name
      value: developers-all@foo-corp.com
commonLabels:
  environment: dev

Obiettivi

  • Imposta Config Sync per visualizzare e sincronizzare automaticamente la configurazione per i due ambienti separati.

Costi

Questo tutorial utilizza 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 beneficiare di una prova gratuita.

Al termine di questo tutorial, puoi evitare una fatturazione continua eliminando le risorse che hai creato. Per scoprire di più, vedi Pulizia.

Prima di iniziare

Prima di iniziare questo tutorial, assicurati di aver completato i seguenti passaggi:

  1. In Google Cloud Console, nella pagina del selettore dei progetti, scegli o crea due progetti Google Cloud.

    Vai al selettore progetti

  2. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  3. Esegui l'upgrade della tua interfaccia a riga di comando di Google Cloud all'ultima versione.

  4. Installa o esegui l'upgrade del comando nomos

Crea e registra i tuoi cluster

Per concentrarti sul flusso di lavoro che devi utilizzare quando configuri Config Sync per più ambienti, la directory multi-environments-kustomize contiene script che puoi utilizzare per automatizzare la configurazione di Config Sync.

  1. Clona il repository di esempio di Anthos Config Management:

    git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.git
    
  2. Passa alla cartella che contiene le risorse necessarie per questo tutorial:

    cd anthos-config-management-samples/multi-environments-kustomize/
    
  3. Per eseguire gli script utilizzati in questo tutorial, imposta le seguenti variabili:

    export DEV_PROJECT="DEV_PROJECT_ID"
    export PROD_PROJECT="PROD_PROJECT_ID"
    export DEV_CLUSTER_ZONE="DEV_CLUSTER_ZONE"
    export PROD_CLUSTER_ZONE="PROD_CLUSTER_ZONE"
    export CM_CONFIG_DIR="config-sync-rendering"
    

    Sostituisci quanto segue:

    • DEV_PROJECT_ID: l'ID del progetto Google Cloud che vuoi utilizzare come progetto sviluppatore
    • PROD_PROJECT_ID: l'ID del progetto Google Cloud che vuoi utilizzare come progetto di produzione
    • DEV_CLUSTER_ZONE: la zona di Compute Engine in cui vuoi creare il cluster di sviluppo. Ad esempio: us-central1-c.
    • PROD_CLUSTER_ZONE: la zona di Compute Engine in cui vuoi creare il cluster di produzione
  4. Per creare due cluster, esegui lo script ./create-clusters.sh:

    ./create-clusters.sh
    

    Questo script crea un cluster GKE denominato dev nel progetto di sviluppo e un cluster GKE denominato prod nel progetto di produzione. Questo script abilita anche le API GKE e Anthos e si connette ai cluster dev e prod per consentirti di accedere alle loro API con kubectl.

    Output di esempio:

    kubeconfig entry generated for dev.
    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for prod.
    ⭐️ Done creating clusters.
    
  5. Per registrare i tuoi cluster in due gruppi di Anthos separati, esegui lo script register-clusters.sh:

    ./register-clusters.sh
    

    Questo script crea un account di servizio Google Cloud e una chiave per la registrazione del cluster Anthos, quindi utilizza il comando gcloud container hub memberships register per registrare i cluster dev e prod in Anthos nei loro progetti.

    Output di esempio:

    Waiting for Feature Config Management to be created...done.
    ⭐️ Done registering clusters.
    

Configurazione di Config Sync

Ora che hai creato e registrato i cluster, puoi installare Config Sync e verificare l'installazione.

Installa Config Sync

Per installare Config Sync, sul cluster di sviluppo e produzione, esegui lo script install-config-sync.sh:

./install-config-sync.sh

Output previsto:

🔁 Installing ConfigSync on the dev cluster...
Updated property [core/project].
Switched to context "DEV_CLUSTER".
Waiting for Feature Config Management to be updated...done.
🔁 Installing ConfigSync on the prod cluster...
Updated property [core/project].
Switched to context "PROD_CLUSTER".
Waiting for Feature Config Management to be updated...done.

È in corso la sincronizzazione di Config con le configurazioni dei tuoi repository.

Verificare la configurazione

In questa sezione verificherai che i cluster siano sincronizzati con le configurazioni nel tuo repository:

  1. Per controllare lo stato dell'installazione di Config Sync, esegui il comando nomos status:

    nomos status
    

    Dovresti vedere che sia i cluster di sviluppo sia quelli di produzione sono sincronizzati con i rispettivi repository:

    gke_DEV_PROJECT_ID_us-central1-c_dev
      --------------------
      <root>   https://github.com/GoogleCloudPlatform/anthos-config-management-samples/multi-environments-kustomize/config-source/overlays/dev@main
      SYNCED   8f2e196f
      Managed resources:
         NAMESPACE   NAME                                                 STATUS
                     clusterrole.rbac.authorization.k8s.io/pod-creator    Current
                     namespace/default                                    Current
                     namespace/foo                                        Current
         default     rolebinding.rbac.authorization.k8s.io/pod-creators   Current
         foo         serviceaccount/foo-ksa-dev                           Current
    
    *gke_PROD_PROJECT_ID_us-central1-c_prod
       --------------------
       <root>   https://github.com/GoogleCloudPlatform/anthos-config-management-samples/multi-environments-kustomize/config-source/overlays/prod@main
       SYNCED   c91502ee
       Managed resources:
          NAMESPACE   NAME                                                 STATUS
                      clusterrole.rbac.authorization.k8s.io/pod-creator    Current
                      namespace/default                                    Current
                      namespace/foo                                        Current
          default     rolebinding.rbac.authorization.k8s.io/pod-creators   Current
          foo         serviceaccount/foo-ksa-prod                          Current
    
      ```
    
  2. Usa kubectl per passare al cluster di sviluppo:

    kubectl config use-context "gke_${DEV_PROJECT}_${DEV_CLUSTER_ZONE}_dev"
    
  3. Per verificare che le risorse siano sincronizzate, ottieni gli spazi dei nomi. Dovresti vedere lo spazio dei nomi foo.

    kubectl get namespace
    

    Output di esempio:

    NAME                           STATUS   AGE
    config-management-monitoring   Active   9m38s
    config-management-system       Active   9m38s
    default                        Active   47h
    foo                            Active   9m5s
    kube-node-lease                Active   47h
    kube-public                    Active   47h
    kube-system                    Active   47h
    resource-group-system          Active   9m30s
    

    Hai configurato il rendering automatico della configurazione per un ambiente di sviluppo e produzione in più progetti e ambienti Google Cloud.

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 tutte le risorse

Per eliminare le risorse che hai creato in questo tutorial, ma per mantenere invariati i progetti dev e prod, esegui lo script di pulizia:

./cleanup.sh

Elimina i progetti

  1. In Cloud Console, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto da 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.

Passaggi successivi