Salah satu cara untuk meningkatkan performa aplikasi berbasis container adalah dengan meningkatkan resource cluster dengan menambahkan node atau menambahkan resource, seperti CPU atau memori, ke node Anda. Namun, pendekatan ini bisa menjadi mahal. Menyesuaikan Node cluster Anda untuk performa yang lebih baik akan membantu Anda mengoptimalkan penggunaan resource untuk beban kerja dengan cara yang hemat biaya. Dokumen ini menjelaskan cara menggunakan Performance Tuning Operator untuk menyetel worker node guna mengoptimalkan performa beban kerja untuk GKE di Bare Metal.
Untuk mendapatkan hasil maksimal dari hardware dan software dasar, berbagai jenis aplikasi, terutama aplikasi berperforma tinggi, manfaatkan setelan setelan node seperti berikut:
- CPU khusus untuk workload yang sensitif terhadap performa
- CPU yang dicadangkan untuk Daemon dan Layanan Kubernetes standar
- Ukuran halaman memori yang ditingkatkan dengan ukuran besar 1 GiB (gibibyte) atau 2 MiB (mebibyte)
- Distribusi beban kerja berdasarkan arsitektur sistem, seperti prosesor multi-core dan NUMA
Dengan Performance Tuning Operator, Anda dapat mengonfigurasi setelan performa level node dengan membuat resource kustom Kubernetes yang menerapkan konfigurasi performa. Berikut ini manfaatnya:
Antarmuka konfigurasi tunggal dan terpadu: Dengan Performance Tuning Operator, Anda dapat mengupdate satu atau beberapa manifes
PerformanceTuningProfile
yang dapat diterapkan ke worker node dengan pemilih node. Anda tidak perlu mengonfigurasi setiap node satu per satu dengan beberapa setelan konfigurasi dan kebijakan. Pendekatan ini memungkinkan Anda mengelola konfigurasi tingkat node dan tingkat container dengan satu cara terpadu.Persistensi dan keandalan: Anda juga mendapatkan semua keandalan yang diberikan Kubernetes dengan arsitektur ketersediaannya yang tinggi. Resource kustom
PerformanceTuningProfile
dapat diperbarui kapan pun Anda mau dan setelannya akan tetap ada di seluruh operasi cluster utama, seperti upgrade.
Performance Tuning Operator bekerja dengan mengorkestrasi fitur dan alat Kubernetes serta sistem operasi (OS) terkait performa berikut ini:
Untuk mencegah konflik, saat Anda menggunakan Operator Penyesuaian Performa, sebaiknya jangan menggunakan alat dan fitur Kubernetes dan OS yang disebutkan sebelumnya secara terpisah.
Prasyarat dan batasan
Berikut adalah prasyarat dan batasan untuk menggunakan Operator Penyesuaian Performa:
Khusus Red Hat Enterprise Linux (RHEL): Performance Tuning Operator hanya didukung untuk node yang menjalankan versi RHEL yang didukung.
Cluster pengguna atau hybrid dengan worker node: Performance Tuning Operator didukung untuk digunakan dengan worker node di cluster pengguna atau hybrid saja. Penggunaan Performance Tuning Operator untuk menyesuaikan node bidang kontrol tidak didukung. Operator Penyesuaian Performa menggunakan pemilih node untuk menentukan cara menerapkan profil penyesuaian. Untuk memastikan bahwa profil penyesuaian hanya diterapkan ke worker node,
nodeSelector
di setiap resource kustom profil harus menyertakan label node pekerja standarnode-role.kubernetes.io/worker: ""
. JikanodeSelector
dalam profil penyesuaian cocok dengan label pada node bidang kontrol, node tersebut tidak disesuaikan dan kondisi error akan ditetapkan. Untuk mengetahui informasi selengkapnya tentang kondisi error, lihat bagian Memeriksa status. Pastikan cluster Anda beroperasi dengan benar sebelum menginstal Performance Tuning Operator dan menerapkan profil tuning.TuneD 2.22.0: Performance Tuning Operator memerlukan TuneD versi 2.22.0 yang sudah diinstal sebelumnya di worker node yang ingin Anda sesuaikan. Untuk informasi tambahan tentang TuneD, termasuk petunjuk penginstalan, lihat Mulai menggunakan TuneD dalam dokumentasi Red Hat Enterprise Linux. Operator Penyesuaian Performa menggunakan TuneD dengan profil
cpu-partitioning
. Jika tidak memiliki profil ini, Anda dapat menginstalnya dengan perintah berikut:dnf install -y tuned-profiles-cpu-partitioning
Persyaratan resource beban kerja: Untuk mendapatkan hasil maksimal dari penyesuaian performa, Anda harus memiliki pemahaman yang baik tentang persyaratan memori dan CPU (permintaan dan batas resource) untuk beban kerja Anda.
Resource node yang tersedia: Menemukan resource CPU dan memori untuk node Anda. Anda bisa mendapatkan informasi CPU dan memori mendetail untuk node dalam file
/proc/cpuinfo
dan/proc/meminfo
. Anda juga dapat menggunakankubectl get nodes
untuk mengambil jumlah resource komputasi dan memori (status.allocatable
) yang dimiliki node pekerja yang tersedia untuk Pod.Memerlukan pengurasan: Sebagai bagian dari proses tuning, Performance Tuning Operator akan mengosongkan node terlebih dahulu, lalu menerapkan profil penyesuaian. Oleh karena itu, node dapat melaporkan status
NotReady
selama penyesuaian performa. Sebaiknya gunakan strategi update berkelanjutan (spec.updateStrategy.type: rolling
), bukan update batch untuk meminimalkan ketidaktersediaan workload.Memerlukan reboot: Agar perubahan penyesuaian node diterapkan, Performance Tuning Operator akan memulai ulang node setelah menerapkan profil penyesuaian.
Menginstal Operator Tuning Performa
Performance Tuning Operator pada dasarnya terdiri dari dua pengontrol (Deployment dan DaemonSet) yang saling berinteraksi untuk menyesuaikan node berdasarkan setelan profil Anda.
Secara default, Performance Tuning Operator tidak diinstal dengan GKE pada Bare Metal. Anda mendownload manifes Performance Tuning Operator dari Cloud Storage dan menggunakan kubectl apply
untuk membuat resource Performance Tuning Operator di cluster Anda.
Untuk mengaktifkan penyesuaian performa dengan nilai default untuk cluster Anda:
Buat direktori
performance-tuning
di workstation admin Anda.Dari direktori
performance-tuning
, download paket Performance Tuning Operator terbaru dari bucket rilis Cloud Storage:gsutil cp -r gs://anthos-baremetal-release/node-performance-tuning/0.1.0-gke.47 .
File yang didownload mencakup manifes untuk Deployment
performance-tuning-operator
dan DaemonSetnodeconfig-controller-manager
. Manifes untuk fungsi terkait, seperti role-based access control (RBAC) dan kontrol penerimaan dinamis, juga disertakan.Sebagai pengguna root, terapkan semua manifes Performance Tuning Operator secara rekursif ke cluster pengguna (atau hybrid):
kubectl apply -f performance-tuning --recursive –-kubeconfig USER_KUBECONFIG
Setelah Deployment dan DaemonSet dibuat dan dijalankan, satu-satunya interaksi Anda adalah mengedit dan menerapkan manifes
PerformanceTuningProfile
.
Meninjau persyaratan resource untuk workload Anda
Agar dapat menyesuaikan node, Anda perlu memahami kebutuhan resource komputasi dan memori workload Anda. Jika worker node Anda memiliki resource yang cukup, node dapat disesuaikan untuk menyediakan memori yang terjamin (standar dan berukuran besar) untuk beban kerja Anda dalam class Quality of Service (QoS) yang dijamin.
Kubernetes menetapkan class QoS ke setiap Pod, berdasarkan batasan resource yang Anda tentukan untuk container terkait. Kubernetes kemudian menggunakan class QoS untuk menentukan cara menjadwalkan Pod dan container serta mengalokasikan resource ke workload Anda. Untuk memanfaatkan sepenuhnya Node tuning, workload Anda harus memiliki permintaan CPU atau resource memori atau setelan batas.
Agar bisa mendapatkan class QoS yang dijamin, Pod Anda harus memenuhi persyaratan berikut:
- Untuk setiap Container dalam Pod:
- Tentukan nilai untuk permintaan resource memori
(
spec.containers[].resources.requests.memory
) dan batas (spec.containers[].resources.limits.memory
). - Nilai batas memori harus sama dengan nilai permintaan memori.
- Tentukan nilai untuk permintaan resource CPU
(
spec.containers[].resources.requests.cpu
) dan batas (spec.containers[].resources.limits.cpu
). - Nilai batas CPU harus sama dengan nilai permintaan CPU.
- Tentukan nilai untuk permintaan resource memori
(
Cuplikan spesifikasi Pod berikut menunjukkan setelan resource CPU yang memenuhi persyaratan class QoS yang dijamin:
spec:
containers:
- name: sample-app
image: images.my-company.example/app:v4
resources:
requests:
memory: "128Mi"
cpu: "2"
limits:
memory: "128Mi"
cpu: "2"
...
Saat Anda mengambil detail pod dengan kubectl get pods
, bagian status
harus menyertakan class QoS yang ditetapkan seperti ditunjukkan dalam contoh berikut:
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2023-09-22T21:05:23Z"
generateName: my-deployment-6fdd69987d-
labels:
app: metrics
department: sales
pod-template-hash: 6fdd69987d
name: my-deployment-6fdd69987d-7kv42
namespace: default
...
spec:
containers:
...
status:
conditions:
- lastProbeTime: null
lastTransitionTime: "2023-09-22T21:05:23Z"
status: "True"
type: Initialized
...
qosClass: BestEffort
startTime: "2023-09-22T21:05:23Z"
Untuk mengetahui informasi selengkapnya tentang class QoS, lihat Kualitas Pod Class Layanan dalam dokumentasi Kubernetes. Untuk mengetahui petunjuk cara mengonfigurasi Pod dan container agar mendapatkan class QoS, lihat Mengonfigurasi Kualitas Layanan untuk Pod
Persyaratan CPU
Saat men-tuning node, Anda dapat menentukan kumpulan core CPU yang dicadangkan (spec.cpu.reservedCPUs
) untuk menjalankan daemon sistem Kubernetes seperti runtime kubelet dan container. Set CPU yang dicadangkan yang sama ini juga menjalankan daemon
sistem operasi, seperti sshd
dan udev
. Sisa inti CPU pada
dialokasikan sebagai terisolasi. CPU yang terisolasi ditujukan untuk aplikasi yang terikat CPU, yang memerlukan waktu CPU khusus tanpa gangguan dari aplikasi
lain atau gangguan dari jaringan atau perangkat lain.
Untuk menjadwalkan Pod di CPU yang terisolasi dari node pekerja:
Mengonfigurasi Pod untuk mendapatkan kualitas layanan (QoS) yang terjamin.
Persyaratan dan batas CPU harus ditentukan dalam bilangan bulat. Jika Anda menentukan resource CPU parsial dalam spesifikasi Pod, seperti
cpu: 0.5
ataucpu: 250m
(250 millicore), penjadwalan tidak dapat dijamin.
Persyaratan memori
Saat men-tune node dengan Performance Tuning Operator, Anda dapat membuat halaman besar dan mengaitkannya dengan node non-uniform memory access (NUMA) pada mesin. Berdasarkan setelan Pod dan Node, Pod dapat dijadwalkan dengan afinitas NUMA node.
Membuat profil penyesuaian performa
Setelah menginstal Operator Penyesuaian Performa, Anda hanya berinteraksi dengan cluster yang menjalankan beban kerja Anda. Anda membuat resource kustom PerformanceTuningProfile
langsung
di cluster pengguna atau cluster hybrid, bukan di cluster admin. Setiap
resource PerformanceTuningProfile
berisi sekumpulan parameter yang menentukan
konfigurasi performa yang diterapkan pada sebuah node.
nodeSelector
di resource menentukan node tempat
profil penyesuaian diterapkan. Untuk menerapkan profil ke node, Anda harus menempatkan label pasangan nilai kunci yang sesuai pada node tersebut. Profil penyesuaian diterapkan ke
node yang memiliki semua label yang ditentukan di kolom nodeSelector
.
Anda dapat membuat beberapa resource PerformanceTuningProfile
dalam sebuah cluster. Jika
lebih dari satu profil cocok dengan node yang diberikan, kondisi error akan ditetapkan dalam
status
resource kustom PerformanceTuningProfile
. Untuk mengetahui informasi
selengkapnya tentang bagian status
, lihat Memeriksa status.
Tetapkan namespace untuk resource kustom PerformanceTuningProfile
Anda ke
kube-system
.
Untuk menyesuaikan satu atau beberapa worker node:
Edit manifes
PerformanceTuningProfile
.Untuk mengetahui informasi tentang setiap kolom dalam manifes dan contoh manifes, lihat referensi resource
PerformanceTuningProfile
.(Opsional) Untuk Node pekerja tempat Anda menerapkan profil, tambahkan label agar cocok dengan pasangan nilai kunci
spec.nodeSelector
.Jika pasangan nilai kunci
spec.nodeSelector
tidak ditentukan di resource kustomPerformanceTuningProfile
, profil akan diterapkan ke semua node pekerja.Terapkan manifes ke cluster Anda.
kubectl apply -f PROFILE_MANIFEST --kubeconfig KUBECONFIG
Ganti kode berikut:
PROFILE_MANIFEST
: jalur file manifes untuk resource kustomPerformanceTuningProfile
.KUBECONFIG
: jalur file kubeconfig cluster.
Menghapus profil penyesuaian
Untuk mereset node ke status aslinya yang belum disetel:
Hapus resource kustom
PerformanceTuningProfile
dari cluster.Update atau hapus label pada node agar tidak dipilih oleh profil penyesuaian lagi.
Jika Anda memiliki beberapa profil penyesuaian yang terkait dengan node, ulangi langkah-langkah sebelumnya, sesuai kebutuhan.
Menjeda profil penyesuaian
Jika perlu menjalankan pemeliharaan pada cluster, Anda dapat menjeda
tuning untuk sementara dengan mengedit resource kustom PerformanceTuningProfile
. Sebaiknya
jeda tuning sebelum menjalankan operasi cluster penting, seperti
upgrade cluster.
Aplikasi profil yang gagal adalah kasus lain saat Anda mungkin menjeda tuning. Jika proses penyesuaian tidak berhasil, pengontrol dapat terus mencoba menyesuaikan node, yang dapat menyebabkan node dimulai ulang berulang kali. Jika Anda mengamati status node yang beralih antara status siap dan tidak siap, jeda penyelesaian agar Anda dapat pulih dari status yang rusak.
Untuk menjeda tuning:
Edit manifes resource kustom
PerformanceTuningProfile
untuk menetapkanspec.paused
ketrue
.Gunakan
kubectl apply
untuk mengupdate resource.
Saat penyesuaian performa dijeda, pengontrol Performance Tuning Operator menghentikan semua operasinya. Menjeda akan mencegah risiko operasi pengontrol Performance Tuning Operator yang bertentangan dengan GKE pada operasi pengontrol Bare Metal.
Referensi resource PerformanceTuningProfile
Bagian ini menjelaskan setiap kolom dalam resource kustom PerformanceTuningProfile
. Resource ini digunakan untuk membuat profil penyesuaian untuk satu atau
beberapa node cluster Anda. Semua kolom dalam resource dapat diubah setelah
pembuatan profil. Profil harus berada dalam namespace kube-system
.
Manifes profil contoh numa
berikut untuk node dengan 8 core CPU
menentukan alokasi resource berikut:
4 core CPU (
0-3
) dicadangkan untuk overhead sistem Kubernetes.4 core CPU (
4-7
) disisihkan hanya untuk workload.Memori node dibagi menjadi halaman 2 MiB secara default, bukan halaman 4-Ki standar.
10 halaman memori berukuran 1 GiB disimpan untuk digunakan oleh node NUMA 0.
5 halaman memori berukuran 2 MiB sisihkan untuk digunakan oleh NUMA node 1.
Pengelola Topologi menggunakan kebijakan upaya terbaik untuk menjadwalkan beban kerja.
apiVersion: anthos.gke.io/v1alpha1
kind: PerformanceTuningProfile
metadata:
name: numa
namespace: kube-system
spec:
cpu:
isolatedCPUs: 4-7
reservedCPUs: 0-3
defaultHugepagesSize: 2M
nodeSelector:
app: database
node-role.kubernetes.io/worker: ""
pages:
- count: 10
numaNode: 0
size: 1G
- count: 5
numaNode: 1
size: 2M
topologyManagerPolicy: best-effort
Anda dapat mengambil definisi resource kustom PerformanceTuningProfile
terkait
dari grup anthos.gke.io
di cluster Anda. Definisi resource
kustom diinstal setelah anotasi fitur pratinjau ditambahkan ke
resource cluster yang dikelola sendiri.
Konfigurasi CPU
Properti | Deskripsi |
---|---|
cpu.reservedCPUs |
Wajib. Dapat Berubah. String. Kolom ini menentukan sekumpulan core CPU sebagai cadangan untuk daemon sistem Kubernetes, seperti kubelet, runtime container, dan detektor masalah node. Core CPU ini juga digunakan untuk
daemon sistem sistem operasi (OS), seperti sshd dan
udev .
Kolom |
cpu.isolatedCPUs |
Opsional. Dapat Berubah. String. Kolom cpu.isolatedCPUs
menentukan kumpulan CPU yang digunakan secara eksklusif untuk aplikasi
yang sensitif terhadap performa. CPU Manager menjadwalkan container hanya pada CPU yang tidak dicadangkan, berdasarkan class Kualitas Layanan (QoS) Kubernetes.
Untuk memastikan bahwa workload berjalan di CPU yang terisolasi,
konfigurasikan Pod dengan class QoS yang dijamin dan
tetapkan resource CPU ke Pod atau Container.
Untuk penjadwalan Pod yang dijamin, Anda harus menentukan unit CPU bilangan bulat, bukan resource CPU parsial (cpu: "0.5" ).
apiVersion: v1 kind: Pod ... spec: containers: ... resources: limits: cpu: "1" requests: cpu: "1" ... Memaksimalkan CPU terisolasi untuk workload memberikan manfaat performa terbaik. Kolom ini berisi daftar nomor CPU atau rentang nomor CPU.
Pastikan daftar CPU tidak tumpang tindih dengan daftar yang ditentukan pada
|
cpu.balanceIsolated |
Opsional. Dapat Berubah. Boolean. Default: true . Kolom ini menentukan apakah Set CPU yang terisolasi memenuhi syarat atau tidak untuk load balancing workload di seluruh CPU secara otomatis. Jika kolom ini ditetapkan ke
false , workload Anda harus menetapkan setiap thread secara eksplisit
ke CPU tertentu untuk mendistribusikan beban ke berbagai CPU. Dengan penugasan CPU eksplisit, Anda akan mendapatkan performa yang paling dapat diprediksi untuk workload yang dijamin, tetapi menambah kompleksitas pada workload Anda. |
cpu.globallyEnableIRQLoadBalancing |
Wajib. Dapat Berubah. Boolean. Default: true . Kolom ini menentukan apakah akan mengaktifkan load balancing permintaan interupsi (IRQ) untuk set CPU yang terisolasi atau tidak. |
Konfigurasi memori
Properti | Deskripsi |
---|---|
defaultHugePageSize |
Opsional. Dapat Berubah. Enumerasi: 1G atau 2M .
Kolom ini menentukan ukuran halaman besar default dalam parameter booting kernel.
Largepages dialokasikan pada waktu booting, sebelum memori terfragmentasi.
Perlu diperhatikan bahwa menyetel ukuran default halaman besar ke 1G
akan menghapus semua 2 juta folder terkait dari node. Dengan ukuran halaman besar default 1G, Anda tidak dapat mengonfigurasi 2 juta halaman besar dalam node.
|
pages |
Opsional. Dapat Berubah. Bilangan bulat. Kolom ini menentukan jumlah halaman besar yang akan dibuat pada waktu booting. Kolom ini menerima array halaman. Periksa memori yang tersedia untuk node Anda sebelum menentukan halaman besar. Jangan meminta halaman yang lebih besar dari yang dibutuhkan dan juga jangan mencadangkan semua memori untuk halaman berukuran besar. Workload Anda juga memerlukan memori standar. |
Pilihan Node
Properti | Deskripsi |
---|---|
nodeSelector |
Wajib. Dapat Berubah. Kolom ini selalu memerlukan label node pekerja Kubernetes, node-role.kubernetes.io/worker:"" , yang memastikan bahwa penyesuaian performa hanya dilakukan pada node pekerja. Kolom ini menggunakan label node opsional sebagai pasangan nilai kunci. Label pasangan nilai kunci
digunakan untuk memilih worker node tertentu dengan label yang cocok. Jika label
nodeSelector cocok dengan label pada node pekerja, profil performa akan diterapkan ke node tersebut. Jika Anda tidak menentukan
label nilai kunci di profil, label tersebut akan diterapkan ke semua worker node di
cluster.
Misalnya, ... spec: nodeSelector: app: database node-role.kubernetes.io/worker: "" ... |
Konfigurasi Kubelet
Properti | Deskripsi |
---|---|
topologyManagerPolicy |
Opsional. Dapat Berubah. Enumerasi: none , best-effort , restricted , atau single-numa-node . Default: best-effort .
Kolom ini menentukan kebijakan Topology Manager Kubernetes yang digunakan untuk mengalokasikan resource untuk workload Anda, berdasarkan class kualitas layanan (QoS) yang ditetapkan. Untuk mengetahui informasi selengkapnya tentang cara menetapkan class QoS, lihat Mengonfigurasi Kualitas Layanan untuk Pod.
|
Operasi profil
Properti | Deskripsi |
---|---|
paused |
Opsional. Dapat Berubah. Boolean. Tetapkan paused ke true untuk sementara waktu agar pengontrol DaemonSet tidak menyesuaikan node yang dipilih. |
updateStrategy |
Opsional. Dapat Berubah. Menentukan strategi untuk menerapkan perubahan konfigurasi penyesuaian pada node yang dipilih. |
updateStrategy.rollingUpdateMaxUnavailalble |
Opsional. Dapat Berubah. Bilangan bulat. Default: 1 . Menentukan jumlah maksimum node yang dapat disesuaikan pada saat yang sama. Kolom ini hanya berlaku jika type ditetapkan ke rolling . |
updateStrategy.type |
Opsional. Dapat Berubah. Enumerasi: batch atau rolling .
Default: rolling . Menentukan cara menerapkan pembaruan profil
ke node yang dipilih. Jika Anda ingin menerapkan pembaruan ke semua node yang dipilih secara bersamaan, tetapkan type ke batch . Secara default, update diluncurkan secara berurutan ke setiap node, satu demi satu. |
Periksa status
Setelah resource kustom PerformanceTuningProfile
dibuat atau diupdate, pengontrol akan menyesuaikan node yang dipilih berdasarkan konfigurasi yang diberikan dalam
resource. Untuk memeriksa status PerformanceTuningProfile
, kita mengekspos kolom berikut di Status
:
Properti | Deskripsi |
---|---|
conditions |
Kondisi mewakili pengamatan terbaru yang tersedia untuk status resource profil saat ini. |
conditions.lastTransitionTime |
Selalu ditampilkan. String (dalam format tanggal-waktu). Terakhir kali kondisi ditransisikan dari satu status ke status lainnya. Waktu ini biasanya menunjukkan kapan kondisi yang mendasarinya berubah. Jika waktu itu tidak diketahui, waktu akan menunjukkan kapan kolom API berubah. |
conditions.message |
Opsional. String. Pesan yang dapat dibaca manusia yang menunjukkan detail tentang transisi. Kolom ini mungkin kosong. |
conditions.observedGeneration |
Opsional. Bilangan bulat. Jika ditetapkan, kolom ini mewakili metadata.generation
yang menjadi dasar ketentuan tersebut. Misalnya, jika metadata.generation adalah 12 , tetapi status.condition[x].observedGeneration adalah 9 , kondisi ini tidak berlaku lagi terkait status instance saat ini. |
conditions.reason |
Wajib. String. Alasan transisi kondisi terakhir. |
conditions.status |
Wajib. Status kondisi: True , False , atau
Unknown . |
conditions.type |
Wajib. Jenis adalah jenis kondisi: Stalled atau
Reconciling . |
readyNodes |
Jumlah node yang profil penyesuaiannya berhasil diterapkan. |
reconcilingNodes |
Jumlah node yang dipilih (atau yang sebelumnya dipilih) yang sedang
dalam proses direkonsiliasi dengan profil penyesuaian terbaru oleh
DaemonSet nodeconfig-controller-manager . |
selectedNodes |
Jumlah catatan yang telah dipilih. Artinya, jumlah
node yang cocok dengan pemilih node untuk
resource kustom PerformanceTuningProfile ini. |