このページでは、AlloyDB Omni Kubernetes オペレーターと AlloyDB Omni データベース エンジンのパフォーマンスを最適化するために、AlloyDB Omni データベース クラスタをホストする Kubernetes ノードの設定について説明します。
カーネル パラメータを構成すると、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
: ラベルの 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
を持つノードごとに 1 つの 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 を繰り返します。