設定核心參數後,AlloyDB Omni 就能在處理大量工作負載時,更有效率地使用系統記憶體和 IO 資源。
修課條件
開始前,請確認 Kubernetes 節點執行的是 Linux kernel 6.1 以上版本,特別是支援 MADV_COLLAPSE 和 MADV_POPULATE_WRITE 標記的 kernel。如要進一步瞭解這些標記,請參閱 Linux madwise 說明文件。
將建議的核心設定套用至 Kubernetes 節點
下表列出 Kubernetes 節點的必要核心參數和對應值,這些節點會執行資料庫叢集 Pod:
| 檔案 | 值 |
|---|---|
/sys/kernel/mm/transparent_hugepage/shmem_enabled如要瞭解共用記憶體,請參閱「Transparent 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:標籤的 ID,例如workload。LABEL_VALUE:與標籤的 ID 相關聯的資料,例如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_NAMEPod 處於
Running狀態後,請重複步驟 1 到 5。