Dokumen ini menjelaskan cara mengonfigurasi cluster dan VM untuk mendukung beban kerja berperforma tinggi dan latensi rendah dengan efisiensi komputasi akses memori tidak seragam (NUMA). Ada petunjuk untuk menyesuaikan setelan Kubernetes untuk node cluster. Dokumen ini juga menyertakan petunjuk untuk mengonfigurasi Virtual Machine (VM) dengan afinitas NUMA sehingga VM dijadwalkan dan memanfaatkan node NUMA.
Dengan VM yang kompatibel dengan NUMA, semua komunikasi dalam VM bersifat lokal ke node NUMA. VM yang kompatibel dengan NUMA menghindari transaksi data ke dan dari resource jarak jauh yang dapat menurunkan performa VM.
Mengonfigurasi node untuk menggunakan NUMA
Bagian berikut menjelaskan cara mengonfigurasi komponen Kubernetes penting untuk menyesuaikan node dan memastikan node dapat menjadwalkan container yang kompatibel dengan NUMA. Node NUMA ini disetel untuk mengoptimalkan performa CPU dan memori. Ikuti petunjuk untuk setiap node yang ingin Anda jalankan VM yang kompatibel dengan NUMA.
Memperbarui konfigurasi kubelet
Sebagai bagian dari konfigurasi node untuk mendukung afinitas node NUMA, Anda perlu melakukan perubahan berikut dalam konfigurasi kubelet:
- Mengaktifkan CPU Manager dengan kebijakan
static
- Aktifkan Pengelola Memori dengan kebijakan
Static
- Aktifkan Pengelola topologi dengan topologi
restricted
Untuk mengonfigurasi kubelet di node pekerja:
Temukan file
kubelet
di node pekerja Anda dan buka untuk mengedit:edit /etc/default/kubelet
Jika Anda tidak melihat file
kubelet
, buat dengan perintah berikut:echo "KUBELET_EXTRA_ARGS=\"\"" >> /etc/default/kubelet
Perintah ini akan membuat file
kubelet
dengan bagianKUBELET_EXTRA_ARGS=""
yang kosong.Untuk mengaktifkan CPU Manager dengan kebijakan
static
, tambahkan flag--cpu-manager-policy=static
ke bagianKUBELET_EXTRA_ARGS=""
file:KUBELET_EXTRA_ARGS="--cpu-manager-policy=static"
Untuk mengaktifkan Pengelola Memori dengan kebijakan
Static
, tambahkan flag--memory-manager-policy=Static
ke bagianKUBELET_EXTRA_ARGS=""
file:KUBELET_EXTRA_ARGS="--cpu-manager-policy=static --memory-manager-policy=Static"
Untuk mengaktifkan Topology Manager dengan kebijakan
restricted
, tambahkan flag--topology-manager-policy=restricted
ke bagianKUBELET_EXTRA_ARGS=""
file:KUBELET_EXTRA_ARGS="--cpu-manager-policy=static --memory-manager-policy=Static --topology-manager-policy=restricted"
Periksa jumlah memori saat ini yang dicadangkan oleh Google Distributed Cloud:
cat /var/lib/kubelet/kubeadm-flags.env
Outputnya akan terlihat seperti berikut ini:
KUBELET_KUBEADM_ARGS="--anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock --feature-gates=SeccompDefault=true --kube-reserved=cpu=100m,memory=3470Mi --max-pods=110 --node-ip=192.168.1.190 --node-labels=baremetal.cluster.gke.io/k8s-ip=192.168.1.190,baremetal.cluster.gke.io/namespace=cluster-user001,baremetal.cluster.gke.io/node-pool=node-pool-1,cloud.google.com/gke-nodepool=node-pool-1 --pod-infra-container-image=gcr.io/anthos-baremetal-release/pause-amd64:3.1-gke.5 --provider-id=baremetal://192.168.1.190 --read-only-port=10255 --rotate-server-certificates=true --seccomp-default=true"
Setelan
--kube-reserved=cpu=100m,memory=3470Mi
menunjukkan bahwa Google Distributed Cloud telah mencadangkan memori sebesar 3.470 mebibyte di node.Tetapkan tanda
--reserved-memory
di bagianKUBELET_EXTRA_ARGS
pada filekubelet
menjadi 100 mebibyte lebih banyak dari memori yang dicadangkan saat ini untuk memperhitungkan nilai minimum pengusiran. Jika tidak ada memori yang dicadangkan, Anda dapat melewati langkah ini.Misalnya, dengan memori yang dicadangkan sebesar
3470Mi
dari contoh pada langkah sebelumnya, Anda mencadangkan memori sebesar3570Mi
dalam filekubelet
:KUBELET_EXTRA_ARGS="--cpu-manager-policy=static --memory-manager-policy=Static --topology-manager-policy=restricted --reserved-memory=0:memory=3570Mi"
Hapus file status CPU dan memori dari direktori
/var/lib
:rm /var/lib/cpu_manager_state rm /var/lib/memory_manager_state
Mulai ulang kubelet:
systemctl start kubelet
Untuk mengetahui informasi selengkapnya tentang setelan kebijakan ini, lihat dokumentasi Kubernetes berikut:
Mengonfigurasi node untuk menggunakan halaman besar
Setelah mengaktifkan Pengelola Memori dengan kebijakan Static
, Anda dapat menambahkan
hugepage untuk lebih meningkatkan performa beban kerja penampung di node NUMA.
Hugepage, seperti namanya, memungkinkan Anda menentukan halaman memori yang lebih besar daripada 4 kibibyte (KiB) standar. Runtime VM di GDC mendukung hugepage 2
mebibyte (MiB) dan 1 gibibyte (GiB). Anda dapat menyetel hugepages untuk node
saat runtime, atau saat mesin node di-boot. Sebaiknya Anda mengonfigurasi
hugepage di setiap node yang ingin Anda jalankan VM yang kompatibel dengan NUMA.
Untuk mengonfigurasi jumlah hugepage dengan ukuran tertentu di node NUMA saat runtime, gunakan perintah berikut:
echo HUGEPAGE_QTY > \ /sys/devices/system/node/NUMA_NODE/hugepages/hugepages-HUGEPAGE_SIZEkB/nr_hugepages
Ganti kode berikut:
HUGEPAGE_QTY
: jumlah hugepage yang akan dialokasikan dengan ukuran yang ditentukan.NUMA_NODE
: node NUMA, sepertinode0
, tempat Anda mengalokasikan hugepage.HUGEPAGE_SIZE
: ukuran hugepage dalam kibibyte,2048
(2 MiB) atau1048576
(1 GiB).
Mengonfigurasi VM untuk menggunakan node NUMA
Setelah node cluster disesuaikan untuk NUMA, Anda dapat membuat VM yang kompatibel dengan NUMA. VM yang kompatibel dengan NUMA dijadwalkan di node NUMA.
Untuk membuat VM yang kompatibel dengan NUMA:
Ikuti petunjuk untuk membuat VM dari manifes.
Gunakan setelan
compute
berikut untuk mengonfigurasi VM agar kompatibel dengan NUMA:spec.compute.guaranteed
: Tetapkanguaranteed
ketrue
. Dengan setelan ini, Podvirt-launcher
dikonfigurasi untuk ditempatkan di class Quality of Service (QoS) yang Dijamin Kubernetes.spec.compute.advancedCompute
:dedicatedCPUPlacement
: TetapkandedicatedCPUPlacement
ketrue
. Setelan ini menyematkan CPU virtual ke CPU fisik node.hugePageSize
: TetapkanhugePageSize
ke2Mi
atau1Gi
untuk menentukan ukuran halaman besar yang akan digunakan VM Anda, 2 mebibyte atau 1 gibibyte.numaGuestMappingPassthrough
: Sertakan struktur kosong ({}
) untuk setelan ini. Setelan ini menetapkan afinitas NUMA sehingga VM Anda dijadwalkan hanya di node NUMA.
Contoh manifes VirtualMachine berikut menunjukkan kemungkinan tampilan konfigurasi VM yang kompatibel dengan NUMA:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: vm1 spec: compute: cpu: vcpus: 2 guaranteed: true advancedCompute: dedicatedCPUPlacement: true hugePageSize: 2Mi numaGuestMappingPassthrough: {} memory: capacity: 256Mi interfaces: - name: eth0 networkName: pod-network default: true disks: - virtualMachineDiskName: disk-from-gcs boot: true readOnly: true