Dokumen ini menjelaskan cara mengonfigurasi cluster dan VM untuk mendukung performa dan workload berlatensi rendah, dengan efisiensi komputasi {i>non-uniform memory access <i}(NUMA). Ada petunjuk untuk menyesuaikan Kubernetes setelan untuk node cluster. Dokumen ini juga berisi petunjuk untuk mengonfigurasi Mesin Virtual (VM) dengan afinitas NUMA sehingga dapat dijadwalkan dan memanfaatkan node NUMA.
Dengan NUMA-aware VM, semua komunikasi dalam VM bersifat lokal ke NUMA {i>node<i}. VM berbasis NUMA menghindari transaksi data ke dan dari jarak jauh resource yang dapat menurunkan performa VM.
Konfigurasi node untuk menggunakan NUMA
Bagian berikut ini menjelaskan cara mengonfigurasi Kubernetes penting untuk menyesuaikan node dan memastikan node tersebut dapat menjadwalkan NUMA-aware container. NUMA node ini disesuaikan untuk mengoptimalkan performa CPU dan memori. Ikuti petunjuk untuk setiap node yang ingin menjalankan NUMA-aware VM.
Mengupdate konfigurasi kubelet
Sebagai bagian dari konfigurasi node untuk mendukung NUMA afinitas node, Anda harus buat perubahan berikut pada konfigurasi kubelet:
- Mengaktifkan CPU Manager dengan kebijakan
static
- Mengaktifkan Memory Manager dengan kebijakan
Static
- Mengaktifkan pengelola Topologi dengan topologi
restricted
Untuk mengonfigurasi kubelet pada worker node:
Temukan file
kubelet
pada node pekerja Anda dan buka untuk mengedit:edit /etc/default/kubelet
Jika Anda tidak melihat file
kubelet
, buat file tersebut dengan perintah berikut:echo "KUBELET_EXTRA_ARGS=\"\"" >> /etc/default/kubelet
Perintah ini akan membuat file
kubelet
dengan objek kosongKUBELET_EXTRA_ARGS=""
.Untuk mengaktifkan CPU Manager dengan kebijakan
static
, tambahkan Flag--cpu-manager-policy=static
keKUBELET_EXTRA_ARGS=""
bagian dari file:KUBELET_EXTRA_ARGS="--cpu-manager-policy=static"
Untuk mengaktifkan Memory Manager dengan kebijakan
Static
, tambahkan Flag--memory-manager-policy=Static
keKUBELET_EXTRA_ARGS=""
bagian dari 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
keKUBELET_EXTRA_ARGS=""
bagian dari file:KUBELET_EXTRA_ARGS="--cpu-manager-policy=static --memory-manager-policy=Static --topology-manager-policy=restricted"
Periksa jumlah memori yang saat ini 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 pada node.Tetapkan tanda
--reserved-memory
di bagianKUBELET_EXTRA_ARGS
kubelet
hingga 100 mebibyte lebih banyak dari memori yang saat ini dicadangkan memperhitungkan ambang batas penghapusan. Jika tidak ada memori yang dicadangkan, Anda dapat lewati langkah ini.Misalnya, dengan memori
3470Mi
yang dicadangkan dari contoh dalam langkah sebelumnya, Anda mencadangkan3570Mi
memori 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 informasi selengkapnya tentang setelan kebijakan ini, lihat referensi berikut Dokumentasi Kubernetes:
Mengonfigurasi node untuk menggunakanlargepages
Setelah mengaktifkan Pengelola Memori dengan kebijakan Static
, Anda dapat menambahkan
halaman besar untuk lebih meningkatkan performa beban kerja container pada NUMA node Anda.
Halaman besar, seperti namanya, memungkinkan Anda menentukan halaman memori yang lebih besar
daripada standar 4 kibibyte (KiB). Runtime VM di GDC mendukung 2
mebibyte (MiB) dan 1 gibibyte (GiB). Anda dapat mengatur laman
yang sangat besar untuk sebuah {i>node<i}
saat runtime, atau saat mesin node melakukan booting. Sebaiknya Anda mengonfigurasi
halaman besar di setiap node tempat Anda ingin
menjalankan NUMA VM yang sadar.
Untuk mengkonfigurasi jumlah halaman besar dengan ukuran tertentu pada node NUMA Anda di gunakan perintah berikut:
echo HUGEPAGE_QTY > \ /sys/devices/system/node/NUMA_NODE/hugepages/hugepages-HUGEPAGE_SIZEkB/nr_hugepages
Ganti kode berikut:
HUGEPAGE_QTY
: jumlah sangat besar untuk mengalokasikan ukuran yang ditentukan.NUMA_NODE
: node NUMA, seperti sebagainode0
, tempat Anda mengalokasikan halaman besar.HUGEPAGE_SIZE
: ukuran halaman yang sangat besar dalam kibibyte,2048
(2 MiB) atau1048576
(1 GiB).
Mengonfigurasi VM untuk menggunakan node NUMA
Setelah node cluster Anda disesuaikan untuk NUMA, Anda dapat membuat NUMA VM yang sadar. NUMA VM yang mendukung dijadwalkan di NUMA node.
Untuk membuat NUMA-aware VM:
Ikuti petunjuk untuk membuat VM dari manifes.
Gunakan setelan
compute
berikut untuk mengonfigurasi VM Anda agar peka NUMA:spec.compute.guaranteed
: Setelguaranteed
ketrue
. Dengan pengaturan ini, Podvirt-launcher
dikonfigurasi untuk ditempatkan di Kubernetes Class Kualitas Layanan (QoS) dijamin.spec.compute.advancedCompute
:dedicatedCPUPlacement
: SeteldedicatedCPUPlacement
ketrue
. Ini mengatur pin CPU virtual ke CPU fisik dari {i>node<i}.hugePageSize
: TetapkanhugePageSize
ke2Mi
atau1Gi
untuk menentukan ukuran halaman yang sangat besar untuk digunakan VM Anda, 2 mebibyte atau 1 gibibyte.numaGuestMappingPassthrough
: Sertakan struktur kosong ({}
) untuk setelan ini. Setelan ini menetapkan afinitas NUMA sehingga VM Anda dijadwalkan di NUMA node saja.
Contoh manifes VirtualMachine berikut menunjukkan bagaimana VM yang peka konfigurasinya mungkin terlihat:
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