Dokumen ini menunjukkan cara menerapkan ComputeClass secara default ke Pod Google Kubernetes Engine (GKE) yang tidak secara eksplisit memilih ComputeClass. Halaman ini berisi petunjuk untuk menetapkan ComputeClass sebagai default di namespace dan untuk seluruh cluster. Dokumen ini ditujukan bagi administrator cluster yang ingin mengurangi beban manual yang disebabkan oleh konfigurasi node dan beban kerja individual.
Anda seharusnya sudah memahami ComputeClass kustom.
Tentang ComputeClass default
Anda dapat mengonfigurasi cluster GKE atau namespace tertentu agar memiliki ComputeClass default. Class default yang Anda konfigurasi berlaku untuk Pod apa pun di cluster atau namespace tersebut yang tidak memilih ComputeClass lain. Saat Anda men-deploy Pod yang tidak memilih ComputeClass, GKE akan menerapkan ComputeClass default dalam urutan berikut:
- Jika namespace memiliki ComputeClass default, GKE akan mengubah spesifikasi Pod untuk memilih ComputeClass tersebut.
- Jika namespace tidak memiliki ComputeClass default, class default tingkat cluster akan diterapkan. GKE tidak mengubah spesifikasi Pod.
Jika ComputeClass default Anda memiliki kolom activeMigration.optimizeRulePriority yang disetel ke true, setelan ini dapat memengaruhi workload di cluster Anda. Untuk mengetahui informasi selengkapnya,
lihat Migrasi aktif di ComputeClass default.
Sebelum memulai
Sebelum memulai, pastikan Anda telah melakukan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
lakukan inisialisasi
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah
gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung menjalankan perintah dalam dokumen ini.
- Memiliki cluster GKE Autopilot atau Standard yang menjalankan versi yang mendukung penyetelan ComputeClass default di tingkat cluster atau namespace. Untuk mengetahui informasi selengkapnya, lihat bagian Persyaratan.
Jika Anda menggunakan cluster mode Standar, pastikan Anda memenuhi salah satu persyaratan berikut:
- Aktifkan penskalaan otomatis di setidaknya satu node pool di cluster.
- Jika cluster Standar Anda menjalankan versi yang lebih lama dari 1.33.3-gke.1136000 dan tidak terdaftar di saluran Rilis cepat, aktifkan penyediaan otomatis node tingkat cluster.
Jika Anda ingin menetapkan ComputeClass kustom sebagai default untuk namespace, deploy ComputeClass kustom.
Persyaratan
- Untuk menetapkan ComputeClass sebagai default tingkat cluster, cluster harus menjalankan GKE versi 1.33.1-gke.1744000 atau yang lebih baru.
- Untuk menetapkan ComputeClass sebagai default tingkat namespace hanya untuk Pod non-DaemonSet, cluster harus menjalankan GKE versi 1.33.1-gke.1788000 atau yang lebih baru.
Peran dan izin yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk mengonfigurasi ComputeClass default tingkat cluster atau namespace, minta administrator Anda untuk memberi Anda peran IAM berikut di Google Cloud project:
-
Kubernetes Engine Developer (
roles/container.developer) -
Perbarui ComputeClass default tingkat cluster:
Kubernetes Engine Cluster Admin (
roles/container.clusterAdmin)
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, baca artikel Mengelola akses ke project, folder, dan organisasi.
Peran bawaan ini berisi izin yang diperlukan untuk mengonfigurasi ComputeClass default tingkat cluster atau namespace. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:
Izin yang diperlukan
Izin berikut diperlukan untuk mengonfigurasi ComputeClass default tingkat cluster atau namespace:
-
container.customResourceDefinitions.create -
container.customResourceDefinitions.update -
container.customResourceDefinitions.get -
container.customResourceDefinitions.list -
container.namespaces.get -
container.namespaces.list -
container.pods.get -
container.nodes.get -
container.nodes.list -
container.deployments.create -
container.deployments.get -
Tambahkan label ke namespace:
container.namespaces.update -
Aktifkan ComputeClass default tingkat cluster:
container.clusters.update
Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.
Mengonfigurasi ComputeClass default untuk namespace
Anda dapat memberi anotasi pada namespace Kubernetes apa pun di cluster dengan nama ComputeClass untuk digunakan sebagai default. Jika Pod yang di-deploy ke namespace tersebut belum memilih ComputeClass, GKE akan mengubah spesifikasi Pod untuk memilih class default di namespace. Anda dapat menetapkan ComputeClass kustom atau bawaan sebagai default.
Untuk menerapkan ComputeClass ke semua Pod dalam namespace secara default, tambahkan label
cloud.google.com/default-compute-classke namespace tersebut:kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class=COMPUTECLASS_NAMEGanti kode berikut:
NAMESPACE_NAME: nama namespace yang akan diperbarui.COMPUTECLASS_NAME: nama ComputeClass yang akan ditetapkan sebagai default untuk namespace.
Jika perintah gagal dengan pesan error berikut, namespace sudah memiliki ComputeClass default:
error: 'cloud.google.com/default-compute-class' already has a value, and --overwrite is falseUntuk mengatasi error ini, perbarui ComputeClass default untuk namespace.
Untuk menerapkan ComputeClass ke semua Pod non-DaemonSet di namespace secara default, tambahkan label
cloud.google.com/default-compute-class-non-daemonsetke namespace tersebut:kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-non-daemonset=COMPUTECLASS_NAMEJika perintah gagal dengan pesan error berikut, namespace sudah memiliki ComputeClass default untuk Pod non-DaemonSet:
error: 'cloud.google.com/default-compute-class-non-daemonset' already has a value, and --overwrite is falseUntuk mengatasi error ini, perbarui ComputeClass default untuk namespace.
Perubahan Anda berlaku untuk Pod baru di namespace tersebut. Pod yang ada tidak terpengaruh.
Memperbarui ComputeClass default yang ada di namespace
Untuk mengganti ComputeClass default yang ada untuk namespace, jalankan salah satu perintah berikut:
Perbarui ComputeClass default untuk semua Pod di namespace:
kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class=COMPUTECLASS_NAME \ --overwriteGanti kode berikut:
NAMESPACE_NAME: nama namespace yang akan diperbarui.COMPUTECLASS_NAME: nama ComputeClass yang akan ditetapkan sebagai default baru untuk namespace.
Ganti ComputeClass default untuk Pod non-DaemonSet di namespace:
kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-non-daemonset=COMPUTECLASS_NAME \ --overwrite
Perubahan Anda berlaku untuk Pod baru di namespace tersebut. Pod yang ada tidak terpengaruh.
Mengonfigurasi ComputeClass default untuk cluster
Bagian ini menunjukkan cara menetapkan ComputeClass sebagai default untuk
cluster Anda. Untuk ComputeClass default tingkat cluster, jangan tentukan taint node dan label node secara manual untuk node pool yang ada di cluster.
GKE tidak menskalakan node pool yang memiliki taint node untuk ComputeClass. Jika Anda menambahkan label secara manual untuk default ComputeClass,
GKE dapat menskalakan node pool tersebut. Namun, konfigurasi manual ini
tidak diperlukan untuk menggunakan ComputeClass tingkat cluster default.
Untuk mengaktifkan penetapan ComputeClass default tingkat cluster bagi cluster, jalankan perintah
gcloud container clusters updatedengan flag--enable-default-compute-class:gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --enable-default-compute-classGanti kode berikut:
CLUSTER_NAME: nama cluster Anda.CONTROL_PLANE_LOCATION: lokasi bidang kontrol cluster Anda, sepertius-central1.
Anda juga dapat menentukan flag ini saat membuat cluster Autopilot atau Standard.
Simpan manifes berikut, yang menentukan
ComputeClassbernamadefault:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: default spec: priorities: - machineFamily: n4 - machineFamily: n2 whenUnsatisfiable: ScaleUpAnyway nodePoolAutoCreation: enabled: trueContoh manifes ini meminta node yang menggunakan instance N4. Jika instance N4 tidak tersedia, permintaan ComputeClass akan meminta instance N2. Anda dapat mengonfigurasi
defaultComputeClass dengan kolom yang tersedia di ComputeClass CustomResourceDefinition.Terapkan manifes ke cluster Anda:
kubectl apply -f PATH_TO_MANIFESTGanti
PATH_TO_MANIFESTdengan jalur ke manifes untuk ComputeClass.
Setelah Anda menetapkan ComputeClass default tingkat cluster, GKE akan menskalakan node pool yang memenuhi kedua persyaratan berikut:
- Konfigurasi node sama dengan konfigurasi
defaultComputeClass. - Kumpulan node tidak memiliki taint atau label untuk ComputeClass yang berbeda.
GKE dapat menskalakan node pool yang memiliki taint dan label untuk
defaultComputeClass.
Misalnya, jika default ComputeClass menentukan seri mesin N4, GKE dapat menskalakan node pool yang ada yang menggunakan instance N4 dan tidak memiliki taint atau label untuk ComputeClass yang berbeda.
Perubahan Anda akan diterapkan ke semua Pod baru di cluster yang belum memiliki ComputeClass. Pod yang ada mungkin terpengaruh, bergantung pada setelan migrasi aktif ComputeClass default tingkat cluster. Untuk mengetahui informasi selengkapnya, lihat Migrasi aktif di ComputeClass default.
Memverifikasi perilaku ComputeClass default
Untuk memeriksa apakah ComputeClass default yang Anda tetapkan untuk namespace atau untuk cluster berfungsi seperti yang diharapkan, lakukan hal berikut:
Tinjau contoh Deployment berikut:
Deployment ini tidak meminta ComputeClass secara eksplisit.
Membuat Deployment:
kubectl apply --namespace=NAMESPACE_NAME \ -f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/refs/heads/main/quickstarts/hello-app/manifests/helloweb-deployment.yamlGanti
NAMESPACE_NAMEdengan salah satu dari yang berikut ini, bergantung pada apa yang ingin Anda verifikasi:- Nama namespace yang memiliki ComputeClass default.
- Nama namespace yang tidak memiliki ComputeClass default.
GKE mungkin memerlukan waktu beberapa saat untuk membuat node baru guna menjalankan Pod.
Identifikasi node yang menjalankan Pod dari contoh Deployment:
kubectl get pods --namespace=NAMESPACE_NAME \ --selector=app=hello -o=wideOutputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES helloweb-7795fbf856-58n5l 1/1 Running 0 9m21s 10.52.2.3 gke-cluster-1-nap-n2-highcpu-2-3muqi8-f213e529-rx7d <none> <none>Dapatkan label node:
kubectl get node NODE_NAME --show-labels \ | grep "cloud.google.com/compute-class"Ganti
NODE_NAMEdengan nama node dari output langkah sebelumnya.Outputnya mirip dengan hal berikut ini:
NODE_NAME Ready <none> 22m v1.32.4-gke.1236007 # lines are omitted from this output cloud.google.com/compute-class=COMPUTECLASS_NAME,cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerdNilai dalam
COMPUTECLASS_NAMEadalah salah satu dari berikut:- ComputeClass default tingkat cluster:
defaultuntuk node yang dibuat oleh GKE Autopilot atau oleh pembuatan otomatis node pool. Node di node pool yang ada yang dibuat secara manual mungkin tidak memiliki labelcloud.google.com/compute-class. - ComputeClass default tingkat namespace: nama ComputeClass yang Anda konfigurasi sebagai default namespace.
- ComputeClass default tingkat cluster:
Menonaktifkan ComputeClass default
Untuk menonaktifkan ComputeClass default di namespace atau cluster, lakukan salah satu tindakan berikut:
Untuk menonaktifkan ComputeClass default tingkat namespace untuk semua Pod, hapus label
cloud.google.com/default-compute-classdari namespace:kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-Karakter
-di akhir kunci label menghapus semua label dengan kunci tersebut dari objekNamespacedi Kubernetes API.Untuk menonaktifkan ComputeClass default tingkat namespace untuk Pod non-DaemonSet, hapus label
cloud.google.com/default-compute-class-non-daemonsetdari namespace:kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-non-daemonset-Untuk menonaktifkan ComputeClass default tingkat cluster, gunakan perintah
gcloud container clusters updatedengan flag--no-enable-default-compute-class:gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --no-enable-default-compute-class
Langkah berikutnya
- Pelajari lebih lanjut ComputeClass kustom di GKE.