Dengan mengonfigurasi parameter kernel, AlloyDB Omni dapat menggunakan memori sistem dan resource IO secara lebih efisien saat menangani workload berat.
Prasyarat
Sebelum memulai, pastikan node Kubernetes Anda menjalankan kernel Linux 6.1 atau yang lebih baru, khususnya kernel yang mendukung flag MADV_COLLAPSE
dan MADV_POPULATE_WRITE
. Untuk mengetahui 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 mengetahui 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 suatu proses, lihat Dokumentasi untuk /proc/sys/vm |
Lebih besar 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 menyetel parameter kernel pada node yang diberi label
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 init container.MAX_MAP_COUNT
: jumlah maksimum area peta memori yang dapat dibuat oleh suatu proses—misalnya,1073741824
.CONTAINER_NAME
: nama penampung utama—misalnya,main
.CONTAINER_IMAGE
: nama image yang digunakan untuk container 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 outputnya akan 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 tanda 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 lognya ingin Anda periksa.Contoh outputnya akan 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 berikut dari manifes cluster database Anda:
primarySpec.schedulingConfig
untuk instance utamaspec.schedulingConfig
untuk instance kumpulan baca
nodeaffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: LABEL_KEY
operator: In
values:
- "LABEL_VALUE"
Untuk mengetahui 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 bahwa parameter kernel diterapkan ke pod database, lakukan hal berikut:
Jika ketersediaan tinggi diaktifkan, khususnya
spec.availability.numberOfStandbys
disetel ke nilai yang lebih besar dari nol, verifikasi bahwa 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 outputnya akan terlihat seperti berikut:
NAME PRIMARYENDPOINT PRIMARYPHASE DBCLUSTERPHASE HAREADYSTATUS HAREADYREASON dbcluster-sample 10.29.21.240 Ready DBClusterReady True Ready
Mencantumkan 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 outputnya akan terlihat seperti berikut:
Shmem: 126255872 kB ShmemHugePages: 18403328 kB ShmemPmdMapped: 2961408 kB
Jika Anda melihat
0 kB
muncul 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
.