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.
Login ke Qwiklabs menggunakan jendela samaran.
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.
Jika sudah siap, klik Start lab.
Catat kredensial lab (Nama pengguna dan Sandi) Anda. Anda akan menggunakannya untuk login ke Google Cloud Console.
Klik Open Google Console.
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.
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.
Di Cloud Console, pada toolbar di kanan atas, klik tombol Open Cloud Shell.
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:
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:
Ubah ke direktori yang berisi file sampel untuk lab ini:
cd ~/ak8s/Autoscaling/
Untuk membuat deployment dari file ini, jalankan perintah berikut:
kubectl create -f web.yaml --save-config
Buat resource layanan jenis NodePort pada port 8080 untuk deployment web:
kubectl expose deployment web --target-port=8080 --type=NodePort
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
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.
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.
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.
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
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:
Untuk melihat konfigurasi HorizontalPodAutoscaler dalam format YAML, jalankan perintah berikut:
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.
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
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
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
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
Untuk menghentikan pemuatan pada aplikasi web, skalakan deployment loadgen ke nol replika:
kubectl scale deployment loadgen --replicas 0
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.
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
Untuk men-deploy node pool baru dengan tiga instance preemptible VM, jalankan perintah berikut:
Jika Anda menerima pesan error bahwa tidak ada preemptible instance, Anda dapat menghapus opsi --preemptible untuk melanjutkan penggunaan lab.
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.
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.
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:
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"
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"
Tekan CTRL+X, lalu tekan Y dan enter untuk menyimpan file dan keluar dari editor nano.
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
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
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.
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.
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.
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.
Lab membuat project dan resource Google Cloud untuk jangka waktu tertentu
Lab memiliki batas waktu dan tidak memiliki fitur jeda. Jika lab diakhiri, Anda harus memulainya lagi dari awal.
Di kiri atas layar, klik Start lab untuk memulai
Gunakan penjelajahan rahasia
Salin Nama Pengguna dan Sandi yang diberikan untuk lab tersebut
Klik Open console dalam mode pribadi
Login ke Konsol
Login menggunakan kredensial lab Anda. Menggunakan kredensial lain mungkin menyebabkan error atau dikenai biaya.
Setujui persyaratan, dan lewati halaman resource pemulihan
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.
Merancang dengan Google Kubernetes Engine: Mengonfigurasi Penskalaan Otomatis Pod dan Kumpulan Node