Questo documento spiega come creare un cluster Kubernetes condiviso in una zona air-gap di Google Distributed Cloud (GDC). Un cluster condiviso si estende su più progetti e include servizi gestiti da GDC completi che offrono una configurazione del cluster Kubernetes altamente soggettiva e meno configurabile rispetto al cluster standard. Per ulteriori informazioni sui cluster standard, consulta Configurazioni dei cluster Kubernetes.
I cluster condivisi sono una risorsa a livello di zona e non possono estendersi su più zone. Per gestire i cluster in un universo multizona, devi creare manualmente i cluster in ogni zona.
Questo documento è destinato a segmenti di pubblico come gli sviluppatori di applicazioni all'interno del gruppo di operatori di applicazioni, responsabili della gestione dei carichi di lavoro dei container all'interno della propria organizzazione. Per saperne di più, consulta la documentazione relativa ai segmenti di pubblico per GDC air-gapped.
Prima di iniziare
Per ottenere le autorizzazioni necessarie per creare un cluster condiviso, chiedi all'amministratore IAM dell'organizzazione di concederti il ruolo Amministratore cluster utente (
user-cluster-admin). Questo ruolo non è associato a uno spazio dei nomi.Per utilizzare l'API o Terraform per creare un cluster condiviso, genera il file kubeconfig del server API zonale per ospitare il cluster. Per saperne di più, vedi Accedere. Imposta la variabile di ambiente
MANAGEMENT_API_SERVERsul percorso di kubeconfig.Pianifica i seguenti limiti di Google Distributed Cloud (GDC) con air gap per i cluster Kubernetes:
- 16 cluster per organizzazione
- 42 nodi worker per cluster e un minimo di tre nodi worker
- 4620 pod per cluster
- 110 pod per nodo
Pianifica il blocco CIDR del pod
Per allocare il blocco CIDR dei pod di dimensioni appropriate per i tuoi workload, devi calcolare la quantità di indirizzi IP necessari per il tuo cluster Kubernetes prima di crearlo. La maggior parte dei parametri di rete non può essere modificata dopo la creazione del cluster.
Un cluster Kubernetes segue la logica di procedura quando alloca indirizzi IP:
- Kubernetes assegna a ciascun nodo un blocco CIDR
/24composto da 256 indirizzi. Questo importo rispetta il limite massimo predefinito di 110 pod per nodo per i cluster Kubernetes. - Le dimensioni del blocco CIDR assegnato a un nodo dipendono dal valore massimo di pod per nodo.
- Il blocco contiene sempre almeno il doppio degli indirizzi rispetto al numero massimo di pod per nodo.
Consulta l'esempio seguente per capire come è stato calcolato il valore predefinito di Per node mask size= /24 per ospitare 110 pod:
Maximum pods per node = 110
Total number of IP addresses required = 2 * 110 = 220
Per node mask size = /24
Number of IP addresses in a /24 = 2(32 - 24) = 256
Determina la maschera CIDR pod richiesta da configurare per il cluster Kubernetes in base al numero di nodi richiesto. Pianifica le future aggiunte di nodi al cluster durante la configurazione dell'intervallo CIDR:
Total number of nodes supported = 2(Per node mask size - pod CIDR mask)
Dato che esiste una dimensione della maschera per nodo predefinita pari a /24 , consulta la tabella seguente che mappa la maschera CIDR del pod al numero di nodi supportati.
| Maschera CIDR pod | Calcolo: 2(dimensione maschera per nodo - maschera CIDR) | Numero massimo di nodi supportati, inclusi i nodi del control plane |
|---|---|---|
| /21 | 2(24 - 21) | 8 |
| /20 | 2(24-20) | 16 |
| /19 | 2(24 - 19) | 32 |
| /18 | 2(24 - 18) | 64 |
Dopo aver calcolato il blocco CIDR del pod per il cluster Kubernetes, configurarlo come parte del flusso di lavoro di creazione del cluster nella sezione successiva.
Creare un cluster condiviso
Completa i seguenti passaggi per creare un cluster Kubernetes condiviso:
Console
Nel menu di navigazione, seleziona Kubernetes Engine > Cluster.
Fai clic su Crea cluster.
Nel campo Nome, specifica un nome per il cluster.
Seleziona la versione di Kubernetes per il cluster.
Seleziona la zona in cui creare il cluster.
Fai clic su Collega progetto e seleziona un progetto esistente da collegare al cluster. Quindi, fai clic su Salva. Puoi allegare o scollegare i progetti dopo aver creato il cluster dalla pagina dei dettagli del progetto. Prima di eseguire il deployment dei carichi di lavoro dei container, devi collegare un progetto al cluster.

Fai clic su Avanti.
Configura le impostazioni di rete per il cluster. Non puoi modificare queste impostazioni di rete dopo aver creato il cluster. Il protocollo internet predefinito e unico supportato per i cluster Kubernetes è Internet Protocol versione 4 (IPv4).
Se vuoi creare nodi del bilanciatore del carico dedicati, inserisci il numero di nodi da creare. Per impostazione predefinita, ricevi zero nodi e il traffico del bilanciatore del carico viene instradato tramite i nodi di controllo.
Seleziona il CIDR del servizio (Classless Inter-Domain Routing) da utilizzare. I servizi di cui è stato eseguito il deployment, come i bilanciatori del carico, vengono allocati indirizzi IP da questo intervallo.
Seleziona il CIDR dei pod da utilizzare. Il cluster alloca indirizzi IP da questo intervallo ai tuoi pod e alle tue VM.
Fai clic su Avanti.
Rivedi i dettagli del pool di nodi predefinito generato automaticamente per il cluster. Fai clic su edit Modifica per modificare il pool di nodi predefinito.
Per creare altri node pool, seleziona Aggiungi node pool. Quando modifichi il node pool predefinito o ne aggiungi uno nuovo, puoi personalizzarlo con le seguenti opzioni:
- Assegna un nome al node pool. Non puoi modificare il nome dopo aver creato il pool di nodi.
- Specifica il numero di nodi worker da creare nel node pool.
Seleziona la classe di macchine più adatta ai requisiti del tuo workload. Visualizza l'elenco delle seguenti impostazioni:
- Tipo di macchina
- CPU
- Memoria
Fai clic su Salva.
Fai clic su Crea per creare il cluster.
La creazione del cluster condiviso può richiedere fino a 90 minuti.
API
Crea la risorsa personalizzata
Cluster:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: cluster.gdc.goog/v1 kind: Cluster metadata: name: CLUSTER_NAME namespace: platform spec: clusterNetwork: podCIDRSize: POD_CIDR serviceCIDRSize: SERVICE_CIDR initialVersion: kubernetesVersion: KUBERNETES_VERSION nodePools: - machineTypeName: MACHINE_TYPE name: NODE_POOL_NAME nodeCount: NUMBER_OF_WORKER_NODES taints: TAINTS labels: LABELS acceleratorOptions: gpuPartitionScheme: GPU_PARTITION_SCHEME releaseChannel: channel: UNSPECIFIED EOFSostituisci quanto segue:
MANAGEMENT_API_SERVER: il percorso kubeconfig del server API zonale.CLUSTER_NAME: il nome del cluster. Il nome del cluster non deve terminare con-system. Il suffisso-systemè riservato ai cluster creati da GDC.POD_CIDR: la dimensione degli intervalli di rete da cui vengono allocati gli indirizzi IP virtuali dei pod. Se non viene configurato, viene utilizzato un valore predefinito21.SERVICE_CIDR: la dimensione degli intervalli di rete da cui vengono allocati gli indirizzi IP virtuali del servizio. Se non viene configurato, viene utilizzato un valore predefinito23.KUBERNETES_VERSION: la versione di Kubernetes del cluster, ad esempio1.26.5-gke.2100. Per elencare le versioni di Kubernetes disponibili da configurare, consulta Elenca le versioni di Kubernetes disponibili per un cluster.MACHINE_TYPE: il tipo di macchina per i nodi worker del node pool. Visualizza i tipi di macchina disponibili per ciò che è possibile configurare.NODE_POOL_NAME: il nome del pool di nodi.NUMBER_OF_WORKER_NODES: il numero di nodi di lavoro di cui eseguire il provisioning nel node pool.TAINTS: le incompatibilità da applicare ai nodi di questo node pool. Questo è un campo facoltativo.LABELS: le etichette da applicare ai nodi di questopool di nodil. Contiene un elenco di coppie chiave-valore. Questo è un campo facoltativo.GPU_PARTITION_SCHEME: lo schema di partizionamento della GPU, se esegui workload GPU. Questo è un campo facoltativo. Ad esempio,mixed-2. La GPU non viene partizionata se questo campo non è impostato. Per ulteriori informazioni sui profili GPU multi-istanza (MIG) disponibili, consulta Profili MIG supportati.
La creazione del cluster condiviso può richiedere fino a 90 minuti.
Crea la risorsa personalizzata
ProjectBinding:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: resourcemanager.gdc.goog/v1 kind: ProjectBinding metadata: name: CLUSTER_NAME-PROJECT_NAME namespace: platform labels: resourcemanager.gdc.goog/projectbinding-for-user-project: "true" spec: clusterRef: name: CLUSTER_NAME selector: nameSelector: matchNames: - PROJECT_NAME EOFSostituisci quanto segue:
MANAGEMENT_API_SERVER: il percorso kubeconfig del server API zonale.CLUSTER_NAME: il nome del cluster.PROJECT_NAME: il nome del progetto a cui eseguire il binding. Ogni risorsaProjectBindingpuò essere mappata a un solo cluster. Se un progetto richiede l'accesso a più cluster, è necessario creare unProjectBindingunivoco per ogni cluster.
Prima che uno sviluppatore possa eseguire il deployment dei carichi di lavoro dei container nel cluster, devi collegare un progetto al cluster.
Terraform
In un file di configurazione Terraform, inserisci il seguente snippet di codice per creare la risorsa personalizzata
Cluster:provider "kubernetes" { config_path = "MANAGEMENT_API_SERVER" } resource "kubernetes_manifest" "CLUSTER_RESOURCE_NAME" { manifest = { "apiVersion" = "cluster.gdc.goog/v1" "kind" = "Cluster" "metadata" = { "name" = "CLUSTER_NAME" "namespace" = "platform" } "spec" = { "clusterNetwork" = { "podCIDRSize" = "POD_CIDR" "serviceCIDRSize" = "SERVICE_CIDR" } "initialVersion" = { "kubernetesVersion" = "KUBERNETES_VERSION" } "nodePools" = [{ "machineTypeName" = "MACHINE_TYPE" "name" = "NODE_POOL_NAME" "nodeCount" = "NUMBER_OF_WORKER_NODES" "taints" = "TAINTS" "labels" = "LABELS" "acceleratorOptions" = { "gpuPartitionScheme" = "GPU_PARTITION_SCHEME" } }] "releaseChannel" = { "channel" = "UNSPECIFIED" } } } }Sostituisci quanto segue:
MANAGEMENT_API_SERVER: il percorso kubeconfig del server API zonale.CLUSTER_RESOURCE_NAME: il nome univoco della risorsa Terraform del cluster, ad esempiocluster-1. Questo nome viene utilizzato da Terraform per identificare il cluster e non viene utilizzato da GDC.CLUSTER_NAME: il nome del cluster. Il nome del cluster non deve terminare con-system. Il suffisso-systemè riservato ai cluster creati da GDC.POD_CIDR: la dimensione degli intervalli di rete da cui vengono allocati gli indirizzi IP virtuali dei pod. Se non viene configurato, viene utilizzato un valore predefinito21.SERVICE_CIDR: la dimensione degli intervalli di rete da cui vengono allocati gli indirizzi IP virtuali del servizio. Se non viene configurato, viene utilizzato un valore predefinito23.KUBERNETES_VERSION: la versione di Kubernetes del cluster, ad esempio1.26.5-gke.2100. Per elencare le versioni di Kubernetes disponibili da configurare, consulta Elenca le versioni di Kubernetes disponibili per un cluster.MACHINE_TYPE: il tipo di macchina per i nodi worker del node pool. Visualizza i tipi di macchina disponibili per ciò che è possibile configurare.NODE_POOL_NAME: il nome del pool di nodi.NUMBER_OF_WORKER_NODES: il numero di nodi di lavoro di cui eseguire il provisioning nel node pool.TAINTS: le incompatibilità da applicare ai nodi di questo node pool. Questo è un campo facoltativo.LABELS: le etichette da applicare ai nodi di questopool di nodil. Contiene un elenco di coppie chiave-valore. Questo è un campo facoltativo.GPU_PARTITION_SCHEME: lo schema di partizionamento della GPU, se esegui workload GPU. Questo è un campo facoltativo. Ad esempio,mixed-2. La GPU non viene partizionata se questo campo non è impostato. Per ulteriori informazioni sui profili GPU multi-istanza (MIG) disponibili, consulta Profili MIG supportati.
In un file di configurazione Terraform, inserisci il seguente snippet di codice per creare la risorsa personalizzata
ProjectBinding:provider "kubernetes" { config_path = "MANAGEMENT_API_SERVER" } resource "kubernetes_manifest" "PROJECT_BINDING_RESOURCE_NAME" { manifest = { "apiVersion" = "resourcemanager.gdc.goog/v1" "kind" = "ProjectBinding" "metadata" = { "name" = "CLUSTER_NAME-PROJECT_NAME" "namespace" = "platform" "labels" = { "resourcemanager.gdc.goog/projectbinding-for-user-project" = "true" } } "spec" = { "clusterRef" = { "name" = "CLUSTER_NAME" } "selector" = { "nameSelector" = { "matchNames" = [ "PROJECT_NAME", ] } } } } }Sostituisci quanto segue:
MANAGEMENT_API_SERVER: il percorso kubeconfig del server API zonale.PROJECT_BINDING_RESOURCE_NAME: il nome della risorsa Terraform dell'associazione del progetto, ad esempioproject-binding-1. Questo nome viene utilizzato da Terraform per identificare l'associazione del progetto e non viene utilizzato da GDC.CLUSTER_NAME: il nome del cluster.PROJECT_NAME: il nome del progetto a cui eseguire il binding. Ogni risorsaProjectBindingpuò essere mappata a un solo cluster. Se un progetto richiede l'accesso a più cluster, è necessario creare unProjectBindingunivoco per ogni cluster.
Prima che uno sviluppatore possa eseguire il deployment dei carichi di lavoro dei container nel cluster, devi collegare un progetto al cluster.
Applica le nuove risorse personalizzate utilizzando Terraform:
terraform apply
La creazione del cluster condiviso può richiedere fino a 90 minuti.
Passaggi successivi
- Esegui il deployment di un'app containerizzata ad alta disponibilità
- Carichi di lavoro con container in GDC
- Gerarchia delle risorse