本页介绍了如何设置托管 AlloyDB Omni 数据库集群的 Kubernetes 节点,以便 AlloyDB Omni Kubernetes 操作器和 AlloyDB Omni 数据库引擎能够实现最佳性能。
通过配置内核参数,AlloyDB Omni 在处理繁重工作负载时可以更高效地使用系统内存和 IO 资源。
前提条件
开始之前,请确保您的 Kubernetes 节点运行的是 Linux 内核 6.1 或更高版本,尤其是支持 MADV_COLLAPSE
和 MADV_POPULATE_WRITE
标志的内核。如需详细了解这些标志,请参阅 Linux madwise
文档。
将建议的内核设置应用于 Kubernetes 节点
下表列出了运行数据库集群 Pod 的 Kubernetes 节点的必需内核参数及其对应的值:
文件 | 值 |
---|---|
/sys/kernel/mm/transparent_hugepage/shmem_enabled 如需了解共享内存,请参阅透明超大页支持 |
within_size 或 always |
/proc/sys/vm/max_map_count 如需了解进程可以创建的内存映射区域数量,请参阅 /proc/sys/vm 文档 |
大于或等于 1073741824 |
如需使用 DaemonSet 在 Kubernetes 节点上配置内核参数,请执行以下操作:
按照向节点添加标签中的说明,将标签应用于您计划运行数据库集群的节点。
如需在标记为
LABEL_KEY=LABEL_VALUE
的节点上设置内核参数,请创建一个 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替换以下内容:
DS_NAMESPACE
:您要部署 DaemonSet 的命名空间,例如default
。LABEL_KEY
:标签的标识符,例如workload
。LABEL_VALUE
:与标签标识符关联的数据,例如database
。INIT_IMAGE
:用于 init 容器的映像的名称。MAX_MAP_COUNT
:进程可创建的内存映射区域的数量上限,例如1073741824
。CONTAINER_NAME
:主容器的名称,例如main
。CONTAINER_IMAGE
:用于主容器的映像的名称,例如latest
。
部署 DaemonSet 后,如需验证 Kubernetes 集群中的所有 pod 均处于
Running
状态,并且每个节点都有一个标签为LABEL_KEY=LABEL_VALUE
的 pod,请使用以下命令:kubectl get pods -l
LABEL_KEY =LABEL_VALUE 输出示例如下所示:
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
如需验证内核标志是否已成功应用,请针对部署 DaemonSet 后识别出的每个 Pod 运行以下命令:
kubectl logs
POD_NAME 将
POD_NAME
替换为您要检查日志的 Pod 的名称。输出示例如下所示:
always [within_size] advise never deny force
使用推荐的内核参数在 Kubernetes 节点上运行数据库集群
如需在 Kubernetes 节点上使用推荐的 kernel 参数部署数据库集群,请将 nodeAffinity
部分添加到数据库集群清单的以下某个部分:
primarySpec.schedulingConfig
(适用于主实例)spec.schedulingConfig
(适用于读取池实例)
nodeaffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: LABEL_KEY
operator: In
values:
- "LABEL_VALUE "
如需详细了解如何在特定 Kubernetes 节点上运行数据库集群,请参阅使用调度功能将节点分配给数据库集群。
验证内核参数的应用
如需验证内核参数是否已应用于数据库 pod,请执行以下操作:
如果启用了高可用性(具体而言,
spec.availability.numberOfStandbys
设置为大于零的值),请验证数据库自定义资源的 DBCLUSTERPHASE 列中显示DBClusterReady
,并且 HAREADYSTATUS 列中显示True
。kubectl get dbcluster -n
DBCLUSTER_NAMESPACE DBCLUSTER_NAME 替换以下内容:
DBCLUSTER_NAME
:您要验证的数据库集群的名称。DBCLUSTER_NAMESPACE
:数据库集群所在的特定命名空间的名称。
输出示例如下所示:
NAME PRIMARYENDPOINT PRIMARYPHASE DBCLUSTERPHASE HAREADYSTATUS HAREADYREASON dbcluster-sample 10.29.21.240 Ready DBClusterReady True Ready
列出属于数据库集群的 Kubernetes Pod:
kubectl get pods -n
DBCLUSTER_NAMESPACE -l alloydbomni.internal.dbadmin.goog/dbcluster=DBCLUSTER_NAME 如需查看共享内存信息,请运行以下命令:
kubectl exec -n
DBCLUSTER_NAMESPACE POD_NAME -- grep Shmem /proc/meminfo输出的所有条目中都必须包含非零数字。
输出示例如下所示:
Shmem: 126255872 kB ShmemHugePages: 18403328 kB ShmemPmdMapped: 2961408 kB
如果您在任何条目中看到
0 kB
,请重启相应的 pod:kubectl delete pod -n
DBCLUSTER_NAMESPACE POD_NAME 在 Pod 处于
Running
状态后,重复第 1 步到第 5 步。