Halaman ini memberikan informasi tentang cara menyiapkan node Kubernetes yang menghosting cluster database AlloyDB Omni untuk performa optimal operator AlloyDB Omni Kubernetes dan mesin database AlloyDB Omni.
Mengonfigurasi parameter kernel memungkinkan AlloyDB Omni menggunakan memori sistem dan resource IO secara lebih efisien saat menangani beban kerja yang berat.
Prasyarat
Sebelum memulai, pastikan node Kubernetes Anda menjalankan kernel Linux 6.1 atau yang lebih tinggi, khususnya kernel yang mendukung flag MADV_COLLAPSE
dan MADV_POPULATE_WRITE
. Untuk informasi selengkapnya tentang flag ini, lihat dokumentasi madwise
Linux.
Menerapkan setelan kernel yang direkomendasikan ke node Kubernetes
Tabel berikut mencantumkan parameter kernel yang diperlukan dan nilai yang sesuai untuk node Kubernetes yang menjalankan pod cluster database:
File | Nilai |
---|---|
/sys/kernel/mm/transparent_hugepage/shmem_enabled Untuk informasi tentang memori bersama, lihat Dukungan Hugepage Transparan |
within_size atau always |
/proc/sys/vm/max_map_count Untuk mengetahui informasi tentang jumlah area peta memori yang dapat dibuat oleh proses, lihat Dokumentasi untuk /proc/sys/vm |
Lebih dari atau sama dengan 1073741824 |
Untuk mengonfigurasi parameter kernel di node Kubernetes menggunakan DaemonSet, lakukan hal berikut:
Terapkan label ke node tempat Anda berencana menjalankan cluster database menggunakan petunjuk di Menambahkan label ke node.
Untuk menetapkan parameter kernel pada node berlabel
LABEL_KEY=LABEL_VALUE
, buat 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
Ganti kode berikut:
DS_NAMESPACE
: namespace tempat Anda ingin men-deploy DaemonSet—misalnya,default
.LABEL_KEY
: ID untuk label—misalnya,workload
.LABEL_VALUE
: data yang terkait dengan ID untuk label—misalnya,database
.INIT_IMAGE
: nama image yang digunakan untuk penampung init.MAX_MAP_COUNT
: jumlah maksimum area peta memori yang dapat dibuat oleh proses—misalnya,1073741824
.CONTAINER_NAME
: nama penampung utama—misalnya,main
.CONTAINER_IMAGE
: nama image yang digunakan untuk penampung utama—misalnya,latest
.
Setelah men-deploy DaemonSet, untuk memverifikasi bahwa semua pod di cluster Kubernetes Anda berada dalam status
Running
dan Anda memiliki satu pod untuk setiap node dengan labelLABEL_KEY=LABEL_VALUE
, gunakan perintah berikut:kubectl get pods -l LABEL_KEY=LABEL_VALUE
Contoh output-nya terlihat seperti berikut:
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
Untuk memverifikasi bahwa flag kernel berhasil diterapkan, untuk setiap pod yang diidentifikasi setelah men-deploy DaemonSet, jalankan perintah berikut:
kubectl logs POD_NAME
Ganti
POD_NAME
dengan nama pod yang log-nya ingin Anda periksa.Contoh output-nya terlihat seperti berikut:
always [within_size] advise never deny force
Menjalankan cluster database di node Kubernetes dengan parameter kernel yang direkomendasikan
Untuk men-deploy cluster database di node Kubernetes dengan parameter kernel yang direkomendasikan, tambahkan bagian nodeAffinity
ke salah satu bagian manifes cluster database berikut:
primarySpec.schedulingConfig
untuk instance utamaspec.schedulingConfig
untuk instance kumpulan baca
nodeaffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: LABEL_KEY
operator: In
values:
- "LABEL_VALUE"
Untuk informasi selengkapnya tentang cara menjalankan cluster database di node Kubernetes tertentu, lihat Menetapkan node ke cluster database menggunakan penjadwalan.
Memverifikasi penerapan parameter kernel
Untuk memverifikasi parameter kernel yang diterapkan ke pod database, lakukan hal berikut:
Jika ketersediaan tinggi diaktifkan, khususnya
spec.availability.numberOfStandbys
ditetapkan ke nilai yang lebih besar dari nol, pastikan resource kustom database menampilkanDBClusterReady
di kolom DBCLUSTERPHASE danTrue
di kolom HAREADYSTATUS.kubectl get dbcluster -n DBCLUSTER_NAMESPACE DBCLUSTER_NAME
Ganti kode berikut:
DBCLUSTER_NAME
: nama cluster database yang Anda verifikasi.DBCLUSTER_NAMESPACE
: nama namespace tertentu tempat cluster database Anda berada.
Contoh output-nya terlihat seperti berikut:
NAME PRIMARYENDPOINT PRIMARYPHASE DBCLUSTERPHASE HAREADYSTATUS HAREADYREASON dbcluster-sample 10.29.21.240 Ready DBClusterReady True Ready
Cantumkan pod Kubernetes yang termasuk dalam cluster database:
kubectl get pods -n DBCLUSTER_NAMESPACE -l alloydbomni.internal.dbadmin.goog/dbcluster=DBCLUSTER_NAME
Untuk memeriksa informasi memori bersama, jalankan perintah berikut:
kubectl exec -n DBCLUSTER_NAMESPACE POD_NAME -- grep Shmem /proc/meminfo
Output harus berisi angka selain nol di semua entri.
Contoh output-nya terlihat seperti berikut:
Shmem: 126255872 kB ShmemHugePages: 18403328 kB ShmemPmdMapped: 2961408 kB
Jika Anda melihat
0 kB
ditampilkan di salah satu entri, mulai ulang pod yang sesuai:kubectl delete pod -n DBCLUSTER_NAMESPACE POD_NAME
Ulangi langkah 1 hingga 5 setelah pod berada dalam status
Running
.