本页面介绍了如何设置托管 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 如需了解共享内存,请参阅透明 Hugepage 支持 |
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 节点上部署数据库集群,请在数据库集群清单的以下一个部分中添加 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 步。