arrow_back

Memahami dan Mengombinasikan Berbagai Strategi Penskalaan Otomatis GKE

Login Gabung
Uji dan bagikan pengetahuan Anda kepada komunitas kami.
done
Dapatkan akses ke lebih dari 700 lab praktik, badge keahlian, dan kursus

Memahami dan Mengombinasikan Berbagai Strategi Penskalaan Otomatis GKE

Lab 1 jam 30 menit universal_currency_alt 5 Kredit show_chart Menengah
info Lab ini mungkin menggabungkan alat AI untuk mendukung pembelajaran Anda.
Uji dan bagikan pengetahuan Anda kepada komunitas kami.
done
Dapatkan akses ke lebih dari 700 lab praktik, badge keahlian, dan kursus

GSP768

Lab Mandiri Google Cloud

Ringkasan

Google Kubernetes Engine memiliki solusi horizontal dan vertikal untuk menskalakan pod dan juga infrastruktur Anda secara otomatis. Dalam kaitannya dengan pengoptimalan biaya, alat-alat tersebut menjadi sangat berguna untuk memastikan bahwa workload Anda dijalankan seefisien mungkin dan Anda cukup membayar sesuai dengan penggunaan.

Dalam lab ini, Anda akan menyiapkan dan mengamati Penskalaan Otomatis Pod Horizontal dan Penskalaan Otomatis Pod Vertikal untuk penskalaan tingkat pod, serta Autoscaler Cluster (solusi infrastruktur horizontal) dan Penyediaan Otomatis Node (solusi infrastruktur vertikal) untuk penskalaan tingkat node. Pertama-tama, Anda akan menggunakan alat penskalaan otomatis tersebut untuk menghemat sebanyak mungkin resource dan mengurangi ukuran cluster selama periode permintaan rendah. Selanjutnya, Anda akan meningkatkan permintaan cluster dan mengamati cara penskalaan otomatis mempertahankan ketersediaan.

Tujuan

Dalam lab ini, Anda akan mempelajari cara:

  • Mengurangi jumlah replika untuk sebuah Deployment dengan Horizontal Pod Autoscaler
  • Mengurangi permintaan CPU untuk sebuah Deployment dengan Vertical Pod Autoscaler
  • Mengurangi jumlah node yang digunakan dalam cluster dengan Autoscaler Cluster
  • Otomatis membuat node pool yang dioptimalkan untuk workload dengan Penyediaan Otomatis Node
  • Menguji perilaku penskalaan otomatis terhadap lonjakan permintaan
  • Menyediakan cluster secara berlebih dengan Pause Pod

Penyiapan dan persyaratan

Sebelum mengklik tombol Mulai Lab

Baca petunjuk ini. Lab memiliki timer dan Anda tidak dapat menjedanya. Timer, yang dimulai saat Anda mengklik Start Lab, akan menampilkan durasi ketersediaan resource Google Cloud untuk Anda.

Lab praktik ini dapat Anda gunakan untuk melakukan sendiri aktivitas lab di lingkungan cloud sungguhan, bukan di lingkungan demo atau simulasi. Untuk mengakses lab ini, Anda akan diberi kredensial baru yang bersifat sementara dan dapat digunakan untuk login serta mengakses Google Cloud selama durasi lab.

Untuk menyelesaikan lab ini, Anda memerlukan:

  • Akses ke browser internet standar (disarankan browser Chrome).
Catatan: Gunakan jendela Samaran atau browser pribadi untuk menjalankan lab ini. Hal ini akan mencegah konflik antara akun pribadi Anda dan akun Siswa yang dapat menyebabkan tagihan ekstra pada akun pribadi Anda.
  • Waktu untuk menyelesaikan lab. Ingat, setelah dimulai, lab tidak dapat dijeda.
Catatan: Jika Anda sudah memiliki project atau akun pribadi Google Cloud, jangan menggunakannya untuk lab ini agar terhindar dari tagihan ekstra pada akun Anda.

Cara memulai lab dan login ke Google Cloud Console

  1. Klik tombol Start Lab. Jika Anda perlu membayar lab, jendela pop-up akan terbuka untuk memilih metode pembayaran. Di sebelah kiri adalah panel Lab Details dengan info berikut:

    • Tombol Open Google Cloud console
    • Waktu tersisa
    • Kredensial sementara yang harus Anda gunakan untuk lab ini
    • Informasi lain, jika diperlukan, untuk menyelesaikan lab ini
  2. Klik Open Google Cloud console (atau klik kanan dan pilih Open Link in Incognito Window jika Anda menjalankan browser Chrome).

    Lab akan menjalankan resource, lalu membuka tab lain yang menampilkan halaman Sign in.

    Tips: Atur tab di jendela terpisah secara berdampingan.

    Catatan: Jika Anda melihat dialog Choose an account, klik Use Another Account.
  3. Jika perlu, salin Username di bawah dan tempel ke dialog Sign in.

    {{{user_0.username | "Username"}}}

    Anda juga dapat menemukan Username di panel Lab Details.

  4. Klik Next.

  5. Salin Password di bawah dan tempel ke dialog Welcome.

    {{{user_0.password | "Password"}}}

    Anda juga dapat menemukan Password di panel Lab Details.

  6. Klik Next.

    Penting: Anda harus menggunakan kredensial yang diberikan lab. Jangan menggunakan kredensial akun Google Cloud Anda. Catatan: Menggunakan akun Google Cloud sendiri untuk lab ini dapat dikenai biaya tambahan.
  7. Klik halaman berikutnya:

    • Setujui persyaratan dan ketentuan.
    • Jangan tambahkan opsi pemulihan atau autentikasi 2 langkah (karena ini akun sementara).
    • Jangan mendaftar uji coba gratis.

Setelah beberapa saat, Konsol Google Cloud akan terbuka di tab ini.

Catatan: Untuk melihat menu dengan daftar produk dan layanan Google Cloud, klik Navigation menu di kiri atas. Ikon Navigation menu

Mengaktifkan Cloud Shell

Cloud Shell adalah mesin virtual yang dilengkapi dengan berbagai alat pengembangan. Mesin virtual ini menawarkan direktori beranda persisten berkapasitas 5 GB dan berjalan di Google Cloud. Cloud Shell menyediakan akses command-line untuk resource Google Cloud Anda.

  1. Klik Activate Cloud Shell Ikon Activate Cloud Shell di bagian atas konsol Google Cloud.

Setelah terhubung, Anda sudah diautentikasi, dan project ditetapkan ke PROJECT_ID Anda. Output berisi baris yang mendeklarasikan PROJECT_ID untuk sesi ini:

Project Cloud Platform Anda dalam sesi ini disetel ke YOUR_PROJECT_ID

gcloud adalah alat command line untuk Google Cloud. Alat ini sudah terinstal di Cloud Shell dan mendukung pelengkapan command line.

  1. (Opsional) Anda dapat menampilkan daftar nama akun yang aktif dengan perintah ini:
gcloud auth list
  1. Klik Authorize.

  2. Output Anda sekarang akan terlihat seperti ini:

Output:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net Untuk menyetel akun aktif, jalankan: $ gcloud config set account `ACCOUNT`
  1. (Opsional) Anda dapat menampilkan daftar project ID dengan perintah ini:
gcloud config list project

Output:

[core] project = <project_ID>

Contoh output:

[core] project = qwiklabs-gcp-44776a13dea667a6 Catatan: Untuk mendapatkan dokumentasi gcloud yang lengkap di Google Cloud, baca panduan ringkasan gcloud CLI.

Menyediakan lingkungan pengujian

  1. Tetapkan zona default Anda ke :
gcloud config set compute/zone {{{project_0.default_zone | zone}}}
  1. Jalankan perintah berikut untuk membuat cluster tiga node di zona :
gcloud container clusters create scaling-demo --num-nodes=3 --enable-vertical-pod-autoscaling

Untuk membantu mendemonstrasikan penskalaan otomatis pod horizontal, lab ini menggunakan image Docker kustom yang didasarkan pada image php-apache. Image tersebut menetapkan halaman index.php yang menjalankan beberapa komputasi dengan penggunaan CPU yang intensif. Anda akan memantau deployment image ini.

  1. Buat manifes untuk deployment php-apache:
cat << EOF > php-apache.yaml apiVersion: apps/v1 kind: Deployment metadata: name: php-apache spec: selector: matchLabels: run: php-apache replicas: 3 template: metadata: labels: run: php-apache spec: containers: - name: php-apache image: k8s.gcr.io/hpa-example ports: - containerPort: 80 resources: limits: cpu: 500m requests: cpu: 200m --- apiVersion: v1 kind: Service metadata: name: php-apache labels: run: php-apache spec: ports: - port: 80 selector: run: php-apache EOF
  1. Terapkan manifes yang baru dibuat ini ke cluster Anda:
kubectl apply -f php-apache.yaml

Klik Check my progress untuk memastikan Anda telah menjalankan tugas di atas. Menyediakan lingkungan pengujian

Tugas 1. Menskalakan pod dengan Penskalaan Otomatis Pod Horizontal

Penskalaan Otomatis Pod Horizontal mengubah bentuk workload Kubernetes Anda dengan otomatis meningkatkan atau mengurangi jumlah pod sebagai respons terhadap konsumsi memori atau CPU workload, atau sebagai respons terhadap metrik kustom yang dilaporkan dari dalam Kubernetes atau metrik eksternal dari sumber di luar cluster Anda.

  1. Di Cloud Shell, jalankan perintah ini untuk menginspeksi deployment cluster Anda:
kubectl get deployment

Anda akan melihat deployment php-apache dengan 3/3 pod sedang berjalan:

NAME READY UP-TO-DATE AVAILABLE AGE php-apache 3/3 3 3 91s Catatan: Jika Anda tidak melihat 3 pod tersedia, tunggu sebentar sampai ketiga pod selesai dibuat, lalu jalankan kembali perintah sebelumnya. Jika Anda melihat 1/1 pod tersedia, kemungkinan sudah cukup waktu bagi Anda untuk memperkecil skala deployment.
  1. Terapkan penskalaan otomatis horizontal ke deployment php-apache:
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

Klik Check my progress untuk memastikan Anda telah menjalankan tugas di atas. Menskalakan pod dengan Penskalaan Otomatis Pod Horizontal

Perintah autoscale ini akan mengonfigurasi Horizontal Pod Autoscaler yang akan mempertahankan 1-10 replika pod yang dikontrol oleh deployment php-apache. Flag cpu-percent menetapkan 50% sebagai target pemanfaatan CPU rata-rata untuk CPU yang diminta di semua pod. HPA akan menyesuaikan jumlah replika (melalui deployment) untuk mempertahankan pemanfaatan CPU rata-rata sebesar 50% di semua pod.

  1. Periksa status terkini Horizontal Pod Autoscaler Anda:
kubectl get hpa

Di bawah kolom Targets, Anda akan melihat 1%/50%.

Angka ini berarti pod dalam deployment Anda saat ini menggunakan 1% dari target pemanfaatan CPU rata-rata. Hal ini tidak mengejutkan karena aplikasi php-apache tidak menerima traffic apa pun saat ini.

Catatan: Jika Anda melihat <unknown>/50%, tunggu sebentar, lalu jalankan kembali perintah kubectl get hpa. HPA Anda belum membuat penilaian.

Perhatikan juga kolom Replicas. Sebagai permulaan, nilainya adalah 3. Angka ini akan diubah oleh autoscaler sesuai perubahan jumlah pod yang diminta.

Dalam hal ini, autoscaler akan menurunkan skala deployment hingga mencapai jumlah minimum pod yang ditunjukkan saat Anda menjalankan perintah autoscale. Penskalaan Otomatis Pod Horizontal memerlukan waktu 5-10 menit dan akan mengharuskan dimatikannya atau dimulainya pod baru, tergantung apakah skalanya diturunkan atau ditingkatkan.

Lanjutkan ke langkah berikutnya dalam lab ini. Anda akan memeriksa hasil autoscaler nanti.

Catatan: Dalam lab ini, Anda menggunakan cpu-percent sebagai metrik target untuk autoscaler. Namun, HPA memungkinkan Anda menetapkan metrik kustom agar ukuran pod dapat diskalakan berdasarkan metrik berguna lainnya yang terekam dalam log.

Tugas 2. Menskalakan ukuran pod dengan Penskalaan Otomatis Pod Vertikal

Dengan Penskalaan Otomatis Pod Vertikal, Anda tidak perlu lagi memikirkan nilai yang harus ditetapkan untuk permintaan CPU dan memori sebuah container. Autoscaler dapat merekomendasikan nilai untuk permintaan serta batas CPU dan memori, atau memperbarui nilai tersebut secara otomatis.

Catatan: Penskalaan Otomatis Pod Vertikal (VPA) sebaiknya tidak digunakan bersama dengan Penskalaan Otomatis Pod Horizontal (HPA) pada CPU atau memori. Kedua autoscaler ini akan mencoba merespons perubahan permintaan berdasarkan metrik yang sama, sehingga akan bentrok. Namun, VPA pada CPU atau memori dapat digunakan dengan HPA pada metrik kustom untuk menghindari tumpang-tindih.

Penskalaan Otomatis Pod Vertikal sudah diaktifkan pada cluster scaling-demo.

  1. Untuk memverifikasi, jalankan:
gcloud container clusters describe scaling-demo | grep ^verticalPodAutoscaling -A 1

Output-nya akan menampilkan enabled: true

Catatan: Penskalaan Otomatis Pod Vertikal dapat diaktifkan pada cluster yang sudah ada dengan gcloud container clusters update scaling-demo --enable-vertical-pod-autoscaling

Untuk mendemonstrasikan VPA, deploy aplikasi hello-server.

  1. Terapkan deployment hello-server ke cluster Anda:
kubectl create deployment hello-server --image=gcr.io/google-samples/hello-app:1.0
  1. Pastikan deployment berhasil dibuat:
kubectl get deployment hello-server
  1. Tetapkan permintaan resource CPU 450m ke deployment:
kubectl set resources deployment hello-server --requests=cpu=450m
  1. Selanjutnya, jalankan perintah ini untuk menginspeksi spesifikasi container pod hello-server:
kubectl describe pod hello-server | sed -n "/Containers:$/,/Conditions:/p"
  • Dalam output-nya, temukan Requests. Perhatikan bahwa sekarang pod ini meminta CPU 450m yang Anda tetapkan.
  1. Sekarang, buat manifes untuk Vertical Pod Autoscaler:
cat << EOF > hello-vpa.yaml apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: hello-server-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: hello-server updatePolicy: updateMode: "Off" EOF

Perintah di atas menghasilkan manifes untuk Vertical Pod Autoscaler yang menarget deployment hello-server dengan Update Policy (kebijakan update) Off. Sebuah VPA dapat memiliki salah satu dari tiga kebijakan update berbeda, yang dapat berguna bergantung pada aplikasi Anda:

  • Off: kebijakan ini berarti VPA akan menghasilkan rekomendasi berdasarkan data historis yang dapat Anda terapkan secara manual.
  • Initial: rekomendasi VPA akan digunakan untuk membuat pod baru satu kali, dan setelah itu tidak akan mengubah ukuran pod.
  • Auto: pod akan dihapus dan dibuat ulang secara rutin untuk menyesuaikan dengan ukuran rekomendasi.
  1. Terapkan manifes untuk hello-vpa:
kubectl apply -f hello-vpa.yaml
  1. Tunggu sebentar, lalu lihat VerticalPodAutoscaler:
kubectl describe vpa hello-server-vpa

Temukan "Container Recommendations" di bagian akhir output. Jika tidak ada, tunggu sedikit lebih lama, lalu jalankan kembali perintah sebelumnya. Setelah Container Recommendations muncul, Anda akan melihat beberapa jenis rekomendasi, masing-masing disertai nilai untuk CPU dan memori:

  • Lower Bound: angka batas bawah yang akan dilihat VPA untuk memicu perubahan ukuran. Jika pemanfaatan pod Anda di bawah angka ini, VPA akan menghapus pod tersebut dan menurunkan skalanya.
  • Target: nilai yang akan digunakan VPA saat mengubah ukuran pod.
  • Uncapped Target: target pemanfaatan untuk VPA jika tidak ada kapasitas minimum atau maksimum yang ditetapkan.
  • Upper Bound: angka batas atas yang akan dilihat VPA untuk memicu perubahan ukuran. Jika pemanfaatan pod Anda di atas angka ini, VPA akan menghapus pod tersebut dan menaikkan skalanya.

Anda akan melihat bahwa VPA merekomendasikan agar permintaan CPU untuk container ini ditetapkan ke 25m, bukan 100m seperti sebelumnya, serta menyarankan banyaknya memori yang sebaiknya diminta. Pada tahap ini, rekomendasi tersebut dapat diterapkan ke deployment hello-server secara manual.

Catatan: Rekomendasi Penskalaan Otomatis Pod Vertikal didasarkan pada data historis dari container. Dalam praktiknya, sebaiknya tunggu setidaknya 24 jam untuk mengumpulkan data rekomendasi sebelum menerapkan perubahan apa pun.
  1. Untuk mengamati VPA dan efeknya dalam lab ini, ubah kebijakan update hello-vpa ke Auto, lalu perhatikan penskalaannya.

  2. Perbarui manifes untuk menetapkan kebijakan ke Auto, lalu terapkan konfigurasi berikut:

sed -i 's/Off/Auto/g' hello-vpa.yaml kubectl apply -f hello-vpa.yaml

Untuk mengubah ukuran sebuah pod, Vertical Pod Autoscaler harus menghapus pod tersebut dan membuatnya ulang dengan ukuran baru. Secara default, untuk menghindari periode nonaktif, VPA tidak akan menghapus dan mengubah ukuran pod yang terakhir aktif. Karenanya, Anda memerlukan setidaknya 2 replika untuk melihat perubahan yang dibuat oleh VPA.

  1. Skalakan deployment hello-server ke 2 replika:
kubectl scale deployment hello-server --replicas=2
  1. Sekarang, perhatikan pod Anda:
kubectl get pods -w
  1. Tunggu sampai Anda melihat pod hello-server-xxx berstatus terminating atau pending (atau klik Kubernetes Engine > Workloads):

Output

Ini adalah tanda bahwa VPA sedang menghapus dan mengubah ukuran pod. Setelah melihat output ini, tekan Ctrl + c untuk menghentikan perintah.

Klik Check my progress untuk memastikan Anda telah menjalankan tugas di atas. Menskalakan ukuran pod dengan Penskalaan Otomatis Pod Vertikal

Tugas 3. Hasil HPA

Sampai tahap ini, Horizontal Pod Autoscaler Anda kemungkinan besar sudah menurunkan skala deployment php-apache.

  1. Jalankan perintah ini untuk memeriksa HPA Anda:
kubectl get hpa
  • Lihat kolom Replicas. Anda akan melihat skala deployment php-apache telah diturunkan menjadi 1 pod.
Catatan: Jika Anda masih melihat 3 replika untuk deployment php-apache, tunggu beberapa menit lagi sampai autoscaler melakukan tindakan.
  • HPA memanfaatkan status aplikasi yang sedang tidak aktif dan menghapus semua resource yang tidak terpakai. Selanjutnya, jika aplikasi php-apache menerima lebih banyak permintaan, skalanya akan ditingkatkan kembali untuk mengakomodasi beban itu.
Catatan: Jika ketersediaan aplikasi menjadi perhatian utama, sebagai praktik terbaik, alokasikan buffer yang sedikit lebih tinggi sebagai jumlah minimum pod agar Horizontal Pod Autoscaler Anda dapat memperhitungkan waktu yang diperlukan untuk melakukan penskalaan.

Hal ini sangat berguna dalam upaya mengoptimalkan biaya. Dengan autoscaler yang disesuaikan dengan baik, Anda dapat menjaga agar aplikasi tetap memiliki ketersediaan tinggi, sekaligus hanya membayar untuk resource yang diperlukan untuk menjaga ketersediaan itu, apa pun tingkat permintaannya.

Tugas 4. Hasil VPA

Sekarang, VPA tentu sudah mengubah ukuran pod di deployment hello-server.

  1. Periksa pod Anda:
kubectl describe pod hello-server | sed -n "/Containers:$/,/Conditions:/p"
  1. Temukan kolom Requests:.
  • Vertical Pod Autoscaler Anda sudah membuat ulang pod sesuai target pemanfaatannya. Sekarang, VPA akan meminta lebih sedikit CPU dan juga meminta memori dalam jumlah tertentu:
Requests: cpu: 25m memory: 262144k Catatan: Jika permintaan CPU untuk pod mana pun masih 450m, tetapkan resource CPU ke nilai targetnya secara manual dengan perintah ini: kubectl set resources deployment hello-server --requests=cpu=25m. Terkadang, VPA dalam mode otomatis dapat memerlukan waktu lama atau menetapkan nilai batas atas atau batas bawah yang tidak akurat tanpa memiliki waktu untuk mengumpulkan data yang akurat. Agar tidak kehilangan waktu dalam lab ini, penggunaan rekomendasi seolah-olah VPA dalam mode "Off" merupakan solusi praktis.

Dalam kasus ini, VPA menjadi alat yang sangat baik untuk mengoptimalkan pemanfaatan resource dan, sebagai akibatnya, menghemat biaya. Permintaan CPU awal sebesar 400m lebih tinggi daripada yang diperlukan container ini. Dengan menyesuaikan permintaan tersebut menjadi 25m seperti yang direkomendasikan, Anda dapat menggunakan lebih sedikit CPU dari node pool, bahkan berpotensi meminta lebih sedikit node untuk disediakan di cluster.

Dengan kebijakan update Auto, VPA Anda akan terus menghapus dan mengubah ukuran pod di deployment hello-server selama masa aktifnya. VPA dapat menaikkan skala pod seiring meningkatnya permintaan untuk menangani traffic yang padat, lalu menurunkannya kembali selama periode nonaktif. Hal ini bagus untuk mengakomodasi kenaikan permintaan yang stabil pada aplikasi Anda, tetapi dengan risiko kehilangan ketersediaan saat traffic melonjak tajam.

Bergantung pada aplikasi Anda, penggunaan VPA dengan kebijakan update Off dan penerapan rekomendasi sesuai kebutuhan secara umum merupakan pendekatan yang paling aman untuk mengoptimalkan pemanfaatan resource dan memaksimalkan ketersediaan cluster.

Di bagian selanjutnya, Anda akan mempelajari cara mengoptimalkan pemanfaatan resource lebih jauh dengan Autoscaler Cluster dan Penyediaan Otomatis Node.

Tugas 5. Autoscaler cluster

Autoscaler Cluster didesain untuk menambah atau menghapus node berdasarkan permintaan. Saat permintaan tinggi, autoscaler cluster akan menambahkan node ke node pool untuk mengakomodasi permintaan itu. Saat permintaan rendah, autoscaler cluster akan menurunkan kembali skala cluster dengan menghapus node. Dengan begitu, Anda dapat mempertahankan cluster tetap dalam ketersediaan tinggi sekaligus meminimalkan biaya berlebih yang terkait dengan mesin tambahan.

  1. Aktifkan penskalaan otomatis untuk cluster Anda:
gcloud beta container clusters update scaling-demo --enable-autoscaling --min-nodes 1 --max-nodes 5

Proses ini akan memerlukan waktu beberapa menit.

Saat menskalakan cluster, keputusan terkait kapan waktunya menghapus node merupakan kompromi antara pengoptimalan pemanfaatan resource dan ketersediaannya. Menghapus node yang kurang dimanfaatkan akan meningkatkan pemanfaatan cluster, tetapi workload baru mungkin harus menunggu sampai resource disediakan lagi agar dapat berjalan.

Anda dapat menentukan profil penskalaan otomatis mana yang akan digunakan saat membuat keputusan tersebut. Profil yang saat ini tersedia adalah:

  • Balanced: Profil default.
  • Optimize-utilization: Lebih memprioritaskan pengoptimalan pemanfaatan daripada mempertahankan resource ekstra di cluster. Jika profil ini dipilih, autoscaler cluster akan menurunkan skala cluster secara lebih agresif. Autoscaler cluster dapat menghapus lebih banyak node, dan menghapus node lebih cepat. Profil ini dioptimalkan untuk penggunaan dengan workload batch yang tidak sensitif terhadap latensi inisialisasi sistem.
  1. Beralihlah ke profil penskalaan otomatis optimize-utilization agar efek penuh penskalaan dapat diamati:
gcloud beta container clusters update scaling-demo \ --autoscaling-profile optimize-utilization
  1. Setelah penskalaan otomatis aktif, amati cluster Anda di Konsol Cloud. Klik ikon tiga garis di kiri atas untuk membuka Navigation menu.

  2. Dari Navigation menu, pilih Kubernetes Engine > Clusters.

  3. Di halaman Clusters, pilih cluster scaling-demo.

  4. Di halaman cluster scaling-demo, pilih tab Nodes.

Tab Nodes

  1. Lihat ringkasan pemanfaatan resource ketiga node Anda.
Catatan: Angka-angka di konsol Anda mungkin berbeda dengan yang ditampilkan dalam gambar. Kubernetes tidak selalu menyediakan dan menetapkan resource dengan cara yang sama.

Jika nilai CPU requested dan CPU allocatable untuk ke-3 nodes digabung, totalnya akan berjumlah 1555m dan 2820m. Artinya, total terdapat 1265m CPU yang tersedia di seluruh cluster. Jumlah ini lebih banyak daripada yang dapat disediakan oleh satu node.

Untuk mengoptimalkan pemanfaatan, workload terkini pada tingkat permintaannya saat ini dapat dikonsolidasikan menjadi dua node, bukan tiga. Namun, skala cluster Anda belum otomatis diturunkan. Hal ini karena pod sistem tersebar ke seluruh cluster.

Cluster Anda menjalankan sejumlah deployment pada namespace kube-system yang memungkinkan berfungsinya berbagai layanan GKE seperti logging, pemantauan, penskalaan otomatis, dll.

  1. Hal ini dapat diverifikasi dengan menjalankan perintah berikut di Cloud Shell:
kubectl get deployment -n kube-system

Secara default, sebagian besar pod sistem dari deployment ini akan mencegah autoscaler cluster menjadikan pod tersebut offline sepenuhnya untuk menjadwalkannya ulang. Secara umum, hal ini baik karena banyak dari pod ini mengumpulkan data yang digunakan di deployment dan layanan lain. Misalnya, penonaktifan sementara pod metrics-agent akan menimbulkan kesenjangan dalam data yang dikumpulkan untuk VPA dan HPA, atau penonaktifan pod fluentd akan menimbulkan kesenjangan dalam log cloud Anda.

Untuk keperluan lab ini, Anda akan menerapkan Pod Disruption Budget ke pod kube-system agar autoscaler cluster dapat menjadwalkan ulang pod tersebut di node lain dengan aman. Cara ini akan menghasilkan cukup ruang untuk mengurangi skala cluster Anda.

Pod Disruption Budget (PDB) menentukan cara Kubernetes menangani disrupsi seperti upgrade, penghapusan pod, kehabisan resource, dll. Di PDB, Anda dapat menetapkan jumlah pod max-unavailable dan/atau min-available yang harus dimiliki sebuah deployment.

  1. Jalankan perintah berikut untuk membuat Pod Disruption Budget bagi setiap pod kube-system:
kubectl create poddisruptionbudget kube-dns-pdb --namespace=kube-system --selector k8s-app=kube-dns --max-unavailable 1 kubectl create poddisruptionbudget prometheus-pdb --namespace=kube-system --selector k8s-app=prometheus-to-sd --max-unavailable 1 kubectl create poddisruptionbudget kube-proxy-pdb --namespace=kube-system --selector component=kube-proxy --max-unavailable 1 kubectl create poddisruptionbudget metrics-agent-pdb --namespace=kube-system --selector k8s-app=gke-metrics-agent --max-unavailable 1 kubectl create poddisruptionbudget metrics-server-pdb --namespace=kube-system --selector k8s-app=metrics-server --max-unavailable 1 kubectl create poddisruptionbudget fluentd-pdb --namespace=kube-system --selector k8s-app=fluentd-gke --max-unavailable 1 kubectl create poddisruptionbudget backend-pdb --namespace=kube-system --selector k8s-app=glbc --max-unavailable 1 kubectl create poddisruptionbudget kube-dns-autoscaler-pdb --namespace=kube-system --selector k8s-app=kube-dns-autoscaler --max-unavailable 1 kubectl create poddisruptionbudget stackdriver-pdb --namespace=kube-system --selector app=stackdriver-metadata-agent --max-unavailable 1 kubectl create poddisruptionbudget event-pdb --namespace=kube-system --selector k8s-app=event-exporter --max-unavailable 1

Klik Check my progress untuk memastikan Anda telah menjalankan tugas di atas. Autoscaler cluster

Dalam setiap perintah ini, Anda memilih pod deployment kube-system berbeda berdasarkan label yang ditetapkan saat pembuatannya dan menetapkan bahwa boleh ada 1 pod yang tidak tersedia untuk setiap deployment tersebut. Hal ini akan membuat autoscaler dapat menjadwalkan ulang pod sistem.

Setelah PDB diterapkan, skala cluster Anda akan diperkecil dari tiga node menjadi dua node dalam waktu satu atau dua menit.

  1. Jalankan kembali perintah ini di Cloud Shell sampai Anda melihat total dua node:
kubectl get nodes

Di Konsol Cloud, refresh tab Nodes untuk scaling-demo untuk memeriksa bagaimana resource Anda dikemas:

Tab Nodes scaling-demo

Anda telah mengonfigurasi otomatisasi yang memperkecil skala cluster dari tiga node menjadi dua node!

Bicara masalah biaya, sebagai akibat dari penurunan skala nodepool, Anda akan ditagih untuk jumlah mesin yang lebih sedikit selama periode permintaan rendah di cluster Anda. Penskalaan ini dapat lebih dramatis lagi jika terjadi fluktuasi dari periode permintaan tinggi ke permintaan rendah selama hari itu.

Perlu diperhatikan bahwa, sementara Autoscaler Cluster menghapus node yang tidak perlu, Penskalaan Otomatis Pod Vertikal dan Penskalaan Otomatis Pod Horizontal membantu mengurangi permintaan CPU dalam jumlah yang cukup sehingga node tidak lagi diperlukan. Menggabungkan alat-alat tersebut merupakan cara bagus untuk mengoptimalkan biaya keseluruhan dan pemanfaatan resource.

Jadi, autoscaler cluster membantu menambahkan dan menghapus node sebagai respons terhadap pod yang perlu dijadwalkan. Namun, GKE secara spesifik memiliki fitur lain untuk penskalaan vertikal yang disebut penyediaan otomatis node.

Tugas 6. Penyediaan Otomatis Node

Penyediaan Otomatis Node (NAP) menambahkan node pool baru yang disesuaikan ukurannya untuk memenuhi permintaan. Tanpa NAP, autoscaler cluster hanya akan membuat node baru di node pool yang ditentukan, yang berarti node baru tersebut akan berupa jenis mesin yang sama dengan node lain di pool itu. Hal ini bagus untuk membantu mengoptimalkan penggunaan resource pada workload batch dan aplikasi lain yang tidak memerlukan penskalaan ekstrem, karena pembuatan node pool yang dioptimalkan secara spesifik untuk kasus penggunaan Anda dapat memerlukan waktu lebih lama daripada sekadar menambahkan lebih banyak node ke pool yang ada.

  • Aktifkan Penyediaan Otomatis Node:
gcloud container clusters update scaling-demo \ --enable-autoprovisioning \ --min-cpu 1 \ --min-memory 2 \ --max-cpu 45 \ --max-memory 160

Dalam perintah ini, Anda menentukan jumlah minimum dan maksimum untuk resource CPU dan memori. Jumlah ini mencakup seluruh cluster.

NAP dapat memerlukan waktu sedikit lebih lama dan juga sangat mungkin tidak akan membuat node pool baru untuk cluster scaling-demo pada statusnya saat ini.

Di bagian selanjutnya, Anda akan meningkatkan permintaan ke cluster dan mengamati tindakan autoscaler dan juga NAP.

Klik Check my progress untuk memastikan Anda telah menjalankan tugas di atas. Penyediaan Otomatis Node

Tugas 7. Menguji dengan permintaan lebih besar

Sejauh ini, Anda telah menganalisis cara HPA, VPA, dan autoscaler cluster membantu menghemat resource dan biaya saat tingkat permintaan aplikasi Anda rendah. Sekarang, Anda akan mempelajari bagaimana ketiga alat tersebut menangani ketersediaan saat permintaan tinggi.

  1. Buka tab baru di Cloud Shell dengan menekan ikon +:

ikon Tambahkan Cloud Shell

  1. Di tab yang baru, jalankan perintah ini untuk mengirim loop kueri tanpa henti ke layanan php-apache:
kubectl run -i --tty load-generator --rm --image=busybox --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
  1. Kembali ke tab Cloud Shell asal.

  2. Dalam waktu kurang lebih satu menit, Anda akan melihat beban CPU yang lebih tinggi di HPA dengan menjalankan:

kubectl get hpa

Tunggu dan jalankan lagi perintah ini sampai target Anda terlihat di atas 100%.

Output

  1. Sekarang, pantau bagaimana cluster Anda menangani beban yang lebih tinggi dengan menjalankan perintah ini secara berkala:
kubectl get deployment php-apache

Anda juga dapat memantau cluster dengan memuat ulang tab nodes di Konsol Cloud.

Setelah beberapa menit, hal-hal berikut akan terjadi.

  • Pertama, skala deployment php-apache akan otomatis ditingkatkan oleh HPA untuk menangani beban yang lebih tinggi.
  • Kemudian, autoscaler cluster perlu menyediakan node baru untuk menangani peningkatan permintaan itu.
  • Terakhir, penyediaan otomatis node akan membuat node pool yang dioptimalkan untuk permintaan CPU dan memori workload cluster Anda. Dalam hal ini, node pool tersebut harus CPU tinggi dan memori rendah karena uji beban akan mendorong batas-batas CPU.

Tunggu hingga skala deployment php-apache ditingkatkan menjadi 7 replika dan tab node Anda terlihat seperti ini:

Daftar node

  1. Kembali ke tab Cloud Shell tempat Anda menjalankan uji beban dan batalkan proses dengan menekan Ctrl + c. Skala cluster Anda sekarang akan diturunkan kembali seiring berkurangnya permintaan.

Skala cluster Anda ditingkatkan secara efisien untuk mengimbangi permintaan yang lebih tinggi. Namun, perhatikan lamanya waktu yang diperlukan untuk menangani lonjakan permintaan ini. Pada banyak aplikasi, kehilangan ketersediaan selagi menyediakan resource baru dapat menjadi masalah.

Tugas 8. Mengoptimalkan beban yang lebih besar

Saat meningkatkan skala untuk beban yang lebih besar, penskalaan otomatis pod horizontal akan menambahkan pod baru, sedangkan penskalaan otomatis pod vertikal akan mengubah ukuran pod sesuai dengan setelan Anda. Jika node yang ada masih memiliki ruang, node tersebut tidak perlu mengambil image dan dapat langsung mulai menjalankan aplikasi di pod baru. Jika node yang Anda tangani belum pernah men-deploy aplikasi Anda, tambahan waktu harus diperhitungkan jika node tersebut perlu mendownload image container sebelum menjalankannya.

Jadi, jika Anda tidak memiliki cukup ruang di node yang ada dan Anda menggunakan autoscaler cluster, waktu yang diperlukan dapat lebih lama lagi. Sekarang, autoscaler perlu menyediakan node baru, menyiapkannya, lalu mendownload image dan menjalankan pod. Jika penyedia otomatis node akan membuat node pool baru seperti yang dilakukannya di cluster Anda, akan perlu waktu yang lebih lama lagi karena Anda harus menyediakan node pool baru terlebih dahulu, baru kemudian menyelesaikan semua langkah yang sama untuk node baru tersebut.

Catatan: Dalam praktiknya, Anda harus memastikan bahwa aplikasi Anda menggunakan image container yang sekecil mungkin. Image yang lebih kecil mempersingkat waktu cold start pod. Makin kecil image, makin cepat node dapat mendownloadnya saat Autoscaler Cluster menyediakan node baru untuk cluster Anda. Selain itu, image yang lebih besar dapat memperlama waktu inisialisasi pod, sehingga menurunkan performa saat autoscaler menyediakan node baru selama lonjakan traffic.

Guna menangani latensi yang berbeda-beda untuk penskalaan otomatis ini, sebaiknya Anda menyediakan resource sedikit berlebih (overprovision) untuk mengurangi tekanan pada aplikasi Anda saat dilakukan peningkatan skala otomatis. Hal ini sangat penting untuk pengoptimalan biaya agar Anda tidak perlu membayar untuk resource ekstra yang tidak dibutuhkan serta tidak mengorbankan performa aplikasi.

Untuk mencari tahu besarnya overprovision, Anda dapat menggunakan formula ini:

Formula: (1 dikurangi buffer) dibagi (1 ditambah traffic)

Misalnya, bayangkan pemanfaatan CPU untuk cluster Anda. Anda tidak ingin pemanfaatan CPU mencapai 100%, jadi Anda dapat memilih buffer 15% untuk menjaga jarak aman. Selanjutnya, variabel traffic dalam formula tersebut adalah persentase perkiraan pertumbuhan traffic dalam 2 hingga 3 menit ke depan. Dalam uji beban yang Anda jalankan sebelumnya, 0% hingga 150% merupakan contoh pertumbuhan yang agak ekstrem. Oleh karena itu, sebagai gantinya, bayangkan pertumbuhan traffic yang lebih lazim yakni 30%.

Formula: (1 dikurangi 15% buffer) dibagi (1 ditambah 30% pertumbuhan traffic) sama dengan 65%

Dengan angka-angka ini, Anda dapat menghitung buffer pengaman yakni sekitar 65%. Artinya, Anda sebaiknya melakukan overprovision resource sekitar 65% untuk menangani peningkatan skala sekaligus meminimalkan masalah.

Salah satu strategi yang efisien untuk melakukan overprovision pada cluster dengan Autoscaling Cluster adalah dengan menggunakan Pause Pod.

Pause Pod adalah deployment berprioritas rendah yang dapat dihapus dan diganti dengan deployment berprioritas tinggi. Hal ini berarti Anda dapat membuat pod berprioritas rendah yang tidak melakukan apa-apa selain mereservasi ruang buffer. Saat pod berprioritas lebih tinggi memerlukan ruang, pause pod akan dihapus dan dijadwalkan ulang ke node lain, atau ke node baru, sedangkan pod dengan prioritas lebih tinggi memiliki ruang yang diperlukan agar dapat dijadwalkan dengan cepat.

  1. Buat manifes untuk pause pod:
cat << EOF > pause-pod.yaml --- apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: overprovisioning value: -1 globalDefault: false description: "Priority class used by overprovisioning." --- apiVersion: apps/v1 kind: Deployment metadata: name: overprovisioning namespace: kube-system spec: replicas: 1 selector: matchLabels: run: overprovisioning template: metadata: labels: run: overprovisioning spec: priorityClassName: overprovisioning containers: - name: reserve-resources image: k8s.gcr.io/pause resources: requests: cpu: 1 memory: 4Gi EOF
  1. Terapkan ke cluster Anda:
kubectl apply -f pause-pod.yaml
  1. Sekarang, tunggu sebentar, lalu muat ulang tab nodes di cluster scaling-demo.

Amati bagaimana node baru dibuat (kemungkinan besar di node pool baru) untuk disesuaikan dengan pause pod yang baru dibuat. Sekarang, jika Anda menjalankan uji beban lagi, saat Anda memerlukan node ekstra untuk deployment php-apache, deployment tersebut dapat dijadwalkan di node yang menampung pause pod, sementara pause pod Anda ditempatkan di node baru. Cara ini sangat baik karena pause pod dummy Anda memungkinkan cluster menyediakan node baru di awal sehingga aplikasi yang sebenarnya dapat ditingkatkan skalanya lebih cepat. Jika menginginkan volume traffic yang lebih tinggi, Anda dapat menambahkan lebih banyak pause pod, tetapi sebagai praktik terbaik, jangan tambahkan lebih dari satu pause pod per node.

Klik Check my progress untuk memastikan Anda telah menjalankan tugas di atas. Mengoptimalkan beban yang lebih besar

Selamat!

Selamat! Dalam lab ini, Anda telah mengonfigurasi cluster untuk menaikkan atau menurunkan skala secara otomatis dan efisien berdasarkan permintaan. Penskalaan Otomatis Pod Horizontal dan Penskalaan Otomatis Pod Vertikal menawarkan solusi untuk menskalakan deployment cluster secara otomatis, sedangkan Autoscaler Cluster dan Penyediaan Otomatis Node memberikan solusi untuk otomatis menskalakan infrastruktur cluster.

Seperti biasa, alat mana yang sebaiknya digunakan bergantung pada workload Anda. Dengan menggunakan autoscaler ini secara cermat, Anda akan dapat memaksimalkan ketersediaan pada saat diperlukan, sekaligus membayar hanya untuk resource yang Anda perlukan selama periode permintaan rendah. Dari perspektif biaya, hal ini berarti Anda dapat mengoptimalkan penggunaan resource dan menghemat uang.

Langkah berikutnya/Pelajari lebih lanjut

Lihat referensi berikut untuk mempelajari lebih lanjut topik yang dibahas dalam lab ini:

Sertifikasi dan pelatihan Google Cloud

...membantu Anda mengoptimalkan teknologi Google Cloud. Kelas kami mencakup keterampilan teknis dan praktik terbaik untuk membantu Anda memahami dengan cepat dan melanjutkan proses pembelajaran. Kami menawarkan pelatihan tingkat dasar hingga lanjutan dengan opsi on demand, live, dan virtual untuk menyesuaikan dengan jadwal Anda yang sibuk. Sertifikasi membantu Anda memvalidasi dan membuktikan keterampilan serta keahlian Anda dalam teknologi Google Cloud.

Manual Terakhir Diperbarui: 01 Februari 2024

Lab Terakhir Diuji: 20 September 2023

Hak cipta 2024 Google LLC Semua hak dilindungi undang-undang. Google dan logo Google adalah merek dagang dari Google LLC. Semua nama perusahaan dan produk lain mungkin adalah merek dagang masing-masing perusahaan yang bersangkutan.

Konten ini tidak tersedia untuk saat ini

Kami akan memberi tahu Anda melalui email saat konten tersedia

Bagus!

Kami akan menghubungi Anda melalui email saat konten tersedia