Dokumen ini menjelaskan cara menggunakan peningkatan peluncuran CPU dengan penskalakan otomatis Pod vertikal (VPA) di Google Kubernetes Engine (GKE) untuk meningkatkan sementara resource CPU yang dialokasikan ke Pod selama fase inisialisasinya.
Peningkatan CPU startup mempercepat startup aplikasi dan meningkatkan efisiensi biaya dengan meningkatkan permintaan CPU untuk sementara waktu selama inisialisasi dan mengubah ukurannya kembali ke tingkat dasar di tempat. Dokumen ini membahas persyaratan peningkatan kecepatan saat memulai, konfigurasi (tingkat Pod dan container), verifikasi, dan praktik terbaik.
Dokumen ini ditujukan bagi engineer DevOps, Platform, dan Developer aplikasi yang ingin mengoptimalkan performa startup aplikasi di GKE.
Manfaat
Penggunaan peningkatan startup CPU memberikan manfaat berikut:
- Startup yang lebih cepat: Percepat inisialisasi aplikasi yang menggunakan banyak resource, seperti aplikasi yang ditulis dalam Java, Node.js, atau Python.
- Efisiensi biaya: Hindari penyediaan CPU yang berlebihan untuk operasi dalam kondisi stabil sekaligus tetap memenuhi permintaan startup. Operasi dalam kondisi stabil adalah periode setelah aplikasi menyelesaikan inisialisasi dan penggunaan sumber dayanya telah stabil.
- Tidak ada gangguan: Menskalakan resource kembali ke tingkat dasar menggunakan pengubahan ukuran Pod di tempat (IPPR) Kubernetes tanpa memulai ulang container Anda.
- Mengurangi upaya manual: Meminimalkan pemborosan resource dan upaya manual yang diperlukan untuk menyesuaikan ukuran workload Anda.
Persyaratan
Untuk menggunakan peningkatan startup CPU, Anda harus memenuhi persyaratan berikut:
- Versi GKE: gunakan
1.36.0-gke.4447000dan yang lebih baru untuk cluster Standard dan Autopilot. - VPA diaktifkan: mengaktifkan penskalaan otomatis Pod vertikal di cluster Standar. GKE mengaktifkan VPA secara default di cluster Autopilot. Anda dapat menggunakan VPA secara eksklusif untuk peningkatan CPU startup dengan memilih mode update tertentu. Untuk mengaktifkan dan mengonfigurasi VPA, lihat Menetapkan permintaan resource Pod secara otomatis.
- Jenis workload: gunakan pengontrol, seperti Deployment atau StatefulSet, untuk mengelola workload Anda.
- Kapasitas node: pastikan cluster Standar memiliki kapasitas yang cukup untuk Pod yang di-boost. Jika kapasitas tidak mencukupi, GKE akan membatasi permintaan Pod yang ditingkatkan agar sesuai dengan node.
Cara kerja peningkatan startup CPU
Untuk mengetahui informasi selengkapnya tentang siklus proses peningkatan dan cara peningkatan startup CPU menghitung peningkatan resource, lihat Cara kerja peningkatan startup CPU.
Sebelum memulai
Sebelum memulai, pastikan Anda telah memilih project Cloud de Confiance by S3NS yang berisi cluster yang ingin Anda tingkatkan dan 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.
Konfigurasi gcloud CLI untuk menggunakan project yang Anda pilih:
gcloud config set project PROJECT_IDGanti
PROJECT_IDdengan ID project Anda.Pastikan Anda memiliki cluster GKE. Jika Anda belum memilikinya, lihat Membuat cluster.
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan guna mengaktifkan dan menggunakan peningkatan peluncuran CPU, minta administrator untuk memberi Anda peran IAM berikut di project Anda:
- Kubernetes Engine Admin (
roles/container.admin) - Kubernetes Engine Developer (
roles/container.developer)
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Mengaktifkan peningkatan CPU startup
Untuk mengaktifkan peningkatan startup CPU, tambahkan blok konfigurasi startupBoost ke manifes
VerticalPodAutoscaler (VPA). Anda dapat mengonfigurasi peningkat untuk diterapkan ke
semua penampung dalam Pod atau menargetkan penampung individual dengan peningkatan resource
tertentu.
Mengonfigurasi peningkatkan tingkat Pod
Peningkatan tingkat Pod menerapkan peningkatan resource CPU yang sama ke setiap container dalam workload. Anda dapat mengonfigurasi peningkatan startup CPU dengan atau tanpa pengelolaan resource berkelanjutan VPA.
Untuk mengonfigurasi peningkatan tingkat Pod, gunakan salah satu opsi berikut.
Opsi A: Peningkatan startup diaktifkan dan mode update VPA dinonaktifkan
Gunakan opsi ini untuk memanfaatkan VPA secara eksklusif untuk kemampuan peningkatan peluncuran CPU-nya tanpa mengaktifkan rekomendasi VPA reguler. Contoh
berikut menerapkan faktor perkalian CPU sebesar 2 dan mempertahankannya selama 10 detik setelah
Pod mencapai status Ready:
apiVersion: "autoscaling.k8s.io/v1"
kind: VerticalPodAutoscaler
metadata:
name: example-vpa
spec:
targetRef:
apiVersion: "apps/v1"
kind: Deployment
name: example
updatePolicy:
updateMode: "Off"
startupBoost:
cpu:
type: "Factor"
factor: 2
durationSeconds: 10
Opsi B: Mode update VPA dan peningkatan startup diaktifkan
Jika Anda ingin GKE mengelola peningkatan saat startup, lalu terus menyesuaikan permintaan resource Pod Anda secara otomatis berdasarkan penggunaan berkelanjutan, gunakan opsi ini. Contoh berikut menerapkan peningkatan saat startup dan menetapkan kolom updateMode ke InPlaceOrRecreate:
apiVersion: "autoscaling.k8s.io/v1"
kind: VerticalPodAutoscaler
metadata:
name: example-vpa
spec:
targetRef:
apiVersion: "apps/v1"
kind: Deployment
name: example
updatePolicy:
updateMode: "InPlaceOrRecreate"
startupBoost:
cpu:
type: "Factor"
factor: 2
durationSeconds: 10
Mengonfigurasi peningkatan tingkat penampung
Jika workload Anda menyertakan sidecar atau container lain yang tidak memerlukan resource tambahan, Anda dapat menargetkan container tertentu untuk peningkatan startup dalam bagian resourcePolicy. Nilai containerName harus cocok dengan kolom name
dari penampung dalam spesifikasi Deployment Anda.
Untuk mengonfigurasi peningkatan tingkat penampung, gunakan salah satu opsi berikut.
Opsi A: Meningkatkan container tertentu (pengaktifan VPA dinonaktifkan)
Gunakan opsi ini untuk menerapkan peningkatan ke satu penampung sambil membiarkan permintaan resource Pod lainnya tidak berubah. Contoh manifes berikut menambahkan dua
vCPU ke permintaan dasar untuk container bernama boosted-container-name:
apiVersion: "autoscaling.k8s.io/v1"
kind: VerticalPodAutoscaler
metadata:
name: example-vpa
spec:
targetRef:
apiVersion: "apps/v1"
kind: Deployment
name: example
updatePolicy:
updateMode: "Off"
resourcePolicy:
containerPolicies:
- containerName: "boosted-container-name"
mode: "Off"
startupBoost:
cpu:
type: "Quantity"
quantity: "2"
Opsi B: Memilih tidak ikut container tertentu dari peningkatan tingkat Pod
Jika Anda telah mengonfigurasi peningkatan tingkat Pod, tetapi ingin mengecualikan penampung tertentu,
gunakan opsi ini. Contoh manifes berikut menerapkan faktor perkalian CPU 2 ke
seluruh Pod, tetapi menonaktifkan peningkatannya untuk container bernama
disable-cpu-boost-for-this-container dengan menyetel faktornya ke 1:
apiVersion: "autoscaling.k8s.io/v1"
kind: VerticalPodAutoscaler
metadata:
name: example-vpa
spec:
targetRef:
apiVersion: "apps/v1"
kind: Deployment
name: example
updatePolicy:
updateMode: "InPlaceOrRecreate"
startupBoost:
cpu:
type: "Factor"
factor: 2
resourcePolicy:
containerPolicies:
- containerName: "disable-cpu-boost-for-this-container"
startupBoost:
cpu:
type: "Factor"
factor: 1
Memverifikasi peningkatan CPU startup
Untuk memverifikasi bahwa Pod Anda menerima peningkatan, periksa konfigurasi VPA, permintaan resource Pod, anotasi Pod, dan peristiwa VPA.
Memverifikasi konfigurasi VPA
Untuk memeriksa detail objek VerticalPodAutoscaler, jalankan perintah berikut:
kubectl describe vpa VPA_NAME
Ganti VPA_NAME dengan nama objek VPA Anda.
Memeriksa permintaan CPU yang ditingkatkan di Pod
Untuk memverifikasi permintaan resource saat ini untuk Pod Anda, jalankan perintah berikut:
kubectl describe pod POD_NAME
Ganti POD_NAME dengan nama Pod Anda.
Verifikasi peningkatan CPU menggunakan anotasi Pod
Webhook penerimaan VPA menyisipkan anotasi cakupan container untuk melacak resource asli yang harus dikembalikan oleh setiap container saat peningkatannya berakhir. Untuk memeriksa anotasi ini, jalankan perintah berikut:
kubectl get pod POD_NAME --output yaml
Di bagian metadata.annotations, cari anotasi yang diformat sebagai vpaCpuStartupBoost/CONTAINER_NAME. Contoh:
metadata:
annotations:
vpaCpuStartupBoost/slow-starter: '{"requests":{"cpu":"50m","memory":"64Mi"},"limits":{"cpu":"200m","memory":"128Mi"}}'
Output perintah menunjukkan salah satu hasil verifikasi berikut:
- Peningkatan berhasil: anotasi
vpaCpuStartupBoost/CONTAINER_NAMEada di Pod. - Peningkatan tidak berhasil: anotasi tidak ada sama sekali. Artinya, pengontrol penerimaan mengabaikan peningkatan, kemungkinan karena batas kapasitas node atau batasan resource Autopilot.
Memeriksa peristiwa pengecilan skala
Untuk memverifikasi bahwa GKE berhasil mengurangi alokasi resource CPU kembali ke nilai dasar, periksa peristiwa cluster dengan menjalankan perintah berikut:
kubectl get events --field-selector reason=InPlaceResizedByVPA
Output perintah menunjukkan salah satu hasil verifikasi berikut:
- Unboost berhasil: Anda akan melihat peristiwa
InPlaceResizedByVPAdengan pesan yang menunjukkan bahwa Pod diubah ukurannya di tempat oleh Pengupdate VPA. Hal ini mengonfirmasi bahwa permintaan CPU telah kembali ke nilai dasarnya tanpa memulai ulang penampung. - Pembatalan peningkatan yang tidak berhasil: anotasi
vpaCpuStartupBoost/CONTAINER_NAMEtetap ada di Pod lama setelah peningkatan seharusnya berakhir, dan tidak ada peristiwaInPlaceResizedByVPA.
Praktik terbaik dan batasan
Tinjau hal berikut saat Anda menggunakan peningkatan startup CPU.
Interaksi dengan penskalaan otomatis Pod horizontal
Jika Anda menggunakan penskalaan otomatis Pod horizontal (HPA) dengan peningkatan peluncuran CPU, ikuti panduan berikut:
- Tentukan pemeriksaan kesehatan: Anda harus menentukan
readinessProbeuntuk workload Anda. - Konfigurasi penundaan durasi: Anda harus menetapkan parameter
durationSecondske0. Konfigurasi ini mencegah HPA menskalakan aplikasi Anda terlalu dini karena pemakaian CPU yang tinggi selama startup.
Autoscaler cluster dan loop penghapusan
Jika Anda menggunakan autoscaler cluster di cluster GKE Standard, pertimbangkan perilaku node berikut:
- Kemungkinan loop pengusiran: peningkatan CPU sementara dapat memicu penskalaan node. Setelah Pod siap dan diturunkan skalanya, kurangnya pemanfaatan dapat memicu penurunan skala node dan mengeluarkan Pod, sehingga menyebabkan loop tanpa akhir.
- Mitigasi: sebaiknya gunakan GKE Autopilot untuk memitigasi masalah defragmentasi node dan loop pengusiran.
Container dimulai ulang
Pahami pengaruh mulai ulang container terhadap peningkatan CPU saat startup dengan meninjau perilaku berikut:
- Hanya selama pembuatan Pod: Peningkatan CPU startup hanya berlaku selama tahap pembuatan Pod awal.
- Tidak ada peningkatan saat dimulai ulang: jika sebuah penampung dimulai ulang—misalnya, karena peristiwa OOMKill—tetapi Pod tetap aktif, GKE tidak menerapkan peningkatan lagi. Perilaku ini terjadi karena webhook penerimaan Pod dipicu hanya selama proses pembuatan Pod awal.
Pembersihan
Karena Anda mengonfigurasi peningkatan startup CPU pada workload yang ada, perhatikan hal berikut untuk menghindari gangguan workload:
- Anda tidak perlu menghapus resource Kubernetes apa pun.
- Jika objek VerticalPodAutoscaler atau pengontrol workload (seperti Deployment atau StatefulSet) masih diperlukan untuk operasi dalam kondisi stabil, jangan hapus objek atau pengontrol tersebut.
Jika tidak memerlukan peningkatan startup CPU, Anda dapat menonaktifkan peningkatan saja menggunakan salah satu metode berikut berdasarkan cakupan Anda:
- Menonaktifkan peningkatan untuk seluruh beban kerja: hapus blok
startupBoostdari spesifikasi objek VerticalPodAutoscaler dan terapkan manifes yang telah diperbarui ke cluster Anda. Menonaktifkan peningkatan untuk container tertentu: untuk mengecualikan container tertentu dari peningkatan tingkat Pod, tambahkan kebijakan container di bagian
containerPoliciesdan tetapkan faktor pengganda CPU ke 1.startupBoost: cpu: type: "Factor" factor: 1Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi peningkatan tingkat penampung.
- Menonaktifkan peningkatan untuk seluruh beban kerja: hapus blok
Langkah berikutnya
- Menskalakan permintaan dan batas resource container
- Mengonfigurasi penskalaan otomatis Pod horizontal
- Menyesuaikan ukuran workload dalam skala besar