Questa pagina fornisce informazioni sulla configurazione dei nodi Kubernetes che ospitano i cluster di database AlloyDB Omni per le prestazioni ottimali dell'operatore Kubernetes AlloyDB Omni e del motore del database AlloyDB Omni.
La configurazione dei parametri del kernel consente ad AlloyDB Omni di utilizzare in modo più efficiente la memoria di sistema e le risorse di I/O durante la gestione di workload elevati.
Prerequisito
Prima di iniziare, assicurati che i tuoi nodi Kubernetes eseguano il kernel Linux 6.1 o versioni successive, in particolare un kernel che supporti i flag MADV_COLLAPSE
e MADV_POPULATE_WRITE
. Per ulteriori informazioni su questi flag, consulta la documentazione di madwise
Linux.
Applica le impostazioni del kernel consigliate ai nodi Kubernetes
La tabella seguente elenca i parametri del kernel richiesti e i relativi valori corrispondenti per i nodi Kubernetes che eseguono pod di cluster di database:
File | Valore |
---|---|
/sys/kernel/mm/transparent_hugepage/shmem_enabled Per informazioni sulla memoria condivisa, consulta Supporto di pagine enormi trasparenti |
within_size o always |
/proc/sys/vm/max_map_count Per informazioni sul numero di aree di mappatura della memoria che un processo può creare, consulta la documentazione per /proc/sys/vm |
Maggiore o uguale a 1073741824 |
Per configurare i parametri del kernel sui nodi Kubernetes utilizzando un DaemonSet, segui questi passaggi:
Applica le etichette ai nodi in cui prevedi di eseguire i cluster di database seguendo le istruzioni riportate in Aggiungere un'etichetta a un nodo.
Per impostare i parametri del kernel sui nodi etichettati come
LABEL_KEY=LABEL_VALUE
, crea un DaemonSet:cat << EOF | kubectl apply -f - apiVersion: apps/v1 kind: DaemonSet metadata: name: alloydb-omni-kernel-tuning namespace: DS_NAMESPACE spec: selector: matchLabels: name: alloydb-omni-kernel-tuning template: metadata: labels: name: alloydb-omni-kernel-tuning spec: volumes: - name: host-sys hostPath: path: /sys nodeSelector: LABEL_KEY: "LABEL_VALUE" restartPolicy: Always terminationGracePeriodSeconds: 1 initContainers: - name: enable-thp-mmc image: INIT_IMAGE volumeMounts: - name: host-sys mountPath: /sys securityContext: privileged: true command: ["sh", "-c", "sysctl -w vm.max_map_count=MAX_MAP_COUNT && echo within_size >/sys/kernel/mm/transparent_hugepage/shmem_enabled"] containers: - name: CONTAINER_NAME image: CONTAINER_IMAGE command: ["watch", "-n", "600", "cat", "/sys/kernel/mm/transparent_hugepage/shmem_enabled"] EOF
Sostituisci quanto segue:
DS_NAMESPACE
: lo spazio dei nomi in cui vuoi eseguire il deployment del DaemonSet, ad esempiodefault
.LABEL_KEY
: l'identificatore dell'etichetta, ad esempioworkload
.LABEL_VALUE
: i dati associati all'identificatore dell'etichetta, ad esempiodatabase
.INIT_IMAGE
: il nome dell'immagine utilizzata per il contenitore di inizializzazione.MAX_MAP_COUNT
: il numero massimo di aree di mappa di memoria che un processo può creare, ad esempio1073741824
.CONTAINER_NAME
: il nome del contenitore principale, ad esempiomain
.CONTAINER_IMAGE
: il nome dell'immagine utilizzata per il contenitore principale, ad esempiolatest
.
Dopo aver eseguito il deployment del DaemonSet, per verificare che tutti i pod nel cluster Kubernetes siano nello stato
Running
e che tu abbia un pod per ogni nodo con l'etichettaLABEL_KEY=LABEL_VALUE
, utilizza il seguente comando:kubectl get pods -l LABEL_KEY=LABEL_VALUE
Un esempio di output è il seguente:
NAME READY STATUS RESTARTS AGE alloydb-omni-kernel-tuning-2dkwh 1/1 Running 0 22s alloydb-omni-kernel-tuning-pgkbj 1/1 Running 0 19s
Per verificare che il flag del kernel sia stato applicato correttamente, per ogni pod identificato dopo il deployment del DaemonSet, esegui il seguente comando:
kubectl logs POD_NAME
Sostituisci
POD_NAME
con il nome del pod di cui vuoi esaminare i log.Un esempio di output è il seguente:
always [within_size] advise never deny force
Esegui cluster di database sui nodi Kubernetes con i parametri del kernel consigliati
Per eseguire il deployment di cluster di database sui nodi Kubernetes con i parametri del kernel consigliati, aggiungi una sezione nodeAffinity
a una delle seguenti sezioni del manifest del cluster di database:
primarySpec.schedulingConfig
per le istanze principalispec.schedulingConfig
per le istanze del pool di lettura
nodeaffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: LABEL_KEY
operator: In
values:
- "LABEL_VALUE"
Per ulteriori informazioni sull'esecuzione di cluster di database su nodi Kubernetes specifici, consulta Assegnare nodi a un cluster di database utilizzando la pianificazione.
Verificare l'applicazione dei parametri del kernel
Per verificare che i parametri del kernel vengano applicati ai pod di database:
Se l'alta disponibilità è abilitata, in particolare
spec.availability.numberOfStandbys
è impostato su un valore maggiore di zero, verifica che la risorsa personalizzata del database mostriDBClusterReady
nella colonna DBCLUSTERPHASE eTrue
nella colonna HAREADYSTATUS.kubectl get dbcluster -n DBCLUSTER_NAMESPACE DBCLUSTER_NAME
Sostituisci quanto segue:
DBCLUSTER_NAME
: il nome del cluster di database che verifichi.DBCLUSTER_NAMESPACE
: il nome dello spazio dei nomi specifico in cui risiede il cluster di database.
Un esempio di output è il seguente:
NAME PRIMARYENDPOINT PRIMARYPHASE DBCLUSTERPHASE HAREADYSTATUS HAREADYREASON dbcluster-sample 10.29.21.240 Ready DBClusterReady True Ready
Elenca i pod Kubernetes che appartengono al cluster di database:
kubectl get pods -n DBCLUSTER_NAMESPACE -l alloydbomni.internal.dbadmin.goog/dbcluster=DBCLUSTER_NAME
Per controllare le informazioni sulla memoria condivisa, esegui il seguente comando:
kubectl exec -n DBCLUSTER_NAMESPACE POD_NAME -- grep Shmem /proc/meminfo
L'output deve contenere numeri diversi da zero in tutte le voci.
Un esempio di output è il seguente:
Shmem: 126255872 kB ShmemHugePages: 18403328 kB ShmemPmdMapped: 2961408 kB
Se in una delle voci viene visualizzato
0 kB
, riavvia il pod corrispondente:kubectl delete pod -n DBCLUSTER_NAMESPACE POD_NAME
Ripeti i passaggi da 1 a 5 quando il pod è nello stato
Running
.