Dokumen ini menjelaskan cara mengonfigurasi cluster dan VM untuk mendukung workload 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 mendukung NUMA, semua komunikasi dalam VM bersifat lokal ke node NUMA. VM yang mendukung 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 mendukung NUMA. Node NUMA ini disesuaikan untuk mengoptimalkan performa CPU dan memori. Ikuti petunjuk untuk setiap node yang ingin Anda gunakan untuk menjalankan VM yang mendukung NUMA.
Memperbarui konfigurasi kubelet
Sebagai bagian dari konfigurasi node untuk mendukung afinitas node NUMA, Anda harus melakukan perubahan berikut dalam konfigurasi kubelet:
- Aktifkan CPU Manager dengan kebijakan
static - Aktifkan Memory Manager dengan kebijakan
Static - Aktifkan Topology Manager dengan topologi
restricted
Untuk mengonfigurasi kubelet di node pekerja:
Temukan file
kubeletdi node pekerja Anda dan buka untuk diedit:edit /etc/default/kubeletJika Anda tidak melihat file
kubelet, buat dengan perintah berikut:echo "KUBELET_EXTRA_ARGS=\"\"" >> /etc/default/kubeletPerintah ini akan membuat file
kubeletdengan bagian kosongKUBELET_EXTRA_ARGS="".Untuk mengaktifkan CPU Manager dengan kebijakan
static, tambahkan flag--cpu-manager-policy=staticke bagianKUBELET_EXTRA_ARGS=""file:KUBELET_EXTRA_ARGS="--cpu-manager-policy=static"
Untuk mengaktifkan Memory Manager dengan kebijakan
Statictambahkan--memory-manager-policy=Staticflag keKUBELET_EXTRA_ARGS=""bagian file:KUBELET_EXTRA_ARGS="--cpu-manager-policy=static --memory-manager-policy=Static"
Untuk mengaktifkan Topology Manager dengan kebijakan
restricted, tambahkan flag--topology-manager-policy=restrictedke 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.envOutputnya 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=3470Mimenunjukkan bahwa Google Distributed Cloud telah mencadangkan 3.470 mebibyte memori di node.Tetapkan flag
--reserved-memorydi bagianKUBELET_EXTRA_ARGSdari filekubeletke 100 mebibyte lebih banyak dari memori cadangan saat ini untuk memperhitungkan nilai minimum penghapusan. Jika tidak ada memori cadangan, Anda dapat melewati langkah ini.Misalnya, dengan memori cadangan
3470Midari contoh pada langkah sebelumnya, Anda mencadangkan memori3570Midalam 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_stateMulai ulang kubelet:
systemctl start kubelet
Untuk mengetahui informasi selengkapnya tentang setelan kebijakan ini, lihat dokumentasi Kubernetes berikut:
Mengonfigurasi node untuk menggunakan hugepage
Setelah mengaktifkan Memory Manager dengan kebijakan Static, Anda dapat menambahkan hugepage untuk lebih meningkatkan performa workload container di node NUMA.
Hugepage, seperti namanya, memungkinkan Anda menentukan halaman memori yang lebih besar dari 4 kibibyte (KiB) standar. VM Runtime di GDC mendukung hugepage 2 mebibyte (MiB) dan 1 gibibyte (GiB). Anda dapat menetapkan hugepage untuk node saat runtime, atau saat mesin node melakukan booting. Sebaiknya konfigurasi hugepage di setiap node yang ingin Anda gunakan untuk menjalankan VM yang mendukung 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_hugepagesGanti 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 mendukung NUMA. VM yang mendukung NUMA dijadwalkan di node NUMA.
Untuk membuat VM yang mendukung NUMA:
Ikuti petunjuk untuk membuat VM dari manifes.
Gunakan setelan
computeberikut untuk mengonfigurasi VM agar mendukung NUMA:spec.compute.guaranteed: Tetapkanguaranteedketrue. Dengan setelan ini, Podvirt-launcherdikonfigurasi untuk ditempatkan di kelas Kualitas Layanan (QoS) Terjamin Kubernetes .spec.compute.advancedCompute:dedicatedCPUPlacement: TetapkandedicatedCPUPlacementketrue. Setelan ini menyematkan CPU virtual ke CPU fisik node.hugePageSize: TetapkanhugePageSizeke2Miatau1Giuntuk menentukan ukuran hugepage yang akan digunakan VM, 2 mebibyte atau 1 gibibyte.numaGuestMappingPassthrough: Sertakan struktur kosong ({}) untuk setelan ini. Setelan ini menetapkan afinitas NUMA sehingga VM Anda hanya dijadwalkan di node NUMA.
Contoh manifes VirtualMachine berikut menunjukkan tampilan konfigurasi VM yang mendukung 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