En esta página, se proporciona información para configurar nodos de Kubernetes que almacenen clústeres de bases de datos de AlloyDB Omni para obtener un rendimiento óptimo del operador de Kubernetes de AlloyDB Omni y del motor de base de datos de AlloyDB Omni.
La configuración de los parámetros del kernel permite que AlloyDB Omni use la memoria del sistema y los recursos de E/S de manera más eficiente cuando se manejan cargas de trabajo pesadas.
Requisitos
Antes de comenzar, asegúrate de que tus nodos de Kubernetes ejecuten el kernel de Linux 6.1 o una versión posterior, específicamente un kernel que admita las marcas MADV_COLLAPSE
y MADV_POPULATE_WRITE
. Para obtener más información sobre estas marcas, consulta la documentación de madwise
de Linux.
Aplica la configuración recomendada del kernel a los nodos de Kubernetes
En la siguiente tabla, se enumeran los parámetros del kernel obligatorios y sus valores correspondientes para los nodos de Kubernetes que ejecutan pods de clúster de bases de datos:
Archivo | Valor |
---|---|
/sys/kernel/mm/transparent_hugepage/shmem_enabled Para obtener información sobre la memoria compartida, consulta Compatibilidad con Hugepage transparente. |
within_size o always |
/proc/sys/vm/max_map_count Para obtener información sobre la cantidad de áreas de mapa de memoria que puede crear un proceso, consulta la documentación de /proc/sys/vm . |
Mayor o igual que 1073741824 |
Para configurar los parámetros del kernel en tus nodos de Kubernetes con un DaemonSet, haz lo siguiente:
Aplica etiquetas a los nodos en los que planeas ejecutar clústeres de bases de datos con las instrucciones que se indican en Cómo agregar una etiqueta a un nodo.
Para establecer los parámetros del kernel en los nodos etiquetados como
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
Reemplaza lo siguiente:
DS_NAMESPACE
: Es el espacio de nombres en el que deseas implementar el DaemonSet, por ejemplo,default
.LABEL_KEY
: Es el identificador de la etiqueta, por ejemplo,workload
.LABEL_VALUE
: Los datos asociados con el identificador de la etiqueta, por ejemplo,database
.INIT_IMAGE
: Es el nombre de la imagen que se usa para el contenedor de init.MAX_MAP_COUNT
: Es la cantidad máxima de áreas de mapa de memoria que puede crear un proceso, por ejemplo,1073741824
.CONTAINER_NAME
: Es el nombre del contenedor principal, por ejemplo,main
.CONTAINER_IMAGE
: Es el nombre de la imagen que se usa para el contenedor principal, por ejemplo,latest
.
Después de implementar el DaemonSet, para verificar que todos los pods de tu clúster de Kubernetes estén en el estado
Running
y que tengas un pod para cada nodo con la etiquetaLABEL_KEY=LABEL_VALUE
, usa el siguiente comando:kubectl get pods -l LABEL_KEY=LABEL_VALUE
Un resultado de ejemplo se ve de la siguiente manera:
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
Para verificar que la marca del kernel se aplique correctamente, ejecuta el siguiente comando para cada uno de los pods identificados después de implementar el DaemonSet:
kubectl logs POD_NAME
Reemplaza
POD_NAME
por el nombre del pod cuyos registros deseas examinar.Un resultado de ejemplo se ve de la siguiente manera:
always [within_size] advise never deny force
Ejecuta clústeres de bases de datos en nodos de Kubernetes con los parámetros de kernel recomendados
Para implementar clústeres de bases de datos en nodos de Kubernetes con los parámetros de kernel recomendados, agrega una sección nodeAffinity
a una de las siguientes secciones del manifiesto de tu clúster de bases de datos:
primarySpec.schedulingConfig
para instancias principalesspec.schedulingConfig
para instancias de grupo de lectura
nodeaffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: LABEL_KEY
operator: In
values:
- "LABEL_VALUE"
Para obtener más información sobre cómo ejecutar clústeres de bases de datos en nodos de Kubernetes específicos, consulta Asigna nodos a un clúster de bases de datos con programación.
Verifica la aplicación de los parámetros del kernel
Para verificar que los parámetros del kernel se apliquen a los pods de bases de datos, haz lo siguiente:
Si la alta disponibilidad está habilitada, específicamente,
spec.availability.numberOfStandbys
se establece en un valor superior a cero, verifica que el recurso personalizado de la base de datos muestreDBClusterReady
en la columna DBCLUSTERPHASE yTrue
en la columna HAREADYSTATUS.kubectl get dbcluster -n DBCLUSTER_NAMESPACE DBCLUSTER_NAME
Reemplaza lo siguiente:
DBCLUSTER_NAME
: Es el nombre del clúster de bases de datos que verificas.DBCLUSTER_NAMESPACE
: Es el nombre del espacio de nombres específico en el que reside tu clúster de bases de datos.
Un resultado de ejemplo se ve de la siguiente manera:
NAME PRIMARYENDPOINT PRIMARYPHASE DBCLUSTERPHASE HAREADYSTATUS HAREADYREASON dbcluster-sample 10.29.21.240 Ready DBClusterReady True Ready
Muestra una lista de los pods de Kubernetes que pertenecen al clúster de bases de datos:
kubectl get pods -n DBCLUSTER_NAMESPACE -l alloydbomni.internal.dbadmin.goog/dbcluster=DBCLUSTER_NAME
Para verificar la información de la memoria compartida, ejecuta el siguiente comando:
kubectl exec -n DBCLUSTER_NAMESPACE POD_NAME -- grep Shmem /proc/meminfo
El resultado debe contener números distintos de cero en todas las entradas.
Un resultado de ejemplo se ve de la siguiente manera:
Shmem: 126255872 kB ShmemHugePages: 18403328 kB ShmemPmdMapped: 2961408 kB
Si ves
0 kB
en alguna de las entradas, reinicia el pod correspondiente:kubectl delete pod -n DBCLUSTER_NAMESPACE POD_NAME
Repite los pasos del 1 al 5 después de que el pod esté en el estado
Running
.