arrow_back

Mengonfigurasi Penskalaan Otomatis Pod dan Kumpulan Node

Login Gabung
Dapatkan akses ke 700+ lab dan kursus

Mengonfigurasi Penskalaan Otomatis Pod dan Kumpulan Node

Lab 1 jam universal_currency_alt 5 Kredit show_chart Pengantar
info Lab ini mungkin menggabungkan alat AI untuk mendukung pembelajaran Anda.
Dapatkan akses ke 700+ lab dan kursus

Ringkasan

Di lab ini, Anda akan menyiapkan aplikasi di Google Kubernetes Engine (GKE), lalu menggunakan HorizontalPodAutoscaler untuk menskalakan aplikasi web secara otomatis. Kemudian, Anda akan bekerja dengan beberapa node pool dari jenis yang berbeda, serta menerapkan taint dan toleransi untuk mengontrol penjadwalan Pod sehubungan dengan node pool yang mendasarinya.

Tujuan

Di lab ini, Anda akan mempelajari cara melakukan tugas berikut:

  • Mengonfigurasi penskalaan otomatis dan HorizontalPodAutoscaler
  • Menambahkan node pool dan mengonfigurasi taint pada node untuk anti-afinitas Pod
  • Mengonfigurasi pengecualian untuk taint node dengan menambahkan toleransi ke manifes Pod

Penyiapan lab

Mengakses Qwiklabs

Untuk setiap lab, Anda akan memperoleh project Google Cloud baru serta serangkaian resource selama jangka waktu tertentu, tanpa biaya.

  1. Login ke Qwiklabs menggunakan jendela samaran.

  2. Perhatikan waktu akses lab (misalnya, 1:15:00), dan pastikan Anda dapat menyelesaikannya dalam waktu tersebut.
    Tidak ada fitur jeda. Bila perlu, Anda dapat memulai ulang lab, tetapi Anda harus memulai dari awal.

  3. Jika sudah siap, klik Start lab.

  4. Catat kredensial lab (Nama pengguna dan Sandi) Anda. Anda akan menggunakannya untuk login ke Google Cloud Console.

  5. Klik Open Google Console.

  6. Klik Use another account, lalu salin/tempel kredensial lab ini ke perintah yang muncul.
    Jika menggunakan kredensial lain, Anda akan menerima pesan error atau dikenai biaya.

  7. Setujui ketentuan dan lewati halaman resource pemulihan.

Setelah Anda menyelesaikan langkah login awal, dasbor project akan muncul.

Mengaktifkan Google Cloud Shell

Google Cloud Shell adalah virtual machine yang dilengkapi dengan berbagai fitur pengembangan. Virtual machine ini menawarkan direktori beranda persisten berkapasitas 5 GB dan berjalan di Google Cloud.

Google Cloud Shell menyediakan akses command line untuk resource Google Cloud Anda.

  1. Di Cloud Console, pada toolbar di kanan atas, klik tombol Open Cloud Shell.

    Ikon Cloud Shell yang diperjelas

  2. Klik Continue.

Proses menyediakan dan menghubungkan ke lingkungan memerlukan waktu beberapa saat. Setelah terhubung, Anda sudah diautentikasi, dan project ditetapkan ke PROJECT_ID Anda. Contoh:

Project ID yang diperjelas di Terminal Cloud Shell

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

  • Anda dapat menampilkan daftar nama akun yang aktif dengan perintah ini:
gcloud auth list

Output:

Akun berkredensial: - @.com (aktif)

Contoh output:

Akun berkredensial: - google1623327_student@qwiklabs.net
  • Anda dapat menampilkan daftar project ID dengan perintah ini:
gcloud config list project

Output:

[core] project =

Contoh output:

[core] project = qwiklabs-gcp-44776a13dea667a6 Catatan: Dokumentasi lengkap gcloud tersedia dalam panduan ringkasan gcloud CLI .

Tugas 1. Menghubungkan ke cluster GKE lab dan men-deploy sampel beban kerja

Dalam tugas ini, Anda akan terhubung ke cluster GKE lab dan membuat manifes deployment untuk satu set Pod di dalam cluster.

Menghubungkan ke cluster GKE lab

  1. Di Cloud Shell, ketik perintah berikut untuk menetapkan variabel lingkungan untuk nama cluster dan zona:
export my_zone={{{project_0.default_zone|ZONE}}} export my_cluster=standard-cluster-1
  1. Konfigurasi pelengkapan command line untuk alat command line kubectl:
source <(kubectl completion bash)
  1. Konfigurasi akses ke cluster Anda untuk kubectl:
gcloud container clusters get-credentials $my_cluster --zone $my_zone

Men-deploy aplikasi web sampel ke cluster GKE Anda

Anda akan men-deploy aplikasi sampel ke cluster menggunakan file deployment web.yaml yang telah dibuat untuk Anda:

apiVersion: apps/v1 kind: Deployment metadata: name: web spec: replicas: 1 selector: matchLabels: run: web template: metadata: labels: run: web spec: containers: - image: gcr.io/google-samples/hello-app:1.0 name: web ports: - containerPort: 8080 protocol: TCP resources: # Anda harus menentukan permintaan untuk CPU guna melakukan penskalaan otomatis # berdasarkan permintaan pemakaian CPU: cpu: "250m"

Manifes ini membuat deployment menggunakan image container aplikasi web sampel yang me-listen server HTTP pada port 8080.

  1. Di Cloud Shell, masukkan perintah berikut untuk membuat clone repositori ke lab Cloud Shell:
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
  1. Buat link simbolis sebagai pintasan ke direktori kerja:
ln -s ~/training-data-analyst/courses/ak8s/v1.1 ~/ak8s
  1. Ubah ke direktori yang berisi file sampel untuk lab ini:
cd ~/ak8s/Autoscaling/
  1. Untuk membuat deployment dari file ini, jalankan perintah berikut:
kubectl create -f web.yaml --save-config
  1. Buat resource layanan jenis NodePort pada port 8080 untuk deployment web:
kubectl expose deployment web --target-port=8080 --type=NodePort
  1. Verifikasi bahwa layanan telah dibuat dan port node telah dialokasikan:
kubectl get service web

Alamat IP dan nomor port Anda mungkin berbeda dari contoh output.

Output:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE web NodePort 10.11.246.185 8080:32056/TCP 12s

Klik Check my progress untuk memverifikasi tujuan. Men-deploy aplikasi web sampel ke cluster GKE

Tugas 2. Mengonfigurasi penskalaan otomatis pada cluster

Dalam tugas ini, Anda mengonfigurasi cluster untuk secara otomatis menskalakan aplikasi sampel yang Anda deploy sebelumnya.

Mengonfigurasi penskalaan otomatis

  1. Dapatkan daftar deployment untuk menentukan apakah aplikasi web sampel Anda masih berjalan atau tidak:
kubectl get deployment

Output-nya akan terlihat seperti contoh.

Output:

NAME READY UP-TO-DATE AVAILABLE AGE web 1/1 1 1 5m48s

Jika deployment web aplikasi Anda tidak ditampilkan, kembali ke tugas 1 dan deploy ulang ke cluster.

  1. Untuk mengonfigurasi aplikasi sampel Anda untuk penskalaan otomatis (dan untuk menetapkan jumlah maksimum replika ke empat dan minimumnya ke satu, dengan target penggunaan CPU 1%), jalankan perintah berikut:
kubectl autoscale deployment web --max 4 --min 1 --cpu-percent 1

Saat Anda menggunakan kubectl autoscale, Anda menentukan jumlah replika maksimum dan minimum untuk aplikasi Anda, serta target pemakaian CPU.

  1. Dapatkan daftar deployment untuk memverifikasi bahwa hanya ada satu deployment aplikasi web:
kubectl get deployment

Output:

NAME READY UP-TO-DATE AVAILABLE AGE web 1/1 1 1 8m21s

Memeriksa objek HorizontalPodAutoscaler

Perintah kubectl autoscale yang Anda gunakan dalam tugas sebelumnya membuat objek HorizontalPodAutoscaler yang menargetkan resource tertentu, yang disebut target skala, dan menskalakannya sesuai kebutuhan.

Autoscaler secara berkala menyesuaikan jumlah replika target skala agar sesuai dengan pemakaian CPU rata-rata yang Anda tentukan saat membuat autoscaler.

  1. Untuk mendapatkan daftar resource HorizontalPodAutoscaler, jalankan perintah berikut:
kubectl get hpa

Output-nya akan terlihat seperti contoh.

Output:

NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE web Deployment/web 0%/1% 1 4 1 1m
  1. Untuk memeriksa konfigurasi HorizontalPodAutoscaler dalam bentuk tabel, jalankan perintah berikut:
kubectl describe horizontalpodautoscaler web

Output-nya akan terlihat seperti contoh.

Output:

Name: web Namespace: default Labels: Annotations: CreationTimestamp: Tue, 08 Sep 2020... Reference: Deployment/web Metrics: ( current / target ) resource cpu on pods (as a percentage of request): 0% (0) / 1% Min replicas: 1 Max replicas: 4 Deployment pods: 1 current / 1 desired Conditions: Type Status Reason Message ---- ------ ------ ------- AbleToScale True ScaleDownStabilized recent recommendations [...] ScalingActive True ValidMetricFound the HPA was able to [...] ScalingLimited False DesiredWithinRange the desired count [...] Events:
  1. Untuk melihat konfigurasi HorizontalPodAutoscaler dalam format YAML, jalankan perintah berikut:
kubectl get horizontalpodautoscaler web -o yaml

Output-nya akan terlihat seperti contoh.

Output:

apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: annotations: autoscaling.alpha.kubernetes.io/conditions: [...] autoscaling.alpha.kubernetes.io/current-metrics: [...] creationTimestamp: 2018-11-14T02:59:28Z name: web namespace: default resourceVersion: "14588" selfLink: /apis/autoscaling/v1/namespaces/[...] spec: maxReplicas: 4 minReplicas: 1 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: web targetCPUUtilizationPercentage: 1 status: currentCPUUtilizationPercentage: 0 currentReplicas: 1 desiredReplicas: 1

Menguji konfigurasi penskalaan otomatis

Anda perlu membuat pemuatan berat pada aplikasi web untuk memaksa penyebaran skala. Anda akan membuat file konfigurasi yang menentukan deployment empat container yang menjalankan loop terus-menerus dari kueri HTTP terhadap server web aplikasi sampel.

Anda membuat pemuatan pada aplikasi web dengan men-deploy aplikasi loadgen menggunakan file loadgen.yaml yang telah disediakan untuk Anda.

apiVersion: apps/v1 kind: Deployment metadata: name: loadgen spec: replicas: 4 selector: matchLabels: app: loadgen template: metadata: labels: app: loadgen spec: containers: - name: loadgen image: k8s.gcr.io/busybox args: - /bin/sh - -c - while true; do wget -q -O- http://web:8080; done
  1. Untuk men-deploy container ini, jalankan perintah berikut:
kubectl apply -f loadgen.yaml

Setelah Anda men-deploy manifes ini, Pod web akan mulai diskalakan.

Klik Check my progress untuk memverifikasi tujuan. Men-deploy aplikasi loadgen

  1. Dapatkan daftar deployment untuk memverifikasi bahwa generator pemuatan sedang berjalan:
kubectl get deployment

Output-nya akan terlihat seperti contoh.

Output:

NAME READY UP-TO-DATE AVAILABLE AGE loadgen 4/4 4 4 26s web 1/1 1 1 14m
  1. Periksa HorizontalPodAutoscaler:
kubectl get hpa

Setelah Pod loadgen mulai menghasilkan traffic, pemakaian CPU deployment web mulai meningkat. Dalam contoh output, pemakaian CPU target sekarang sebesar 35% dibandingkan dengan batas CPU 1%.

Output:

NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE web Deployment/web 35%/1% 1 4 1 8m
  1. Setelah beberapa menit, periksa lagi HorizontalPodAutoscaler:
kubectl get hpa

Autoscaler telah meningkatkan deployment web menjadi empat replika.

Output:

NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE web Deployment/web 88%/1% 1 4 4 9m
  1. Untuk menghentikan pemuatan pada aplikasi web, skalakan deployment loadgen ke nol replika:
kubectl scale deployment loadgen --replicas 0
  1. Dapatkan daftar deployment untuk memverifikasi bahwa skala loadgen telah diperkecil:
kubectl get deployment

Deployment loadgen harus memiliki nol replika.

Output:

NAME READY UP-TO-DATE AVAILABLE AGE loadgen 0/0 0 0 3m40s web 2/4 4 2 18m Catatan: Anda harus menunggu 2 hingga 3 menit sebelum membuat daftar deployment lagi.
  1. Dapatkan daftar deployment untuk memverifikasi bahwa skala aplikasi web telah diperkecil ke nilai minimum 1 replika yang Anda konfigurasikan saat men-deploy autoscaler:
kubectl get deployment

Sekarang Anda telah memiliki satu deployment aplikasi web.

Output:

NAME READY UP-TO-DATE AVAILABLE AGE loadgen 0/0 0 0 12m web 1/1 1 1 14m

Tugas 3. Mengelola node pool

Dalam tugas ini, Anda akan membuat node pool baru menggunakan preemptible instance, lalu membatasi deployment web untuk berjalan hanya pada preemptible node.

Menambahkan node pool

  1. Untuk men-deploy node pool baru dengan tiga instance preemptible VM, jalankan perintah berikut:
gcloud container node-pools create "temp-pool-1" \ --cluster=$my_cluster --zone=$my_zone \ --num-nodes "2" --node-labels=temp=true --preemptible

Jika Anda menerima pesan error bahwa tidak ada preemptible instance, Anda dapat menghapus opsi --preemptible untuk melanjutkan penggunaan lab.

  1. Dapatkan daftar node untuk memverifikasi bahwa node baru sudah siap:
kubectl get nodes

Sekarang Anda telah memiliki 4 node.

Nama yang Anda gunakan akan berbeda dari contoh output.

Output:

NAME STATUS ROLES AGE VERSION gke-standard-cluster-1-default-pool...xc Ready 33m v1.19.10-gke.1600 gke-standard-cluster-1-default-pool...q8 Ready 33m v1.19.10-gke.1600 gke-standard-cluster-1-temp-pool-1-...vj Ready 32s v1.19.10-gke.1600 gke-standard-cluster-1-temp-pool-1-...xj Ready 37s v1.19.10-gke.1600

Semua node yang Anda tambahkan memiliki label temp=true karena Anda menetapkan label tersebut saat membuat node pool. Label ini memudahkan untuk menemukan dan mengonfigurasi node ini.

  1. Untuk mendaftar hanya node dengan label temp=true, jalankan perintah berikut:
kubectl get nodes -l temp=true

Anda seharusnya hanya melihat dua node yang Anda tambahkan.

Nama yang Anda gunakan akan berbeda dari contoh output.

Output:

NAME STATUS ROLES AGE VERSION gke-standard-cluster-1-temp-pool-1-...vj Ready 3m26s v1.19.10-gke.1600 gke-standard-cluster-1-temp-pool-1-...xj Ready 3m31s v1.19.10-gke.1600

Mengontrol penjadwalan dengan taint dan toleransi

Untuk mencegah scheduler menjalankan Pod pada node sementara, Anda dapat menambahkan taint ke setiap node di kumpulan temp. Taint diimplementasikan sebagai pasangan nilai kunci dengan efek (seperti NoExecute) yang menentukan apakah Pod dapat berjalan pada node tertentu. Hanya node yang dikonfigurasi untuk menoleransi nilai kunci dari taint yang dijadwalkan untuk berjalan pada node ini.

  1. Untuk menambahkan taint ke tiap node yang baru dibuat, jalankan perintah berikut.

Anda dapat menggunakan label temp=true untuk menerapkan perubahan ini di semua node baru secara bersamaan:

kubectl taint node -l temp=true nodetype=preemptible:NoExecute

Agar Pod aplikasi dapat dijalankan pada node yang ditambahkan taint ini, Anda harus menambahkan kunci toleransi ke konfigurasi deployment.

  1. Untuk mengedit file web.yaml, jalankan perintah berikut:
nano web.yaml
  1. Tambahkan kunci berikut di bagian spec template:
tolerations: - key: "nodetype" operator: Equal value: "preemptible"

Bagian spesifikasi file akan terlihat seperti contoh berikut:

... spec: tolerations: - key: "nodetype" operator: Equal value: "preemptible" containers: - image: gcr.io/google-samples/hello-app:1.0 name: web ports: - containerPort: 8080 protocol: TCP resources: # You must specify requests for CPU to autoscale # based on CPU utilization requests: cpu: "250m"
  1. Untuk memaksa deployment web menggunakan node pool baru, tambahkan kunci nodeSelector di bagian spec template. Kunci ini paralel dengan kunci toleransi yang baru saja Anda tambahkan:
nodeSelector: temp: "true" Catatan: GKE menambahkan label khusus ke tiap node yang disebut cloud.google.com/gke-nodepool yang berisi nama node pool tempat node tersebut berada. Kunci ini juga dapat digunakan sebagai bagian dari nodeSelector untuk memastikan Pod hanya di-deploy ke node yang sesuai.

Deployment web.yaml lengkap sekarang akan terlihat sebagai berikut:

apiVersion: apps/v1 kind: Deployment metadata: name: web spec: replicas: 1 selector: matchLabels: run: web template: metadata: labels: run: web spec: tolerations: - key: "nodetype" operator: Equal value: "preemptible" nodeSelector: temp: "true" containers: - image: gcr.io/google-samples/hello-app:1.0 name: web ports: - containerPort: 8080 protocol: TCP resources: # Anda harus menentukan permintaan untuk CPU guna melakukan penskalaan otomatis # berdasarkan permintaan pemakaian CPU: cpu: "250m"
  1. Tekan CTRL+X, lalu tekan Y dan enter untuk menyimpan file dan keluar dari editor nano.

  2. Untuk menerapkan perubahan ini, jalankan perintah berikut:

kubectl apply -f web.yaml

Jika Anda memiliki masalah saat mengedit file ini, Anda dapat menggunakan file sampel yang telah disiapkan sebelumnya bernama web-tolerations.yaml.

Klik Check my progress untuk memverifikasi tujuan. Mengelola node pool

  1. Dapatkan daftar Pod:
kubectl get pods

Nama yang Anda gunakan mungkin berbeda dari contoh output.

Output:

NAME READY STATUS RESTARTS AGE web-7cb566bccd-pkfst 1/1 Running 0 1m
  1. Untuk mengonfirmasi perubahan, periksa Pod web yang sedang berjalan menggunakan perintah berikut:
kubectl describe pods -l run=web

Bagian Tolerations dengan nodetype=preemptible dalam daftar akan muncul di dekat bagian bawah output (terpotong).

Output:

Node-Selectors: temp=true Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s nodetype=preemptible Events:

Output mengonfirmasi bahwa Pod akan menoleransi nilai taint pada preemptible node baru, sehingga Pod dapat dijadwalkan untuk dieksekusi pada node tersebut.

  1. Untuk memaksa aplikasi web melakukan penyebaran skala lagi, skalakan deployment loadgen kembali ke empat replika:
kubectl scale deployment loadgen --replicas 4

Anda hanya dapat menskalakan aplikasi web secara langsung. Namun, dengan menggunakan aplikasi loadgen, Anda dapat melihat bagaimana berbagai setelan taint, toleransi, dan nodeSelector yang berlaku untuk aplikasi web dan loadgen memengaruhi node tempat aplikasi tersebut dijadwalkan.

  1. Dapatkan daftar Pod menggunakan format output luas untuk menunjukkan node yang menjalankan Pod:
kubectl get pods -o wide

Hal ini menunjukkan bahwa aplikasi loadgen hanya berjalan pada node default-pool, sementara aplikasi web hanya berjalan pada preemptible node di temp-pool-1.

Setelan taint mencegah Pod berjalan pada preemptible node sehingga aplikasi loadgen hanya berjalan pada pool default. Setelan toleransi memungkinkan aplikasi web untuk berjalan pada preemptible node dan nodeSelector memaksa Pod aplikasi web untuk berjalan pada node tersebut.

NAME READY STATUS [...] NODE Loadgen-x0 1/1 Running [...] gke-xx-default-pool-y0 loadgen-x1 1/1 Running [...] gke-xx-default-pool-y2 loadgen-x3 1/1 Running [...] gke-xx-default-pool-y3 loadgen-x4 1/1 Running [...] gke-xx-default-pool-y4 web-x1 1/1 Running [...] gke-xx-temp-pool-1-z1 web-x2 1/1 Running [...] gke-xx-temp-pool-1-z2 web-x3 1/1 Running [...] gke-xx-temp-pool-1-z3 web-x4 1/1 Running [...] gke-xx-temp-pool-1-z4

Mengakhiri lab Anda

Setelah Anda menyelesaikan lab, klik Akhiri Lab. Google Cloud Skills Boost menghapus resource yang telah Anda gunakan dan membersihkan akun.

Anda akan diberi kesempatan untuk menilai pengalaman menggunakan lab. Pilih jumlah bintang yang sesuai, ketik komentar, lalu klik Submit.

Makna jumlah bintang:

  • 1 bintang = Sangat tidak puas
  • 2 bintang = Tidak puas
  • 3 bintang = Netral
  • 4 bintang = Puas
  • 5 bintang = Sangat puas

Anda dapat menutup kotak dialog jika tidak ingin memberikan masukan.

Untuk masukan, saran, atau koreksi, gunakan tab Support.

Hak cipta 2020 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.

Sebelum memulai

  1. Lab membuat project dan resource Google Cloud untuk jangka waktu tertentu
  2. Lab memiliki batas waktu dan tidak memiliki fitur jeda. Jika lab diakhiri, Anda harus memulainya lagi dari awal.
  3. Di kiri atas layar, klik Start lab untuk memulai

Gunakan penjelajahan rahasia

  1. Salin Nama Pengguna dan Sandi yang diberikan untuk lab tersebut
  2. Klik Open console dalam mode pribadi

Login ke Konsol

  1. Login menggunakan kredensial lab Anda. Menggunakan kredensial lain mungkin menyebabkan error atau dikenai biaya.
  2. Setujui persyaratan, dan lewati halaman resource pemulihan
  3. Jangan klik End lab kecuali jika Anda sudah menyelesaikan lab atau ingin mengulanginya, karena tindakan ini akan menghapus pekerjaan Anda dan menghapus project

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

Satu lab dalam satu waktu

Konfirmasi untuk mengakhiri semua lab yang ada dan memulai lab ini

Gunakan penjelajahan rahasia untuk menjalankan lab

Gunakan jendela Samaran atau browser pribadi untuk menjalankan lab ini. Langkah ini akan mencegah konflik antara akun pribadi Anda dan akun Siswa yang dapat menyebabkan tagihan ekstra pada akun pribadi Anda.