本頁面提供相關資訊,說明如何設定 Kubernetes 節點,以代管 AlloyDB Omni 資料庫叢集,確保 AlloyDB Omni Kubernetes 運算子和 AlloyDB Omni 資料庫引擎發揮最佳效能。
設定核心參數後,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 如要瞭解共用記憶體,請參閱「透明巨頁支援」 |
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_NAME
Pod 處於
Running
狀態後,請重複步驟 1 到 5。