Questa pagina mostra come creare un pool di nodi in GKE su AWS e come personalizzare la configurazione dei nodi utilizzando un file di configurazione.
Per creare un pool di nodi, devi fornire le seguenti risorse:
- Il nome di un cluster AWS esistente in cui creare il pool di nodi
- Un profilo istanza IAM per le VM del pool di nodi
- Una subnet in cui verranno eseguite le VM del pool di nodi
Se vuoi l'accesso SSH ai tuoi nodi, puoi creare una coppia di chiavi EC2.
Questa pagina è rivolta agli amministratori IT e agli operatori che vogliono configurare, monitorare e gestire l'infrastruttura cloud. Per scoprire di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei contenuti, consulta la pagina Ruoli e attività comuni degli utenti GKE. Google Cloud
Crea un pool di nodi standard
Una volta disponibili queste risorse, puoi creare un pool di nodi con questo comando:
gcloud container aws node-pools create NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--instance-type INSTANCE_TYPE \
--root-volume-size ROOT_VOLUME_SIZE \
--iam-instance-profile NODEPOOL_PROFILE \
--node-version NODE_VERSION \
--min-nodes MIN_NODES \
--max-nodes MAX_NODES \
--max-pods-per-node MAX_PODS_PER_NODE \
--location GOOGLE_CLOUD_LOCATION \
--subnet-id NODEPOOL_SUBNET \
--ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
--config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
--tags "Name=CLUSTER_NAME-NODE_POOL_NAME"
Sostituisci quanto segue:
NODE_POOL_NAME
: un nome a tua scelta per il pool di nodiCLUSTER_NAME
: il nome del cluster a cui collegare il pool di nodil.INSTANCE_TYPE
: il tipo di istanza macchina AWS desiderato per questo node pool, ad esempiom5.large
ROOT_VOLUME_SIZE
: le dimensioni desiderate per il volume di root di ogni nodo, in GBNODEPOOL_PROFILE
: il profilo dell'istanza IAM per le VM del pool di nodi. Per informazioni dettagliate su come aggiornare un profilo istanza IAM, vedi Aggiorna il profilo istanza AWS IAM.NODE_VERSION
: la versione di Kubernetes da installare su ogni nodo del pool di nodi (ad es. "1.32.4-gke.200")MIN_NODES
: il numero minimo di nodi che il pool di nodi può contenereMAX_NODES
: il numero massimo di nodi che il pool di nodi può contenereMAX_PODS_PER_NODE
: il numero massimo di pod che possono essere creati su un singolo nodo del poolGOOGLE_CLOUD_LOCATION
: il nome della località Google Cloud da cui verrà gestito questo pool di nodiNODEPOOL_SUBNET
: l'ID della subnet su cui verrà eseguito il pool di nodi.- Non deve esserci alcuna sovrapposizione tra gli intervalli IP di pod/servizi del cluster e la rete della subnet del pool di nodi. Per maggiori informazioni sulla selezione degli intervalli IP di pod e servizi per il cluster, consulta Selezionare gli intervalli CIDR per il cluster.
- Se questa subnet si trova al di fuori del blocco CIDR principale del VPC, sono necessari alcuni passaggi aggiuntivi. Per ulteriori informazioni, vedi Gruppi di sicurezza.
SSH_KEY_PAIR_NAME
: il nome della coppia di chiavi SSH AWS creata per l'accesso SSH (facoltativo)CONFIG_KMS_KEY_ARN
: l'Amazon Resource Name (ARN) della chiave AWS KMS che cripta i dati utente
Se presente, il parametro --tags
applica il tag specificato a tutti i nodi nel tuo
pool di nodil. Questo esempio tagga tutti i nodi nel pool con i nomi del cluster
e del pool di nodi a cui appartiene il nodo.
Personalizzare la configurazione del sistema di nodi
Puoi personalizzare la configurazione dei nodi utilizzando vari metodi. Ad esempio, puoi specificare parametri come il limite di CPU del pod quando crei un pool di nodi.
Puoi utilizzare una configurazione del sistema dei nodi per specificare impostazioni personalizzate per l'agente dei nodi Kubernetes (kubelet
) e configurazioni del kernel Linux di basso livello (sysctl
) nei tuoi pool di nodi.
Configura l'agente kubelet
Per personalizzare la configurazione dei nodi utilizzando kubelet
, utilizza Google Cloud CLI o Terraform.
gcloud
Puoi specificare impostazioni personalizzate per l'agente del nodo Kubernetes
(kubelet
)
quando crei i node pool. Ad esempio, per configurare kubelet
in modo che utilizzi la policy di gestione della CPU statica, esegui questo comando:
gcloud container aws node-pools create POOL_NAME \
--cluster CLUSTER_NAME \
--location=LOCATION \
--kubelet_config_cpu_manager_policy=static
Sostituisci quanto segue:
POOL_NAME
: il nome del tuo pool di nodi.CLUSTER_NAME
: il nome del cluster a cui vuoi aggiungere un pool di nodi.LOCATION
: la zona di computing o la regione del cluster.
Per un elenco completo dei campi che puoi aggiungere al comando precedente, vedi Opzioni di configurazione di Kubelet.
Terraform
Puoi scoprire di più su Terraform in un ambiente AWS nella documentazione di riferimento pool di nodi Terraform.
Imposta le variabili Terraform includendo il seguente blocco nel file
variables.tf
:variable "node_pool_kubelet_config_cpu_manager" { default = "none" } variable "node_pool_kubelet_config_cpu_cfs_quota" { default = "true" } variable "node_pool_kubelet_config_cpu_cfs_quota_period" { default = "100ms" } variable "node_pool_kubelet_config_pod_pids_limit" { default = -1 }
Aggiungi il seguente blocco alla configurazione Terraform:
resource "google_container_aws_node_pool" "NODE_POOL_RESOURCE_NAME" { provider = google cluster = CLUSTER_NAME name = POOL_NAME subnet_id = SUBNET_ID version = CLUSTER_VERSION location = CLUSTER_LOCATION kubelet_config { cpu_manager_policy = var.node_pool_kubelet_config_cpu_manager cpu_cfs_quota = var.node_pool_kubelet_config_cpu_cfs_quota cpu_cfs_quota_period = var.node_pool_kubelet_config_cpu_cfs_quota_period pod_pids_limit = var.node_pool_kubelet_config_pod_pids_limit } }
Sostituisci quanto segue:
NODE_POOL_RESOURCE_NAME
: il nome della risorsa del pool di nodi nel modello Terraform.CLUSTER_NAME
: il nome del cluster esistente.POOL_NAME
: il nome del pool di nodi da personalizzare.SUBNET_ID
: la subnet assegnata al pool di nodi.CLUSTER_VERSION
: la versione per il control plane e i nodi del cluster GKE su AWS.CLUSTER_LOCATION
: la regione o zona di Compute Engine del cluster.
Configura l'utilità sysctl
Per personalizzare la configurazione del sistema di nodi utilizzando sysctl
, effettua una richiesta POST
al metodo
awsClusters.awsNodePools.create
.
Questa richiesta POST crea un pool di nodi con le personalizzazioni specificate. Nell'esempio
seguente, i parametri busy_poll
e busy_read
sono configurati su
5000 microsecondi ciascuno:
POST https://ENDPOINT/v1/projects/PROJECT_ID/locations/GOOGLE_CLOUD_LOCATION/CLUSTER_NAME/awsNodePools
{
"name": NODE_POOL_NAME,
"version": CLUSTER_VERSION,
"config": {
"linuxNodeConfig": {
"sysctls": {
"net.core.busy_poll": "5000",
"net.core.busy_read": "5000",
}
}
}
}
Sostituisci quanto segue:
ENDPOINT
: il tuo Google Cloud endpoint di servizio.PROJECT_ID
: il tuo ID progetto Google Cloud .GOOGLE_CLOUD_LOCATION
: la Google Cloud posizione del cluster.CLUSTER_NAME
: il nome del cluster a cui vuoi aggiungere un pool di nodi.NODE_POOL_NAME
: il nome del tuo pool di nodi.CLUSTER_VERSION
: il numero di versione del cluster, ad esempio 1.31.0-gke.500.
Per un elenco completo delle coppie chiave-valore che puoi aggiungere alla richiesta JSON precedente, consulta Opzioni di configurazione di Sysctl.
Opzioni di configurazione per l'agente kubelet
La tabella seguente mostra le opzioni di kubelet
che puoi modificare.
Impostazioni di configurazione di Kubelet | Limitazioni | Impostazione predefinita | Descrizione |
---|---|---|---|
kubelet_config_cpu_manager_policy |
Il valore deve essere none o static
|
"none"
|
Questa impostazione controlla le
norme di gestione
della CPU di kubelet. Il valore predefinito è none , ovvero lo schema di affinità della CPU predefinito, che non fornisce affinità oltre a quella che lo scheduler del sistema operativo esegue automaticamente.Se imposti questo valore su static , i pod nella classe QoS Guaranteed con
richieste di CPU intere possono essere assegnati all'uso esclusivo delle CPU. |
kubelet_config_cpu_cfs_quota |
Il valore deve essere true o false
|
true
|
Questa impostazione applica il
limite della CPU del pod. Se imposti questo valore su false , i limiti della CPU per i pod vengono ignorati.Ignorare i limiti di CPU potrebbe essere auspicabile in determinati scenari in cui i pod sono sensibili ai limiti di CPU. Il rischio di disattivare cpuCFSQuota è
che un pod non autorizzato possa consumare più risorse CPU del previsto.
|
kubelet_config_cpu_cfs_quota_period | Il valore deve essere una durata di tempo |
"100ms"
|
Questa impostazione imposta il valore del periodo di quota CFS della CPU, cpu.cfs_period_us ,
che specifica il periodo di riallocazione dell'accesso di un cgroup alle risorse della CPU. Questa opzione ti consente di regolare il comportamento di limitazione della CPU. |
kubelet_config_pod_pids_limit | Il valore deve essere compreso tra 1024 e 4194304 |
-1
|
Questa impostazione definisce il numero massimo di ID processo (PID) che ogni pod può utilizzare. Se impostato sul valore predefinito, il limite di PID viene scalato automaticamente in base alle dimensioni della macchina sottostante. |
Opzioni di configurazione per l'utilità sysctl
Per ottimizzare le prestazioni del sistema, puoi modificare i seguenti attributi:
net.core.busy_poll
net.core.busy_read
net.core.netdev_max_backlog
net.core.rmem_max
net.core.wmem_default
net.core.wmem_max
net.core.optmem_max
net.core.somaxconn
net.ipv4.tcp_rmem
net.ipv4.tcp_wmem
net.ipv4.tcp_tw_reuse
net.ipv6.conf.all.disable_ipv6
net.ipv6.conf.default.disable_ipv6
vm.max_map_count
Node pool di istanze spot
GKE su AWS supporta i pool di nodi istanze spot AWS come funzionalità di anteprima. I pool di nodi di istanze spot sono pool di istanze spot Amazon EC2 disponibili su AWS a un costo inferiore.
Le istanze spot possono consentire di risparmiare sui costi per applicazioni stateless, a tolleranza di errore e flessibili. Tuttavia, non sono adatti a workload inflessibili, stateful, tolleranti agli errori o strettamente accoppiati tra i nodi delle istanze. Le istanze spot possono essere interrotte da Amazon EC2 quando EC2 ha bisogno di capacità e sono quindi soggette a fluttuazioni nel mercato spot. Se i tuoi workload richiedono capacità garantita e non possono tollerare periodi occasionali di mancata disponibilità, scegli un pool di nodi standard anziché un pool di nodi di istanze spot.
La strategia di allocazione utilizzata in GKE su AWS si concentra sulla selezione
di pool di istanze spot con la massima disponibilità di capacità, riducendo al minimo il rischio
di interruzioni. Questo approccio è particolarmente vantaggioso per i carichi di lavoro con un costo di interruzione più elevato, come il rendering di immagini e contenuti multimediali o il deep learning.
In particolare, è stata implementata la strategia di allocazione capacityOptimized
,
come descritto in
Strategie di allocazione per le istanze spot.
Crea un pool di nodi Spot
Per creare un pool di nodi Spot Instance, esegui questo comando:
gcloud container aws node-pools create NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--spot-instance-types INSTANCE_TYPE_LIST \
--root-volume-size ROOT_VOLUME_SIZE \
--iam-instance-profile NODEPOOL_PROFILE \
--node-version NODE_VERSION \
--min-nodes MIN_NODES \
--max-nodes MAX_NODES \
--max-pods-per-node MAX_PODS_PER_NODE \
--location GOOGLE_CLOUD_LOCATION \
--subnet-id NODEPOOL_SUBNET \
--ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
--config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
--tags "Name=CLUSTER_NAME-NODE_POOL_NAME"
Sostituisci quanto segue:
- NODE_POOL_NAME: il nome che vuoi assegnare a questo node pool.
- CLUSTER_NAME: il nome del cluster a cui vuoi collegare questopool di nodil.
- INSTANCE_TYPE_LIST: un elenco separato da virgole dei tipi di istanze AWS EC2. Il pool di nodi esegue il provisioning delle istanze spot con questi tipi di istanza. I tipi di istanza devono avere la stessa architettura della CPU, lo stesso numero di CPU e la stessa quantità di memoria. Ad esempio: "c6g.large,c6gd.large,c6gn.large,c7g.large,t4g.medium". Puoi utilizzare lo strumento Amazon EC2 Instance Selector per trovare tipi di istanza con configurazioni di CPU e memoria identiche.
ROOT_VOLUME_SIZE
: le dimensioni desiderate per il volume di root di ogni nodo, in GBNODEPOOL_PROFILE
: il profilo istanza IAM per le VM del pool di nodiNODE_VERSION
: la versione di Kubernetes da installare su ogni nodo del pool di nodi (ad es. "1.32.4-gke.200")MIN_NODES
: il numero minimo di nodi che il pool di nodi può contenereMAX_NODES
: il numero massimo di nodi che il pool di nodi può contenereMAX_PODS_PER_NODE
: il numero massimo di pod che possono essere creati su un singolo nodo del poolGOOGLE_CLOUD_LOCATION
: il nome della località Google Cloud da cui verrà gestito questo pool di nodiNODEPOOL_SUBNET
: l'ID della subnet su cui verrà eseguito il pool di nodi.- Non deve esserci alcuna sovrapposizione tra gli intervalli IP di pod/servizi del cluster e la rete della subnet del pool di nodi. Per maggiori informazioni sulla selezione degli intervalli IP di pod e servizi per il cluster, consulta Selezionare gli intervalli CIDR per il cluster.
- Se questa subnet si trova al di fuori del blocco CIDR principale del VPC, sono necessari alcuni passaggi aggiuntivi. Per ulteriori informazioni, vedi Gruppi di sicurezza.
SSH_KEY_PAIR_NAME
: il nome della coppia di chiavi SSH AWS creata per l'accesso SSH (facoltativo)CONFIG_KMS_KEY_ARN
: l'Amazon Resource Name (ARN) della chiave AWS KMS che cripta i dati utente
La best practice consiste nell'elencare un numero di tipi di istanza nel campo INSTANCE_TYPE_LIST. Questa best practice è importante perché se un pool di nodi è configurato con un solo tipo di istanza e questo tipo di istanza non è disponibile in nessuna delle zone di disponibilità desiderate, il pool di nodi non può eseguire il provisioning di nuovi nodi. Ciò può influire sulla disponibilità delle tue applicazioni e causare interruzioni del servizio.
Tieni presente che il campo spot-instance-types
si esclude a vicenda con il campo
instance-type
. Ciò significa che puoi fornire solo uno di questi campi
e non entrambi.