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 presso Foo Corp. Viene eseguito il deployment delle applicazioni Foo Corp
su GKE Enterprise, con risorse suddivise in
due progetti, dev
e prod
. Il progetto dev
contiene un cluster GKE Enterprise di sviluppo e il progetto prod
contiene il cluster GKE Enterprise di produzione. Il tuo obiettivo in qualità di amministratore della piattaforma è assicurarti che entrambi gli ambienti rispettino le norme di Foo Corp e che le risorse di base, come gli account di servizio e gli spazi dei nomi Kubernetes, rimangano coerenti in entrambi gli ambienti.
Il seguente diagramma mostra 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 sul cluster. Ogni cluster è configurato per la sincronizzazione da una directory contenente un file di configurazione di Kustomization, che 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 crei le seguenti risorse:
- Due progetti Google Cloud che rappresentano gli ambienti di sviluppo e produzione.
- Due cluster GKE Enterprise,
dev
eprod
, nei progetti separati, con Config Sync installato.
Architettura del repository
In questo tutorial, configuri Config Sync in modo che si sincronizzi con le configurazioni nella
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
viene definita una serie di patch. 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 di sviluppo, 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 la sincronizzazione automatica della configurazione per i due ambienti separati.
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
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 i seguenti passaggi:
Nella console Google Cloud , nella pagina di selezione del progetto, scegli o crea due Google Cloud progetti.
-
Make sure that billing is enabled for your Google Cloud project.
Esegui l'upgrade di Google Cloud CLI alla versione più recente.
Installare o eseguire l'upgrade del comando
nomos
Crea e registra i cluster
Per consentirti di concentrarti sul flusso di lavoro da 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.
Clona il repository di esempio:
git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.git
Vai alla cartella contenente le risorse necessarie per questo tutorial:
cd anthos-config-management-samples/multi-environments-kustomize/
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 progettoGoogle Cloud che vuoi utilizzare come progetto di sviluppoPROD_PROJECT_ID
: l'ID del progettoGoogle Cloud che vuoi utilizzare come progetto di produzioneDEV_CLUSTER_ZONE
: la zona Compute Engine in cui vuoi creare il cluster di sviluppo. Ad esempio:us-central1-c
.PROD_CLUSTER_ZONE
: la zona Compute Engine in cui vuoi creare il cluster di produzione
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 denominatoprod
nel progetto prod. Questo script abilita anche l'API GKE Enterprise e si connette ai tuoi clusterdev
eprod
in modo da poter accedere alle relative API conkubectl
.Output di esempio:
kubeconfig entry generated for dev. Fetching cluster endpoint and auth data. kubeconfig entry generated for prod. ⭐️ Done creating clusters.
Per registrare i cluster in due parchi risorse distinti, esegui lo script
register-clusters.sh
:./register-clusters.sh
Questo script crea un account di servizio e una chiave Google Cloud per la registrazione dei cluster GKE Enterprise, quindi utilizza il comando
gcloud container fleet memberships register
per registrare i clusterdev
eprod
a GKE Enterprise nei propri 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 verificarne l'installazione.
Installazione di Config Sync
Per installare Config Sync, esegui lo scriptinstall-config-sync.sh
sui cluster di sviluppo e di produzione:
./install-config-sync.sh
Risultato 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 verifichi che i cluster vengano sincronizzati con le configurazioni nel tuo repository:
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 di produzione sono ora sincronizzati con i rispettivi repo:
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 ```
Usa
kubectl
per passare al cluster di sviluppo:kubectl config use-context "gke_${DEV_PROJECT}_${DEV_CLUSTER_ZONE}_dev"
Per verificare che le risorse siano sincronizzate, recupera 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
Ora hai configurato il rendering automatico della configurazione per un ambiente di sviluppo e di produzione, su 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.
Eliminare tutte le risorse
Per eliminare le risorse che hai creato in questo tutorial, ma mantenere invariati i progetti dev e prod, esegui lo script di pulizia:
./cleanup.sh
Elimina i progetti
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Passaggi successivi
- Scopri di più sulle implementazioni sicure con Config Sync
- Esplora architetture di riferimento, diagrammi e best practice su Google Cloud. Consulta il nostro Cloud Architecture Center.