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 carichi di lavoro elevati.
Prerequisito
Prima di iniziare, assicurati che i 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 saperne di più su questi flag, consulta la documentazione di Linux madwise.
Applica le impostazioni del kernel consigliate ai nodi Kubernetes
La tabella seguente elenca i parametri del kernel richiesti e i relativi valori per i nodi Kubernetes che eseguono i pod del cluster di database:
| File | Valore |
|---|---|
/sys/kernel/mm/transparent_hugepage/shmem_enabledPer informazioni sulla memoria condivisa, consulta Supporto di Transparent Hugepage |
within_size o always |
/proc/sys/vm/max_map_countPer informazioni sul numero di aree di mappatura della memoria che un processo può creare, consulta la documentazione di /proc/sys/vm |
Maggiore o uguale a 1073741824 |
Per configurare i parametri del kernel sui nodi Kubernetes utilizzando un DaemonSet:
Applica le etichette ai nodi in cui prevedi di eseguire i cluster di database seguendo le istruzioni riportate in Aggiungi un'etiche1tta a un nodo.
Per impostare i parametri del kernel sui nodi con etichetta
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"] EOFSostituisci 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 container di inizializzazione.MAX_MAP_COUNT: il numero massimo di aree di mappatura della memoria che un processo può creare, ad esempio1073741824.CONTAINER_NAME: il nome del container principale, ad esempiomain.CONTAINER_IMAGE: il nome dell'immagine utilizzata per il container principale, ad esempiolatest.
Dopo aver eseguito il deployment del DaemonSet, per verificare che tutti i pod nel cluster Kubernetes siano nello stato
Runninge 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_VALUEDi seguito è riportato un esempio di output:
NAME READY STATUS RESTARTS AGE alloydb-omni-kernel-tuning-2dkwh 1/1 Running 0 22s alloydb-omni-kernel-tuning-pgkbj 1/1 Running 0 19sPer verificare che il flag del kernel sia stato applicato correttamente, esegui il seguente comando per ciascuno dei pod identificati dopo il deployment del DaemonSet:
kubectl logs POD_NAMESostituisci
POD_NAMEcon il nome del pod di cui vuoi esaminare i log.Di seguito è riportato un esempio di output:
always [within_size] advise never deny force
Esegui cluster di database su nodi Kubernetes con parametri del kernel consigliati
Per eseguire il deployment dei 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.schedulingConfigper le istanze principalispec.schedulingConfigper le istanze del pool di lettura
nodeaffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: LABEL_KEY
operator: In
values:
- "LABEL_VALUE"
Per saperne di più sull'esecuzione dei cluster di database su nodi Kubernetes specifici, consulta Assegna nodi a un cluster di database utilizzando la pianificazione.
Verifica l'applicazione dei parametri del kernel
Per verificare che i parametri del kernel siano applicati ai pod del database:
Se è abilitata la funzionalità di alta affidabilità, in particolare se
spec.availability.numberOfStandbysè impostato su un valore maggiore di zero, verifica che la risorsa personalizzata del database mostriDBClusterReadynella colonna DBCLUSTERPHASE eTruenella colonna HAREADYSTATUS.kubectl get dbcluster -n DBCLUSTER_NAMESPACE DBCLUSTER_NAMESostituisci quanto segue:
DBCLUSTER_NAME: il nome del cluster di database che stai verificando.DBCLUSTER_NAMESPACE: il nome dello spazio dei nomi specifico in cui risiede il cluster di database.
Di seguito è riportato un esempio di output:
NAME PRIMARYENDPOINT PRIMARYPHASE DBCLUSTERPHASE HAREADYSTATUS HAREADYREASON dbcluster-sample 10.29.21.240 Ready DBClusterReady True ReadyElenca i pod Kubernetes che appartengono al cluster di database:
kubectl get pods -n DBCLUSTER_NAMESPACE -l alloydbomni.internal.dbadmin.goog/dbcluster=DBCLUSTER_NAMEPer controllare le informazioni sulla memoria condivisa, esegui il seguente comando:
kubectl exec -n DBCLUSTER_NAMESPACE POD_NAME -- grep Shmem /proc/meminfoL'output deve contenere numeri diversi da zero in tutte le voci.
Di seguito è riportato un esempio di output:
Shmem: 126255872 kB ShmemHugePages: 18403328 kB ShmemPmdMapped: 2961408 kBSe in una delle voci viene visualizzato
0 kB, riavvia il pod corrispondente:kubectl delete pod -n DBCLUSTER_NAMESPACE POD_NAMERipeti i passaggi da 1 a 5 dopo che il pod è nello stato
Running.