Halaman ini menunjukkan cara mengonfigurasi Pod untuk melakukan burst ke kapasitas yang tidak digunakan yang tersedia di node Google Kubernetes Engine (GKE).
Apa yang dimaksud dengan bursting?
Bursting menjelaskan tindakan Pod yang menggunakan lebih banyak kapasitas komputasi di node untuk sementara daripada yang awalnya diminta.
Kubernetes memungkinkan Anda meminta kapasitas resource tertentu seperti CPU atau memori untuk Pod Anda. Anda menetapkan permintaan ini dalam manifes Pod. Penjadwal Kubernetes menempatkan Pod Anda di node yang memiliki kapasitas yang cukup untuk mengakomodasi permintaan resource tersebut.
Beberapa workload tidak menggunakan 100% resource yang diminta selama seluruh waktu operasionalnya. Misalnya, workload yang menggunakan CPU tambahan selama periode booting mungkin tidak memerlukan jumlah resource yang sama untuk operasi normal. Dalam situasi ini, Anda dapat menetapkan batas resource untuk workload ke nilai yang lebih tinggi daripada permintaan resource atau membiarkan batas tidak ditetapkan. GKE memungkinkan workload menggunakan lebih banyak resource untuk sementara daripada yang Anda tentukan dalam permintaan, jika kapasitas tersebut tersedia.
Untuk mengetahui informasi selengkapnya tentang cara kerja proses ini di GKE, lihat Kapasitas burstable di GKE di halaman ini.
Manfaat burst Pod
Bursting berguna saat Pod Anda hanya memerlukan resource tambahan untuk jangka waktu singkat guna mengakomodasi lonjakan penggunaan resource. Contoh skenario mencakup hal berikut:
- Anda memiliki grup workload yang sering tidak aktif dan mengirimkan sejumlah kecil permintaan per detik, tetapi terkadang mengalami lonjakan traffic dan akan mendapatkan manfaat dari resource tambahan untuk memproses permintaan tersebut.
- Workload Anda memerlukan lebih banyak resource selama startup daripada selama operasi normal.
- Anda ingin memaksimalkan penggunaan kapasitas komputasi yang Anda sediakan.
Bursting memungkinkan Anda hanya meminta resource yang dibutuhkan Pod untuk sebagian besar runtime-nya dan membantu memastikan bahwa Pod dapat menggunakan lebih banyak resource jika diperlukan. Manfaat bursting meliputi:
- Biaya pengoperasian yang lebih rendah: Anda tidak perlu meminta konsumsi resource puncak yang diharapkan dari workload. Permintaan Anda dapat ditujukan untuk nilai steady-state yang lebih rendah. Di Autopilot, Anda membayar jumlah permintaan resource Pod, sehingga biaya operasional Anda lebih rendah.
- Penggunaan resource yang lebih efisien: Anda menghindari kapasitas komputasi yang tidak digunakan karena Pod Anda bursting ke kapasitas yang tidak terpakai. Workload Anda lebih cenderung menggunakan semua resource berbayar Anda.
- Peningkatan performa: Pod dapat menggunakan resource tambahan sesuai kebutuhan untuk mengurangi waktu pemrosesan permintaan yang masuk, atau untuk melakukan booting lebih cepat selama peristiwa penskalaan.
Kapan sebaiknya tidak menggunakan bursting
Kubernetes menetapkan class Quality of Service (QoS) Burstable ke Pod yang menentukan batas resource yang lebih tinggi daripada permintaannya. Pod QoS Burstable lebih mungkin dikeluarkan saat Kubernetes perlu mengklaim kembali resource di node. Untuk mengetahui informasi selengkapnya, lihat
Class QoS Burstable
dalam dokumentasi Kubernetes.
Sebelum memulai
Sebelum memulai, pastikan Anda telah melakukan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Untuk 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.
- Pastikan Anda memiliki cluster GKE Autopilot yang menjalankan versi 1.30.2-gke.1394000 atau yang lebih baru, atau versi cluster GKE Standard apa pun. Untuk membuat cluster baru, lihat Membuat cluster Autopilot.
Ketersediaan bursting di GKE
Workload dapat mengalami burst dalam situasi berikut:
| Ketersediaan burst | |
|---|---|
| Mode Autopilot GKE | Jenis Pod berikut dapat melakukan burst di versi GKE mana pun yang mendukung hardware yang diminta Pod: Untuk semua jenis Pod lainnya, bursting akan tersedia saat Anda memulai ulang bidang kontrol setelah memastikan bahwa cluster memenuhi semua kondisi berikut:
Untuk mengetahui detailnya, lihat Batasan. |
| Mode GKE Standard | Pod dapat melakukan burst di versi GKE apa pun. |
Batasan
- Workload Autopilot hanya dapat menggunakan bursting untuk permintaan CPU dan memori.
Saat Anda mengupgrade cluster Autopilot ke versi yang didukung, GKE akan mengupgrade worker node agar sesuai dengan versi bidang kontrol dari waktu ke waktu. Mulai ulang bidang kontrol diperlukan untuk mengaktifkan bursting, dan harus terjadi setelah semua node menjalankan versi yang didukung dan mode cgroup yang didukung. Bidang kontrol dimulai ulang secara otomatis sekitar sekali seminggu selama operasi seperti penskalaan, upgrade, atau pemeliharaan.
Untuk memicu mulai ulang bidang kontrol secara manual, lakukan hal berikut:
Periksa apakah semua node Anda menjalankan versi 1.30.2-gke.1394000 atau yang lebih baru:
kubectl get nodesOutputnya mirip dengan hal berikut ini:
NAME STATUS ROLES AGE VERSION gk3-ap-cluster-1-default-pool-18092e49-mllk Ready <none> 4m26s v1.30.2-gke.1349000Semua node dalam output harus menampilkan versi yang diperlukan atau yang lebih baru.
Pastikan cluster Anda menjalankan cgroupv2. Untuk mengetahui petunjuknya, lihat Memeriksa mode cgroup.
Mulai upgrade bidang kontrol secara manual ke versi yang sama dengan yang sudah digunakan cluster.
gcloud container clusters upgrade CLUSTER_NAME --master \ --cluster-version CURRENT_CLUSTER_VERSIONGanti kode berikut:
CLUSTER_NAME: nama cluster yang ada.CURRENT_CLUSTER_VERSION: versi yang dijalankan cluster Anda.
Hubungkan ke cluster
Jalankan perintah berikut:
gcloud container clusters get-credentials CLUSTER_NAME \
--location=LOCATION
Ganti kode berikut:
CLUSTER_NAME: nama cluster yang ada.LOCATION: lokasi cluster Anda.
Memastikan cluster Anda mendukung bursting
Bursting selalu diaktifkan di cluster mode Standard dan untuk workload mode Autopilot yang meminta akselerator atau seri mesin tertentu. Lanjutkan ke bagian Men-deploy workload burstable.
Jenis workload Autopilot berikut hanya dapat melakukan burst jika DaemonSet yang dikelola GKE bernama efficiency-daemon berjalan di cluster:
- Pod Autopilot yang meminta class komputasi yang telah ditetapkan
Scale-OutatauBalanced. - Pod Autopilot yang tidak meminta class komputasi.
GKE men-deploy DaemonSet efficiency-daemon saat cluster Autopilot Anda memenuhi persyaratan untuk bursting, seperti yang dijelaskan di bagian Ketersediaan bursting di GKE.
Untuk memeriksa apakah DaemonSet efficiency-daemon ada di cluster Anda, jalankan
perintah berikut:
kubectl get daemonset --namespace=kube-system efficiency-daemon
Outputnya mirip dengan hal berikut ini:
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
efficiency-daemon 1 1 1 1 1 <none> 105d
Jika output kosong, pastikan cluster memenuhi semua persyaratan dan batasan di bagian Sebelum memulai.
Men-deploy workload burstable
Simpan manifes berikut sebagai
burstable-deployment.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: helloweb labels: app: hello spec: selector: matchLabels: app: hello tier: web template: metadata: labels: app: hello tier: web spec: containers: - name: hello-app image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 ports: - containerPort: 8080 resources: requests: cpu: 250m limits: cpu: 350mManifes ini memiliki kolom berikut untuk mengaktifkan bursting:
resources.requests: Resource yang diperlukan container agar dapat berfungsi. Tetapkan nilai ini ke kapasitas yang akan dibutuhkan container Anda dalam status stabil.resources.limits: Kapasitas resource maksimum yang dapat digunakan container. Menetapkan batas yang lebih tinggi daripada permintaan memungkinkan Pod melakukan burst hingga batas yang ditentukan jika kapasitas tersebut tersedia di node. Jika Anda menghapus kolom ini, Pod dapat melakukan burst hingga kapasitas burstable yang tersedia di node. Kapasitas ini dihitung sebagai berikut:- Mode Autopilot: Kapasitas yang tidak digunakan dalam jumlah permintaan resource Pod pada node.
- Mode standar: Kapasitas yang tidak digunakan dalam resource node.
spec.nodeSelectordanspec.tolerations: Opsional. Tambahkan kolom ini dengan label kustom sepertipod-type: "non-critical"untuk memberi tahu GKE agar membuat node baru untuk menjalankan Pod burstable. GKE menerapkan taint ke node baru ini untuk mencegah Pod lain, seperti workload penting, berjalan di node yang sama. Autopilot menerapkan permintaan resource minimum yang lebih tinggi untuk Pod yang menggunakan pemisahan workload. Untuk mengetahui detailnya, lihat Mengonfigurasi pemisahan workload di GKE dan Permintaan resource di Autopilot.
Men-deploy workload:
kubectl apply -f burstable-deployment.yamlWorkload mungkin memerlukan waktu beberapa menit untuk dimulai.
Memeriksa class QoS Pod:
kubectl describe pod helloweb | grep -m 1 "QoS"Outputnya adalah sebagai berikut:
QoS Class: Burstable
Kapasitas burstable di GKE
Untuk memfasilitasi burst Pod, GKE menghitung kapasitas burstable untuk setiap node dalam cluster. Penghitungan untuk node tertentu adalah sebagai berikut:
Cluster Autopilot:
- Pod yang meminta akselerator atau meminta seri mesin tertentu: Kapasitas resource yang dapat dialokasikan node, yaitu kapasitas yang tersedia untuk penggunaan workload. Untuk mengetahui detailnya , lihat Resource yang dapat dialokasikan node.
- Semua Pod lainnya: Jumlah permintaan resource dari semua Pod di node tersebut, terlepas dari kapasitas resource sebenarnya dari node tersebut. Jika Pod dihentikan, kapasitas burstable akan berkurang sebesar permintaan Pod tersebut. Bagian dari kapasitas burstable yang tidak digunakan oleh Pod yang berjalan tersedia untuk dialokasikan jika salah satu Pod perlu melakukan burst.
Autopilot juga menambahkan buffer yang telah ditentukan ke kapasitas burstable sehingga Pod sistem apa pun pada node yang melakukan burst melebihi permintaannya tidak akan memengaruhi Pod burstable Anda sendiri.
Cluster standar: Kapasitas resource yang dapat dialokasikan node, yaitu kapasitas yang tersedia untuk penggunaan workload. Untuk mengetahui detailnya , lihat Resource yang dapat dialokasikan node.
Praktik terbaik untuk bursting
Gunakan praktik berikut dengan burst Pod:
- Tetapkan permintaan resource yang sama dengan batas untuk Pod apa pun yang menyediakan fungsi penting di lingkungan Anda. Pendekatan ini membantu memastikan bahwa Pod tersebut mendapatkan class Quality of Service (QoS) Kubernetes
Guaranteed. - Pastikan Anda hanya mengonfigurasi burst memori pada Pod yang dapat menangani penghapusan saat Kubernetes perlu mengklaim kembali memori pada node.
- Selalu minta memori yang cukup agar Pod Anda dapat melakukan booting. Jangan mengandalkan burst memori untuk memenuhi persyaratan booting Anda.
- Untuk mencegah Pod burstable yang secara konsisten melakukan burst ke kelipatan permintaan CPU-nya agar tidak berpotensi mengganggu workload penting, gunakan pemisahan workload untuk menghindari penempatan Pod tersebut bersama Pod penting Anda.
Mengoptimalkan kapasitas burstable di node Autopilot
Autopilot menghitung kapasitas burstable sebagai jumlah permintaan resource dari semua Pod pada node tertentu, termasuk Pod sistem dan DaemonSet. Anda dapat mengoptimalkan kapasitas burstable pada node dengan cara berikut. Namun, bursting bersifat oportunistik dan tidak dijamin.
- Untuk meningkatkan kapasitas burstable pada node untuk workload tertentu, gunakan afinitas Pod untuk menempatkan Pod tertentu bersama-sama di node yang sama.
- Untuk memastikan kapasitas burstable tertentu selalu tersedia di setiap node, buat DaemonSets untuk dijalankan di semua node dalam cluster.
Contoh cara kerja bursting
Bagian ini menggunakan contoh Deployment yang memiliki Pod burstable berikut untuk menunjukkan cara kerja burst Pod di cluster GKE Autopilot:
- Pod 1 meminta CPU 250m dan tidak memiliki batas CPU. Pod 1 menggunakan CPU 100m untuk berjalan.
- Pod 2 meminta CPU 200m dan memiliki batas CPU 250m. Pod 2 menggunakan CPU 100m untuk dijalankan.
Kedua Pod berjalan di node yang sama. Total kapasitas burstable pada node adalah CPU 450m (jumlah permintaan resource). Setiap Pod hanya menggunakan CPU 100m untuk berjalan, yang berarti node memiliki sisa kapasitas burstable yang tersedia sebesar 250m.
Pertimbangkan skenario berikut saat terjadi lonjakan traffic:
- Pod 1 memerlukan CPU tambahan sebesar 300m: Pod ini dapat melakukan burst dan menggunakan CPU sebesar 250m, yang merupakan kapasitas burstable yang tersedia. Node tidak lagi memiliki kapasitas burstable yang tersedia.
- Pod 2 memerlukan tambahan CPU 150m: Pod ini dapat melakukan burst dan menggunakan CPU 150m tambahan. Node kemudian memiliki sisa CPU 100m dari kapasitas burstable yang tersedia.
- Pod 2 memerlukan tambahan 200m CPU: Pod ini dapat melakukan burst dan menggunakan 150m CPU, sehingga total penggunaan menjadi 250m CPU untuk Pod 2. Pod 2 memiliki batas CPU 250 m dan tidak dapat melakukan burst melebihi batas tersebut.
Cara GKE menangani Pod yang melebihi kapasitas burstable
Jika Pod burstable Anda mencoba menggunakan lebih banyak resource daripada kapasitas burstable pada node, GKE akan melakukan tindakan berikut:
- CPU: Jika penggunaan CPU melebihi kapasitas burstable, GKE akan membatasi penggunaan CPU beberapa container sehingga semua container di node mendapatkan CPU yang diminta.
- Memori: Jika penggunaan memori melebihi kapasitas burstable, GKE akan menghentikan container untuk mengklaim kembali memori pada node. GKE memulai dengan menghentikan container yang menggunakan banyak resource di Pod dengan QoS yang lebih rendah.
Sebaiknya Anda selalu meminta memori yang cukup untuk operasi Pod normal. Jika container memiliki dependensi pada burst memori agar dapat berfungsi secara normal, container tersebut mungkin akan mengalami error berulang kali jika memori tersebut tidak tersedia.
Menggunakan bursting Pod dengan penyediaan kapasitas cadangan
GKE memungkinkan Anda men-deploy Pod nonaktif untuk mencadangkan kapasitas komputasi tambahan guna penskalaan Pod yang lebih cepat selama peristiwa traffic tinggi di masa mendatang, seperti flash sale toko online. Pod lain di node yang sama dapat bursting ke kapasitas yang dicadangkan dan tidak terpakai ini, sehingga kapasitas tidak menganggur pada waktu menjelang peristiwa traffic tinggi Anda. Anda dapat memesan kapasitas ini menggunakan berbagai mekanisme Kubernetes. Misalnya, Anda dapat men-deploy Pod yang memiliki PriorityClass rendah. Untuk mengetahui detailnya, lihat Menyediakan kapasitas komputasi tambahan untuk penskalaan Pod yang cepat.
Bursting Pod di cluster GKE Standard
Cluster GKE Standard juga mendukung burst Pod dengan menetapkan batas yang lebih tinggi daripada permintaan atau dengan menghilangkan batas. Namun, di cluster Standard, Anda harus membuat dan mengonfigurasi node pool dengan kapasitas resource yang sesuai untuk mendukung burst. Untuk mendapatkan potensi pengurangan biaya Pod burstable di cluster Standard, diperlukan perencanaan node dan bin-packing Pod yang lebih cermat, karena Anda membayar VM Compute Engine yang mendasarinya.
Pertimbangkan hal berikut di cluster Standard:
Batas konsumsi resource maksimum yang memicu pengosongan Kubernetes atau throttling CPU adalah kapasitas resource yang dapat dialokasikan pada node. Untuk menentukan nilai ini, lihat Merencanakan ukuran node GKE Standard.
Penggunaan resource node di cluster Standard lebih cenderung mencapai batas pengeluaran Kubernetes karena GKE tidak otomatis membatasi konsumsi resource jika Anda tidak menentukan batas. Oleh karena itu, Pod yang mengalami lonjakan memori lebih mungkin dihentikan oleh pengusiran tekanan node Kubernetes.
Langkah berikutnya
- Pelajari cara menyediakan kapasitas komputasi tambahan untuk penskalaan Pod yang cepat.
- Pelajari cara menyesuaikan ukuran workload GKE Standard Anda dalam skala besar.
- Pelajari cara memecahkan masalah cluster Autopilot.