Halaman ini menunjukkan cara mengonfigurasi Pod untuk meledak ke dalam kapasitas yang tersedia dan tidak digunakan di node Google Kubernetes Engine (GKE).
Apa yang dimaksud dengan burst?
Bursting menjelaskan tindakan Pod yang sementara menggunakan lebih banyak kapasitas komputasi di node daripada yang awalnya diminta.
Kubernetes memungkinkan Anda meminta kapasitas resource tertentu seperti CPU atau memori untuk Pod. Anda menetapkan permintaan ini dalam manifes Pod. Penjadwal Kubernetes akan menempatkan Pod Anda di node yang memiliki kapasitas yang cukup untuk mengakomodasi permintaan resource tersebut.
Beberapa beban kerja tidak menggunakan 100% resource yang diminta selama seluruh waktu eksekusi. Misalnya, beban kerja yang menggunakan CPU tambahan selama periode bootingnya 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 daripada yang Anda tentukan dalam permintaan, jika kapasitas tersebut tersedia.
Untuk informasi selengkapnya tentang cara kerja proses ini di GKE, lihat Kapasitas burst di GKE di halaman ini.
Manfaat Pod bursting
Bursting berguna saat Pod Anda hanya memerlukan resource tambahan untuk periode waktu singkat guna mengakomodasi lonjakan penggunaan resource. Contoh skenario mencakup hal berikut:
- Anda memiliki grup beban kerja yang sering tidak ada aktivitas dan mengirim 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 disediakan.
Bursting memungkinkan Anda hanya meminta resource yang diperlukan Pod untuk sebagian besar runtime-nya, sekaligus memastikan bahwa Pod dapat menggunakan lebih banyak resource jika diperlukan. Manfaat burst meliputi hal berikut:
- Biaya operasi yang lebih rendah: Anda tidak perlu meminta konsumsi resource puncak beban kerja yang diharapkan. Permintaan Anda dapat berupa nilai steady state yang lebih rendah. Di Autopilot, Anda membayar jumlah permintaan resource Pod, sehingga biaya berjalan Anda lebih rendah.
- Penggunaan resource yang lebih efisien: Anda menghindari kapasitas komputasi yang tidak ada aktivitasnya karena Pod Anda melakukan bursting ke kapasitas yang tidak terpakai. Workload Anda cenderung akan menggunakan semua resource berbayar.
- Performa yang lebih baik: Pod dapat menggunakan resource tambahan sesuai kebutuhan untuk mengurangi waktu pemrosesan permintaan yang masuk, atau untuk melakukan booting lebih cepat selama peristiwa peningkatan skala.
Kapan sebaiknya Anda tidak menggunakan burst
Kubernetes menetapkan class Kualitas Layanan (QoS) Burstable
ke Pod yang menentukan batas resource yang lebih tinggi daripada permintaannya. Pod QoS Burstable
lebih cenderung dihapus saat Kubernetes perlu mengklaim kembali resource di
node. Untuk informasi selengkapnya, lihat
Kelas QoS Burstable
dalam dokumentasi Kubernetes.
Sebelum memulai
Sebelum memulai, pastikan Anda telah menjalankan 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
gcloud components update
.
- Pastikan Anda memiliki cluster GKE Autopilot yang menjalankan versi 1.30.2-gke.1394000 atau yang lebih baru, atau versi apa pun dari cluster GKE Standard. Untuk membuat cluster baru, lihat Membuat cluster Autopilot.
Ketersediaan bursting di GKE
Workload dapat melonjak dalam situasi berikut:
Ketersediaan burst | |
---|---|
Mode Autopilot GKE | Jenis Pod berikut dapat di-burst dalam versi GKE apa pun yang mendukung hardware yang diminta Pod:
Untuk semua workload lainnya, bursting akan tersedia saat Anda memulai ulang panel kontrol setelah memastikan bahwa cluster memenuhi semua kondisi berikut:
Untuk mengetahui detailnya, lihat Batasan. |
Mode GKE Standard | Pod dapat di-burst di versi GKE apa pun. |
Batasan
- Workload Autopilot hanya dapat menggunakan burst untuk permintaan CPU dan memori.
Saat Anda mengupgrade cluster Autopilot ke versi yang didukung, GKE akan mengupgrade node pekerja agar sesuai dengan versi panel kontrol dari waktu ke waktu. Mulai ulang bidang kontrol diperlukan untuk mengaktifkan bursting, dan harus dilakukan setelah semua node menjalankan versi yang didukung dan mode cgroup yang didukung. Bidang kontrol akan dimulai ulang secara otomatis sekitar sekali seminggu selama operasi seperti penskalaan, upgrade, atau pemeliharaan.
Untuk memicu mulai ulang panel kontrol secara manual, lakukan tindakan berikut:
Periksa apakah semua node Anda menjalankan versi 1.30.2-gke.1394000 atau yang lebih baru:
kubectl get nodes
Outputnya 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.1349000
Semua 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 control plane secara manual ke versi yang sama dengan yang sudah digunakan cluster.
gcloud container clusters upgrade CLUSTER_NAME --master \ --cluster-version CURRENT_CLUSTER_VERSION
Ganti 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.
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: 350m
Manifes ini memiliki kolom berikut untuk mengaktifkan burst:
resources.requests
: Resource yang diperlukan penampung untuk berfungsi. Tetapkan nilai ini ke kapasitas yang diperlukan penampung Anda dalam status stabil.resources.limits
: Kapasitas resource maksimum yang dapat digunakan penampung. Menetapkan batas yang lebih tinggi dari permintaan memungkinkan Pod melakukan bursting hingga batas yang ditentukan jika kapasitas tersebut tersedia di node. Jika Anda menghilangkan kolom ini, Pod dapat memicu burst hingga kapasitas burstable yang tersedia di node. Kapasitas ini dihitung sebagai berikut:- Mode Autopilot: Kapasitas yang tidak terpakai dalam jumlah permintaan resource Pod di node.
- Mode standar: Kapasitas yang tidak digunakan di resource node.
spec.nodeSelector
danspec.tolerations
: Opsional. Tambahkan kolom ini dengan label khusus sepertipod-type: "non-critical"
untuk memberi tahu GKE agar membuat node baru untuk menjalankan Pod yang dapat di-burst. GKE menerapkan taint ke node baru ini untuk mencegah Pod lain, seperti beban kerja 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.yaml
Mungkin perlu waktu beberapa menit untuk memulai beban kerja.
Periksa class QoS Pod:
kubectl describe pod helloweb | grep -m 1 "QoS"
Outputnya adalah sebagai berikut:
QoS Class: Burstable
Kapasitas burstable di GKE
Untuk memfasilitasi lonjakan Pod, GKE menghitung kapasitas yang dapat diperluas untuk setiap node dalam cluster. Penghitungan ini untuk node tertentu adalah sebagai berikut:
Cluster Autopilot:
- Pod yang meminta akselerator atau meminta seri mesin tertentu: Kapasitas resource yang dapat dialokasikan node, yang merupakan 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. Jika Pod dihentikan, kapasitas burstable akan berkurang sesuai dengan permintaan Pod tersebut. Bagian dari kapasitas burstable yang tidak digunakan oleh Pod yang berjalan tersedia untuk dialokasikan jika salah satu Pod perlu di-burst.
Autopilot juga menambahkan buffer yang telah ditentukan ke kapasitas burstable sehingga Pod sistem di node yang mengalami burst di luar permintaannya tidak 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 burst
Gunakan praktik berikut dengan Pod bursting:
- Tetapkan permintaan resource Anda sama dengan batas untuk Pod apa pun yang menyediakan
fungsi penting di lingkungan Anda. Hal ini memastikan bahwa Pod tersebut mendapatkan
class Kualitas Layanan (QoS) Kubernetes
Guaranteed
. - Pastikan Anda hanya mengonfigurasi memory bursting pada Pod yang dapat menangani pengosongan saat Kubernetes perlu mengambil kembali memori di 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 memicu burst menjadi kelipatan permintaan CPU-nya sehingga 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 di node tertentu, termasuk Pod sistem dan DaemonSets. Anda dapat mengoptimalkan kapasitas burstable di node dengan cara berikut. Namun, burst bersifat oportunistik dan tidak dijamin.
- Untuk meningkatkan kapasitas burstable di node untuk beban kerja tertentu, gunakan afinitas Pod untuk menempatkan Pod tertentu secara bersamaan 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 burst
Bagian ini menggunakan contoh Deployment yang memiliki Pod burstable berikut untuk menunjukkan cara kerja Pod bursting di cluster GKE Autopilot:
- Pod 1 meminta CPU 250 m dan tidak memiliki batas CPU. Pod 1 menggunakan 100 m CPU untuk berjalan.
- Pod 2 meminta 200 m CPU dan memiliki batas CPU 250 m. Pod 2 menggunakan 100 m CPU untuk dijalankan.
Kedua Pod berjalan di node yang sama. Total kapasitas burstable di node adalah 450 m CPU (jumlah permintaan resource). Setiap Pod hanya menggunakan 100 m CPU untuk berjalan, yang berarti node memiliki kapasitas burstable yang tersedia sebesar 250 m.
Pertimbangkan skenario berikut saat lonjakan traffic terjadi:
- Pod 1 memerlukan CPU tambahan 300 m: pod ini dapat melakukan bursting dan menggunakan CPU 250 m, yang merupakan kapasitas burstable yang tersedia. Node tidak lagi memiliki kapasitas burstable yang tersedia.
- Pod 2 memerlukan CPU tambahan 150 m: Pod ini dapat melakukan burst dan menggunakan CPU tambahan 150 m. Node kemudian memiliki sisa CPU 100 m dari kapasitas burstable yang tersedia.
- Pod 2 memerlukan CPU tambahan 200 m: Pod ini dapat melakukan burst dan menggunakan CPU 150 m, sehingga total penggunaan menjadi 250 m CPU untuk Pod 2. Pod 2 memiliki batas CPU 250 m dan tidak dapat melampaui batas tersebut.
Cara GKE menangani Pod yang melebihi kapasitas burstable
Jika Pod burstable Anda mencoba menggunakan lebih banyak resource daripada kapasitas burstable di 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 mereka minta.
- Memori: Jika penggunaan memori melebihi kapasitas burstable, GKE akan menghentikan container untuk mengklaim kembali memori di node. GKE dimulai dengan menghentikan container yang membutuhkan banyak resource di Pod dengan QoS yang lebih rendah.
Sebaiknya Anda selalu meminta memori yang cukup untuk operasi Pod normal. Jika penampung memiliki dependensi pada ledakan memori agar berfungsi secara normal, penampung tersebut mungkin mengalami error berulang kali jika memori tersebut tidak tersedia.
Menggunakan bursting Pod dengan penyediaan kapasitas cadangan
GKE memungkinkan Anda men-deploy Pod yang tidak ada aktivitas untuk mencadangkan kapasitas komputasi tambahan untuk penskalaan Pod yang lebih cepat selama peristiwa traffic tinggi di masa mendatang seperti promo kilat toko online. Pod lain di node yang sama dapat melakukan bursting ke kapasitas yang direservasi dan tidak digunakan ini sehingga kapasitas tidak tidak ada aktivitas 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 lonjakan Pod dengan menetapkan batas yang lebih tinggi daripada permintaan atau dengan menghapus batas. Namun, di cluster Standard, Anda harus membuat dan mengonfigurasi node pool dengan kapasitas resource yang sesuai untuk mendukung bursting. Untuk mendapatkan potensi pengurangan biaya Pod burstable di cluster Standar, Anda memerlukan perencanaan node dan pengemasan bin Pod yang lebih cermat, karena Anda membayar VM Compute Engine yang mendasarinya.
Pertimbangkan hal berikut di cluster Standar:
Batas penggunaan resource maksimum yang memicu pengusiran Kubernetes atau throttling CPU adalah kapasitas resource yang dapat dialokasikan di node. Untuk menentukan nilai ini, lihat Merencanakan ukuran node GKE Standard.
Penggunaan resource node di cluster Standar lebih cenderung mencapai nilai minimum penghapusan Kubernetes karena GKE tidak otomatis membatasi penggunaan resource jika Anda tidak menentukan batas. Oleh karena itu, Pod yang memicu memori lebih cenderung dihentikan oleh pengusiran tekanan node Kubernetes.
Langkah selanjutnya
- Menyediakan kapasitas komputasi tambahan untuk penskalaan Pod yang cepat
- Menyesuaikan ukuran workload GKE Standard Anda dalam skala besar