設定 Kubernetes 中 AlloyDB Omni 的核心參數

本頁面提供相關資訊,說明如何設定 Kubernetes 節點,以代管 AlloyDB Omni 資料庫叢集,確保 AlloyDB Omni Kubernetes 運算子和 AlloyDB Omni 資料庫引擎發揮最佳效能。

設定核心參數後,AlloyDB Omni 就能在處理大量工作負載時,更有效率地使用系統記憶體和 IO 資源。

修課條件

開始前,請確認 Kubernetes 節點執行 Linux kernel 6.1 以上版本,特別是支援 MADV_COLLAPSEMADV_POPULATE_WRITE 標記的 kernel。如要進一步瞭解這些標記,請參閱 Linux madwise 說明文件

下表列出 Kubernetes 節點的必要核心參數和對應值,這些節點會執行資料庫叢集 Pod:

檔案
/sys/kernel/mm/transparent_hugepage/shmem_enabled
如要瞭解共用記憶體,請參閱「透明巨頁支援
within_sizealways
/proc/sys/vm/max_map_count
如要瞭解程序可建立的記憶體對應區域數量,請參閱 /proc/sys/vm 的說明文件
大於或等於 1073741824

如要使用 DaemonSet 在 Kubernetes 節點上設定核心參數,請按照下列步驟操作:

  1. 按照「為節點新增標籤」一文中的操作說明,為您打算執行資料庫叢集的節點套用標籤。

  2. 如要在標示為 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
  3. 部署 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
    
  4. 如要確認核心標記已順利套用,請針對部署 DaemonSet 後識別出的每個 Pod 執行下列指令:

    kubectl logs POD_NAME
    

    POD_NAME 替換為要檢查記錄的 Pod 名稱。

    輸出範例如下所示:

    always [within_size] advise never deny force
    

如要在 Kubernetes 節點上部署資料庫叢集,並使用建議的 Kernel 參數,請在資料庫叢集資訊清單的下列其中一個部分中,新增 nodeAffinity 部分:

  • primarySpec.schedulingConfig 主要執行個體
  • spec.schedulingConfig 讀取集區執行個體
      nodeaffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
          - matchExpressions:
            - key: LABEL_KEY
              operator: In
              values:
              - "LABEL_VALUE"

如要進一步瞭解如何在特定 Kubernetes 節點上執行資料庫叢集,請參閱使用排程將節點指派給資料庫叢集

確認核心參數是否已套用

如要確認核心參數已套用至資料庫 Pod,請執行下列操作:

  1. 如果已啟用高可用性 (具體來說,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
    
  2. 列出屬於資料庫叢集的 Kubernetes Pod:

    kubectl get pods -n DBCLUSTER_NAMESPACE -l alloydbomni.internal.dbadmin.goog/dbcluster=DBCLUSTER_NAME
    
  3. 如要檢查共用記憶體資訊,請執行下列指令:

    kubectl exec -n DBCLUSTER_NAMESPACE POD_NAME -- grep Shmem /proc/meminfo
    
  4. 所有項目都必須包含非零數字。

    輸出範例如下所示:

    Shmem:          126255872 kB
    ShmemHugePages: 18403328 kB
    ShmemPmdMapped:  2961408 kB
    

    如果任何項目顯示 0 kB,請重新啟動對應的 Pod:

    kubectl delete pod -n DBCLUSTER_NAMESPACE POD_NAME
    
  5. Pod 處於 Running 狀態後,請重複步驟 1 到 5。