Questa pagina spiega come utilizzare Config Sync e Terraform per creare dinamicamente risorse basate sui team in un parco risorse di cluster. Config Sync espande le funzionalità di gestione del team del parco risorse per creare e gestire configurazioni di infrastruttura e cluster nei parchi risorse.
Questa guida presuppone che tu abbia già familiarità con i concetti di gestione dei team del parco risorse, come gli ambiti dei team e gli spazi dei nomi del parco risorse. Per ulteriori informazioni, consulta la panoramica della gestione del team del parco risorse.
Per un tutorial end-to-end con configurazioni di esempio, consulta il tutorial sulla proprietà del parco nel repository di esempi.
Per un elenco dei campi supportati per Config Sync in Terraform, consulta la documentazione di riferimento di Terraform per le funzionalità del parco risorse GKE.
Flusso di lavoro di esempio
Sei un amministratore della piattaforma che vuole creare risorse in modo dinamico in un parco risorse di cluster
dove team diversi hanno esigenze diverse. Ad esempio, potresti voler applicare un
NetworkPolicy
agli spazi dei nomi del team di backend, ma non a quelli del team di frontend.
In questo scenario, la procedura per creare risorse basate sul team in uno spazio dei nomi è la seguente:
- Scegli o crea il parco in cui vuoi gestire le risorse per i team.
Configura la tua fonte attendibile. La verità oggettiva contiene gli oggetti
NamespaceSelector
che utilizzi per selezionare gli spazi dei nomi a livello di parco nei tuoi ambiti di gruppo e qualsiasi risorsa (ad esempio unNetworkPolicy
) che vuoi sincronizzare in questi spazi dei nomi.Crea la configurazione predefinita a livello di parco risorse per Config Sync. Config Sync utilizza queste impostazioni predefinite durante la sincronizzazione dalla fonte della verità creata nel passaggio precedente. Queste impostazioni di Config Sync si applicano a tutti i nuovi cluster creati nel parco risorse.
Crea cluster nel tuo parco risorse.
Crea gli spazi dei nomi e gli ambiti di team frontend e backend in modo che Config Sync possa rilevare e riconciliare le risorse nei tuoi spazi dei nomi.
Dopo aver completato questi passaggi, Config Sync crea e applica il NetworkPolicy
in base al NamespaceSelector
agli spazi dei nomi del team di backend. Se modifichi o aggiungi risorse, Config Sync rileva e applica continuamente le modifiche ai file di configurazione, agli ambiti dei team, agli spazi dei nomi del parco risorse e ai membri del parco risorse.
Prezzi
Le funzionalità di Config Sync e di gestione dei team del parco risorse sono disponibili solo per gli utenti che hanno attivato GKE Enterprise. Per ulteriori informazioni sui prezzi di GKE Enterprise, consulta la pagina dei prezzi di GKE.
Prima di iniziare
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
- Crea o accedi a una fonte attendibile (un repository Git o un'immagine OCI) dove puoi archiviare i file di configurazione. Gli esempi in questa guida utilizzano un repository Git.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per creare risorse di gruppo per il tuo parco risorse, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
-
Gestione delle risorse del parco:
Fleet Admin (in precedenza GKE Hub Admin) (
roles/gkehub.admin
) -
Creazione di cluster GKE:
Amministratore cluster Kubernetes Engine (
roles/container.clusterAdmin
) -
Attivazione di GKE Enterprise:
Amministratore dell'utilizzo dei servizi (
roles/serviceusage.serviceUsageAdmin
)
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Acquisire le credenziali utente
Per eseguire i comandi Terraform in questa guida nel tuo ambiente locale, esegui il seguente comando per acquisire nuove credenziali utente:
gcloud auth application-default login
Configurare il parco risorse
In questa sezione crei il tuo parco risorse e attivi i servizi richiesti.
Per configurare la flotta, completa i seguenti passaggi:
Crea una directory per i file Terraform di configurazione del parco risorse. Aggiungi un file
main.tf
e un filevariables.tf
a questa directory.Nel file
variables.tf
, aggiungi le seguenti variabili:Nel file
main.tf
, aggiungi le seguenti risorse:Esporta la variabile PROJECT_ID:
export TF_VAR_project=PROJECT_ID
Sostituisci
PROJECT_ID
con l'ID del progetto in cui vuoi creare il tuo parco.Inizializza Terraform nella directory che hai creato:
terraform init
Verifica che le modifiche proposte con Terraform corrispondano al piano previsto:
terraform plan
Crea il parco risorse, attiva le API e crea l'account di servizio:
terraform apply
A volte possono essere necessari alcuni minuti per attivare tutti i servizi.
Configura la tua fonte attendibile
In questa sezione aggiungi file di configurazione a una fonte attendibile.
È necessario un oggetto NamespaceSelector
per ogni ambito del team che vuoi utilizzare.
Ad esempio, se hai team di frontend e backend, devi creare un oggetto NamespaceSelector
per ogni team. L'oggetto NamespaceSelector
seleziona tutti o alcuni degli spazi dei nomi all'interno di un ambito del team. Puoi aggiungere altre risorse di gruppo alla tua fonte attendibile, ad esempio un NetworkPolicy
. Quando crei queste risorse, fai riferimento a NamespaceSelector
in modo che Config Sync possa eseguire il deployment e la sincronizzazione delle risorse dinamicamente tra gli spazi dei nomi.
Per configurare l'origine attendibile, completa i seguenti passaggi:
Nella tua fonte attendibile, crea una directory per i file di configurazione da cui vuoi che Config Sync esegua la sincronizzazione.
Per ogni team, crea un oggetto
NamespaceSelector
nella directory di configurazione:apiVersion: configmanagement.gke.io/v1 kind: NamespaceSelector metadata: name: NAMESPACE_SELECTOR_NAME spec: mode: dynamic selector: matchLabels: fleet.gke.io/fleet-scope: SCOPE_NAME
Sostituisci quanto segue:
NAMESPACE_SELECTOR_NAME
: il nome dell'oggettoNamespaceSelector
, ad esempiobackend-scope
.SCOPE_NAME
: il nome dell'ambito del team, ad esempiobackend
.
Tutti gli spazi dei nomi che fanno parte di uno spazio dei nomi del parco risorse hanno automaticamente l'etichetta
fleet.gke.io/fleet-scope: SCOPE_NAME
.NamespaceSelector
seleziona tutti gli spazi dei nomi del parco risorse di un ambito del team che utilizzano l'etichetta. Per altri esempi su come includere o escludere gli spazi dei nomi, consulta Esempi diNamespaceSelector
.Crea gli oggetti che vuoi sincronizzare tra gli spazi dei nomi.
Per sincronizzare un oggetto solo con un determinato team, imposta la seguente annotazione nei metadati dell'oggetto:
annotations: configmanagement.gke.io/namespace-selector: NAMESPACE_SELECTOR_NAME
Ad esempio, un
NetworkPolicy
per il team di backend potrebbe avere il seguente aspetto:
Creare i valori predefiniti a livello di parco risorse per Config Sync
In questa sezione, crei i valori predefiniti a livello di parco risorse per Config Sync, che applicano la stessa configurazione di Config Sync a tutti i cluster creati nel parco risorse.
Per creare una configurazione predefinita a livello di parco risorse per Config Sync, completa i passaggi seguenti:
Crea una directory per i file Terraform di configurazione predefinita del parco risorse. Aggiungi un file
main.tf
e un filevariables.tf
a questa directory.Nel file
variables.tf
, aggiungi le seguenti variabili:Nel file
main.tf
, aggiungi la seguente risorsa per configurare le impostazioni di Config Sync:git
terraform { required_providers { google = { source = "hashicorp/google" version = ">=5.16.0" } } } provider "google" { project = var.project } resource "google_gke_hub_feature" "feature" { name = "configmanagement" location = "global" provider = google fleet_default_member_config { configmanagement { version = "VERSION" config_sync { source_format = "unstructured" git { sync_repo = "REPO" sync_branch = "BRANCH" policy_dir = "DIRECTORY" secret_type = "SECRET" } } } } }
Sostituisci quanto segue:
VERSION
: (facoltativo) il numero di versione di Config Sync. Deve essere impostata sulla versione 1.17.0 o successive. Se non la specifichi, il valore predefinito è la versione più recente.REPO
: l'URL del repository contenente i file di configurazione.BRANCH
: il ramo del repository, ad esempiomain
.DIRECTORY
: il percorso all'interno del repository Git che rappresenta il livello superiore del repository da sincronizzare.SECRET
: il tipo di autenticazione con secret.
Per un elenco completo delle impostazioni supportate nel blocco
git
di Config Sync, consulta la documentazione di riferimento di Terraform per le funzionalità dell'hub GKE.OCI
terraform { required_providers { google = { source = "hashicorp/google" version = ">=5.16.0" } } } provider "google" { project = var.project } resource "google_gke_hub_feature" "feature" { name = "configmanagement" location = "global" provider = google fleet_default_member_config { configmanagement { version = "VERSION" config_sync { source_format = "unstructured" oci { sync_repo = "REPO" policy_dir = "DIRECTORY" secret_type = "SECRET" } } } } }
Sostituisci quanto segue:
VERSION
: il numero di versione di Config Sync. Deve essere impostata sulla versione 1.17.0 o successive. Se non la specifichi, il valore predefinito è la versione più recente.REPO
: l'URL del repository di immagini OCI contenente i file di configurazione.DIRECTORY
: il percorso assoluto della directory contenente le risorse da sincronizzare. Lascia vuoto per utilizzare la home directory.SECRET
: il tipo di autorizzazione mediante secret.
Per un elenco completo delle impostazioni supportate nel blocco
oci
di Config Sync, consulta la documentazione di riferimento di Terraform per le funzionalità dell'hub GKE.Ad esempio, il seguente file
main.tf
configura Config Sync per eseguire la sincronizzazione da un repository Git e sincronizza tutti gli oggetti presenti nella directoryconfig
:Inizializza Terraform nella directory che hai creato:
terraform init
Verifica che le modifiche proposte con Terraform corrispondano al piano previsto:
terraform plan
Crea le configurazioni dei membri del parco risorse predefinite:
terraform apply
Creare cluster nel parco risorse
In questa sezione crei una configurazione del cluster condivisa e poi crei i cluster nel tuo parco risorse.
Per creare e registrare nuovi cluster nel tuo parco risorse, segui questi passaggi:
Crea una directory per i file Terraform di configurazione del cluster. Aggiungi un file
main.tf
e un filevariables.tf
a questa directory.Nel file
variables.tf
, aggiungi le seguenti variabili:Crea un file
cluster.tf
contenente i valori predefiniti utilizzati in tutti i cluster, ad esempio gli ID progetto e parco risorse:variable "location" { type = string } variable "cluster_name" { type = string } data "google_project" "project" { provider = google } resource "google_container_cluster" "cluster" { provider = google name = var.cluster_name location = var.location initial_node_count = 3 project = data.google_project.project.project_id fleet { project = data.google_project.project.project_id } workload_identity_config { workload_pool = "${data.google_project.project.project_id}.svc.id.goog" } deletion_protection = false }
Nel file
main.tf
, aggiungi le seguenti risorse:terraform { required_providers { google = { source = "hashicorp/google" version = ">=5.16.0" } } } provider "google" { project = var.project } module "MODULE_NAME" { source = "CLUSTER_CONFIGURATION_FILEPATH" cluster_name = "CLUSTER_NAME" location="CLUSTER_LOCATION" }
Sostituisci quanto segue:
MODULE_NAME
: il nome che vuoi assegnare al modulo del cluster. MODULE_NAME e CLUSTER_NAME possono avere lo stesso valore, ad esempious-east-cluster
.CLUSTER_CONFIGURATION_FILEPATH
: il percorso relativo al filecluster.tf
che hai creato.CLUSTER_NAME
: il nome del tuo cluster. MODULE_NAME e CLUSTER_NAME possono avere lo stesso valore, ad esempious-east-cluster
.CLUSTER_LOCATION
: la posizione del cluster, ad esempious-east1
.
Puoi creare tutti i cluster che vuoi. Ad esempio, il seguente file
main.tf
crea 3 cluster in regioni diverse:Inizializza Terraform nella directory che hai creato:
terraform init
Verifica che le modifiche proposte con Terraform corrispondano al piano previsto:
terraform plan
Crea i cluster:
terraform apply
Configura gli ambiti dei team e gli spazi dei nomi del parco risorse
In questa sezione, crei gli ambiti del team e associ i cluster a questi ambiti. Poi crei gli spazi dei nomi del parco risorse necessari, ad esempio uno per ogni team, in ogni ambito, e Config Sync crea le risorse negli spazi dei nomi.
Per configurare gli ambiti e gli spazi dei nomi di gruppo:
Crea una directory per i file Terraform di configurazione dello spazio dei nomi e dell'ambito del team. Aggiungi un file
main.tf
e un filevariables.tf
a questa directory.Nel file
variables.tf
, aggiungi le seguenti variabili:Nel file
main.tf
, aggiungi le seguenti risorse:Aggiungi le informazioni del fornitore:
terraform { required_providers { google = { source = "hashicorp/google" version = ">=5.16.0" } } } provider "google" { project = var.project }
Aggiungi la risorsa di ambito del team:
resource "google_gke_hub_scope" "scope" { provider = google for_each = toset([ "SCOPE_NAME", "SCOPE_NAME_2", ]) scope_id = each.value }
Sostituisci quanto segue:
SCOPE_NAME
: il nome dell'ambito del team, ad esempiobackend
.SCOPE_NAME_2
: un ambito del team aggiuntivo, se ne hai creato uno.
Puoi aggiungere tutti gli ambiti di gruppo necessari. Quando viene creato uno spazio dei nomi del parco risorse nel cluster, viene etichettato automaticamente con
fleet.gke.io/fleet-scope: SCOPE_NAME
, consentendo a Config Sync di selezionare gli spazi dei nomi in base alle etichetteNamespaceSelector
presenti durante la sincronizzazione delle risorse Kubernetes.Ad esempio, una risorsa Terraform con ambito di gruppo che include un ambito sia per il team frontend sia per il team backend potrebbe essere simile alla seguente:
Aggiungi un'associazione di appartenenza al parco per ogni cluster che vuoi applicare a un ambito del team:
resource "google_gke_hub_membership_binding" "membership-binding" { provider = google for_each = { MEMBERSHIP_BINDING_NAME = { membership_binding_id = "MEMBERSHIP_BINDING_ID" scope = google_gke_hub_scope.scope["SCOPE_NAME"].name membership_id = "CLUSTER_NAME" location = "CLUSTER_LOCATION" } MEMBERSHIP_BINDING_NAME_2 = { membership_binding_id = "MEMBERSHIP_BINDING_ID_2" scope = google_gke_hub_scope.scope["SCOPE_NAME_2"].name membership_id = "CLUSTER_NAME_2" location = "CLUSTER_LOCATION_2" } } membership_binding_id = each.value.membership_binding_id scope = each.value.scope membership_id = each.value.membership_id location = each.value.location depends_on = [google_gke_hub_scope.scope] }
Sostituisci quanto segue:
MEMBERSHIP_BINDING_NAME
: il nome dell'associazione, ad esempious-east-backend
.MEMBERSIP_BINDING_ID
: l'ID associazione all'abbonamento. Può essere uguale a MEMBERSHIP_BINDING_NAME.SCOPE_NAME
: il selettore di etichette a cui hai assegnato l'ambito al tuo team quando hai creato unNamespaceSelector
, ad esempiobackend
.CLUSTER_NAME
: il nome del cluster che hai creato quando hai creato i cluster, ad esempious-east-cluster
.CLUSTER_LOCATION
: la posizione del cluster, ad esempious-east1
.
Devi definire un'associazione all'appartenenza al parco risorse per ogni cluster. Se non definisci un ambito del team per un cluster, questo non viene creato per lo spazio dei nomi in questione. Ad esempio, se hai tre cluster nelle regioni
us-east1
,us-west1
eus-central1
, ma il clusterus-central1
è solo per il team di frontend, la risorsa di associazione al gruppo sarà simile alla seguente:Aggiungi gli spazi dei nomi che vuoi definire per i tuoi team:
resource "google_gke_hub_namespace" "fleet_namespace" { provider = google for_each = { FLEET_NAMESPACE = { scope_id = "SCOPE_NAME" scope_namespace_id = "FLEET_NAMESPACE_ID" scope = google_gke_hub_scope.scope["SCOPE_NAME"].name } FLEET_NAMESPACE_2 = { scope_id = "SCOPE_NAME" scope_namespace_id = "FLEET_NAMESPACE_ID_2" scope = google_gke_hub_scope.scope["SCOPE_NAME"].name } } scope_namespace_id = each.value.scope_namespace_id scope_id = each.value.scope_id scope = each.value.scope depends_on = [google_gke_hub_scope.scope] }
Sostituisci quanto segue:
FLEET_NAMESPACE
: il nome che vuoi assegnare allo spazio dei nomi, ad esempiobackend-a
.SCOPE_NAME
: il selettore di etichette a cui hai assegnato l'ambito al tuo team quando hai creato unNamespaceSelector
, ad esempiobackend
.FLEET_NAMESPACE_ID
: l'ID dello spazio dei nomi. Può essere lo stesso valore di FLEET_NAMESPACE.
Ad esempio, se vuoi che sia il team frontend sia quello backend abbiano ciascuno due spazi dei nomi, la risorsa dello spazio dei nomi del parco potrebbe essere simile alla seguente:
Inizializza Terraform nella directory che hai creato:
terraform init
Verifica che le modifiche proposte con Terraform corrispondano al piano previsto:
terraform plan
Crea gli ambiti e gli spazi dei nomi del parco risorse:
terraform apply
Dopo aver creato gli ambiti e gli spazi dei nomi del parco risorse, Config Sync rileva i nuovi spazi dei nomi e i relativi ambiti, seleziona le risorse negli spazi dei nomi del parco risorse e le riconcilia con i file di configurazione.
Puoi verificare che le risorse siano applicate al cluster corretto utilizzando nomos status
o visitando la scheda Pacchetti di Config Sync nella console Google Cloud e impostando il pulsante di opzione Visualizza per su Cluster.
Config Sync sincronizza le risorse tra gli spazi dei nomi in base agli ambiti del team in base alla configurazione archiviata nella tua fonte attendibile. Ogni volta che aggiungi una nuova risorsa,
se includi l'annotazione NamespaceSelector
corretta, Config Sync
riconcilia automaticamente la risorsa negli spazi dei nomi del team.
Se vuoi applicare le impostazioni di Config Sync ai tuoi cluster esistenti, consulta le istruzioni per la configurazione dei valori predefiniti a livello di parco risorse nella guida all'installazione di Config Sync.
Passaggi successivi
- Scopri di più sulla configurazione dei team per il tuo parco risorse.