Utilizzo di Config Sync in più ambienti con rendering automatico


Questo tutorial mostra come configurare Config Sync per la versione Enterprise di Google Kubernetes Engine (GKE) in due ambienti, uno per lo sviluppo e uno per la produzione, utilizzando le best practice per Config Sync.

In questo scenario, fai parte di un team di amministrazione di piattaforma di Foo Corp. The Foo Corp di applicazioni distribuite su GKE Enterprise con le risorse suddivise due progetti, dev e prod. Il progetto dev contiene uno sviluppo GKE Enterprise e il progetto prod contiene la versione di produzione di un cluster GKE Enterprise. Il tuo obiettivo, in qualità di amministratore della piattaforma, è garantire entrambi gli ambienti rimangono conformi alle politiche di Foo Corp e tale base di archiviazione, come gli spazi dei nomi Kubernetes e gli account di servizio, coerente in entrambi gli ambienti.

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

Una panoramica degli ambienti configurati in questo tutorial.

Questo tutorial sfrutta la funzionalità di rendering automatico in Config Sync per eseguire il rendering delle risorse nel cluster. Ogni cluster è configurato sincronizzare da una directory che contiene un file di configurazione Kustomization, attiva automaticamente il processo di rendering in Config Sync. Per maggiori dettagli, consulta Utilizzare un repository con configurazioni Kustomize e grafici Helm.

Come mostrato nel diagramma precedente, in questo tutorial creerai quanto segue: di risorse:

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

Architettura del repository

In questo tutorial, configurerai Config Sync per la sincronizzazione con le configurazioni nel Directory config-source/ del repository di esempi. Questa directory contiene le seguenti directory e file:

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 base/ e gli overlay Kustomize dev/ e prod/. 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 una serie di patch vengono definiti. Queste patch manipolano le risorse base/ per quell'ambiente specifico.

Ad esempio, il RoleBinding dev consente a tutti gli sviluppatori di Foo Corp di eseguire il deployment dei pod nel cluster dev, mentre il RoleBinding prod 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
resources:
- ../../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

  • Configura Config Sync per eseguire il rendering e sincronizzare automaticamente la configurazione per i due ambienti separati.

Costi

In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi basata sull'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

Al termine delle attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la sezione Pulizia.

Prima di iniziare

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

  1. Nella pagina del selettore progetti della console Google Cloud, scegli o crea due progetti Google Cloud.

    Vai al selettore dei progetti

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Esegui l'upgrade di Google Cloud CLI alla versione più recente.

  4. Installa o esegui l'upgrade del comando nomos

Crea e registra i cluster

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

  1. Clona il repository di esempio:

    git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.git
    
  2. Vai alla cartella contenente 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 progetto dal Progetto Google Cloud che vuoi utilizzare come progetto di sviluppo
    • 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 tuo cluster di sviluppo. Ad esempio: us-central1-c.
    • PROD_CLUSTER_ZONE: la zona Compute Engine in cui vuoi creare il tuo cluster di produzione
  4. Per creare due cluster, esegui lo script ./create-clusters.sh:

    ./create-clusters.sh
    

    Questo script crea un cluster GKE Enterprise denominato dev nel progetto dev e un cluster GKE Enterprise denominato prod nel progetto prod. Questo script abilita anche l'API GKE Enterprise e si connette ai tuoi cluster dev e prod in modo da poter accedere alle relative 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 cluster in due parchi risorse separati, lo script register-clusters.sh:

    ./register-clusters.sh
    

    Questo script crea un account di servizio Google Cloud e una chiave per la registrazione dei cluster GKE Enterprise, quindi utilizza il comando gcloud container fleet memberships register per registrare i cluster dev e prod a GKE Enterprise nei rispettivi 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 tuoi cluster, puoi installare Config Sync e verifica l'installazione.

Installazione di Config Sync

Per installare Config Sync, sui cluster di sviluppo e produzione, esegui 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.

Config Sync ora si sincronizza con le configurazioni nei tuoi repository.

Verifica la configurazione

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

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

    nomos status
    

    Dovresti vedere che entrambi i cluster di sviluppo e produzione sono ora sincronizzati 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 viene visualizzato 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
    

    Ora hai impostato 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, mantenendo sia la classe progetti di sviluppo e produzione intatti, esegui lo script di pulizia:

./cleanup.sh

Elimina i progetti

  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.

Passaggi successivi