Menskalakan aplikasi


Halaman ini menjelaskan cara menskalakan aplikasi yang di-deploy di Google Kubernetes Engine (GKE).

Ringkasan

Saat men-deploy aplikasi di GKE, Anda menentukan jumlah replika aplikasi yang ingin dijalankan. Saat menskalakan aplikasi, Anda akan menambah atau mengurangi jumlah replika.

Setiap replika aplikasi Anda mewakili Pod Kubernetes yang mengenkapsulasi container aplikasi Anda.

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.

Memeriksa aplikasi

Sebelum menskalakan aplikasi, Anda harus memeriksa aplikasi dan memastikannya responsif.

Untuk melihat semua aplikasi yang di-deploy ke cluster Anda, jalankan perintah berikut:

kubectl get CONTROLLER

Ganti CONTROLLER untuk deployments, statefulsets, atau jenis objek pengontrol lainnya.

Misalnya, jika Anda menjalankan kubectl get deployments dan hanya membuat satu Deployment, output perintahnya akan terlihat seperti berikut:

NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
my-app                1         1         1            1           10m

Output perintah ini serupa untuk semua objek, tetapi mungkin tampak sedikit berbeda. Untuk Deployment, output-nya memiliki enam kolom:

  • NAME mencantumkan nama Deployment dalam cluster.
  • DESIRED menampilkan jumlah replika yang diinginkan, atau status yang diinginkan, aplikasi, yang Anda tentukan saat membuat Deployment.
  • CURRENT menampilkan jumlah replika yang sedang berjalan.
  • UP-TO-DATE menampilkan jumlah replika yang telah diperbarui untuk mencapai status yang diinginkan.
  • AVAILABLE menampilkan jumlah replika aplikasi yang tersedia untuk pengguna.
  • AGE menampilkan durasi aplikasi berjalan di cluster.

Dalam contoh ini, hanya ada satu Deployment, my-app, yang hanya memiliki satu replika karena status yang diinginkan adalah satu replika. Anda menentukan status yang diinginkan pada saat pembuatan, dan dapat mengubahnya kapan saja dengan menskalakan aplikasi.

Memeriksa StatefulSet

Sebelum menskalakan StatefulSet, Anda harus memeriksanya dengan menjalankan perintah berikut:

kubectl describe statefulset my-app

Di output perintah ini, periksa kolom Status Pod. Jika nilai Failed lebih besar dari 0, penskalaan mungkin akan gagal.

Jika StatefulSet tampak tidak responsif, lakukan hal berikut:

  1. Dapatkan daftar pod dan lihat pod mana yang tidak responsif:

    kubectl get pods
    
  2. Hapus pod yang tidak responsif:

    kubectl delete POD_NAME
    

Mencoba menskalakan StatefulSet saat tidak responsif dapat menyebabkannya tidak tersedia.

Menskalakan aplikasi

Bagian berikut menjelaskan setiap metode yang dapat Anda gunakan untuk menskalakan aplikasi. Metode kubectl scale adalah cara tercepat untuk melakukan penskalaan. Namun, dalam beberapa situasi seperti saat memperbarui file konfigurasi atau melakukan modifikasi yang sudah diterapkan, Anda mungkin lebih memilih metode lain.

kubectl scale

Dengan perintah kubectl scale, Anda dapat mengubah jumlah replika yang diinginkan untuk menjalankan aplikasi secara instan.

Untuk menggunakan kubectl scale, tentukan jumlah replika yang baru dengan menetapkan flag --replicas. Misalnya, untuk menskalakan my-app menjadi empat replika, jalankan perintah berikut melalui penggantian CONTROLLER dengan deployment, statefulset, atau jenis objek pengontrol lainnya:

kubectl scale CONTROLLER my-app --replicas 4

Jika berhasil, output perintah ini akan serupa dengan deployment "my-app" scaled.

Kemudian jalankan:

kubectl get CONTROLLER my-app

Output-nya akan terlihat seperti berikut:

NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
my-app                4         4         4            4           15m

kubectl apply

Anda dapat menggunakan kubectl apply untuk menerapkan file konfigurasi baru ke objek pengontrol yang ada. kubectl apply bermanfaat untuk membuat beberapa perubahan pada resource, dan mungkin bermanfaat bagi pengguna yang lebih suka mengelola resource mereka dalam file konfigurasi.

Untuk menskalakan menggunakan kubectl apply, file konfigurasi yang Anda berikan harus menyertakan jumlah replika baru di kolom replicas spesifikasi objek.

Berikut adalah versi terbaru file konfigurasi untuk contoh objek my-app. Contoh ini menunjukkan Deployment. Jadi, jika Anda menggunakan jenis pengontrol lain, seperti StatefulSet, ubah kind. Contoh ini berfungsi optimal pada cluster dengan setidaknya tiga Node.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: app
  template:
    metadata:
      labels:
        app: app
    spec:
      containers:
      - name: my-container
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0

Dalam file ini, nilai kolom replicas adalah 3. Saat file konfigurasi ini diterapkan, objek my-app akan diskalakan menjadi tiga replika.

Untuk menerapkan file konfigurasi yang telah diperbarui, jalankan perintah berikut:

kubectl apply -f config.yaml

Kemudian jalankan:

kubectl get CONTROLLER my-app

Output-nya akan terlihat seperti berikut:

NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
my-app                3         3         3            3           15m

Konsol

Untuk menskalakan workload di Konsol Google Cloud, lakukan langkah-langkah berikut:

  1. Buka halaman Workload di Konsol Google Cloud.

    Buka Workload

  2. Dalam daftar workload, klik nama workload yang ingin diskalakan.

  3. Klik Tindakan > Skalakan > Edit replika.

  4. Masukkan jumlah baru Replika untuk workload.

  5. Klik Skalakan.

Deployment Penskalaan Otomatis

Anda dapat menskalakan Deployment secara otomatis berdasarkan pemakaian CPU Pod menggunakan kubectl autoscale atau dari menu Workload GKE di Konsol Google Cloud.

kubectl autoscale

kubectl autoscale akan membuat objek HorizontalPodAutoscaler (atau HPA) yang menargetkan resource yang ditentukan (disebut target skala) dan menskalakannya sesuai kebutuhan. HPA secara berkala menyesuaikan jumlah replika target skala agar sesuai dengan penggunaan CPU rata-rata yang ditentukan.

Saat menggunakan kubectl autoscale, Anda harus menentukan jumlah replika maksimum dan minimum untuk aplikasi, serta target pemakaian CPU. Misalnya, untuk menetapkan jumlah maksimum replika ke enam dan minimum ke empat dengan target pemakaian CPU sebesar 50%, jalankan perintah berikut:

kubectl autoscale deployment my-app --max 6 --min 4 --cpu-percent 50

Dalam perintah ini, flag --max diperlukan. Flag --cpu-percent adalah target pemakaian CPU untuk semua Pod. Perintah ini tidak langsung menskalakan Deployment menjadi enam replika, kecuali jika sudah ada permintaan dari sistem.

Setelah menjalankan kubectl autoscale, objek HorizontalPodAutoscaler akan dibuat dan menargetkan aplikasi. Saat ada perubahan beban, objek akan menambah atau mengurangi replika aplikasi.

Untuk mendapatkan daftar objek HorizontalPodAutoscaler di cluster Anda, jalankan:

kubectl get hpa

Untuk melihat objek HorizontalPodAutoscaler tertentu di cluster Anda, jalankan:

kubectl get hpa HPA_NAME

Ganti HPA_NAME dengan nama objek HorizontalPodAutoscaler Anda.

Untuk melihat konfigurasi HorizontalPodAutoscaler:

kubectl get hpa HPA_NAME -o yaml

Output perintah ini akan mirip dengan berikut ini:

apiVersion: v1
items:
- apiVersion: autoscaling/v1
  kind: HorizontalPodAutoscaler
  metadata:
    creationTimestamp: ...
    name: HPA_NAME
    namespace: default
    resourceVersion: "664"
    selfLink: ...
    uid: ...
  spec:
    maxReplicas: 10
    minReplicas: 1
    scaleTargetRef:
      apiVersion: apps/v1
      kind: Deployment
      name: HPA_NAME
    targetCPUUtilizationPercentage: 50
  status:
    currentReplicas: 0
    desiredReplicas: 0
kind: List
metadata: {}
resourceVersion: ""
selfLink: ""

Dalam contoh output ini, kolom targetCPUUtilizationPercentage menyimpan nilai persentase 50 yang diteruskan dari contoh kubectl autoscale.

Untuk melihat deskripsi terperinci tentang objek HorizontalPodAutoscaler tertentu di cluster:

kubectl describe hpa HPA_NAME

Anda dapat memodifikasi HorizontalPodAutoscaler melalui penerapan file konfigurasi baru dengan kubectl apply, menggunakan kubectl edit, atau menggunakan kubectl patch.

Untuk menghapus objek HorizontalPodAutoscaler:

kubectl delete hpa HPA_NAME

Konsol

Untuk menskalakan Deployment secara otomatis, lakukan langkah-langkah berikut:

  1. Buka halaman Workload di Konsol Google Cloud.

    Buka Workload

  2. Dalam daftar workload, klik nama Deployment yang ingin diskalakan otomatis.

  3. Klik Tindakan > Skalakan otomatis.

  4. Masukkan Jumlah maksimum replika dan, secara opsional, Jumlah minimum replika untuk Deployment.

  5. Di bagian Metrik penskalaan otomatis, pilih dan konfigurasikan metrik sesuai keinginan.

  6. Klik Skalakan otomatis.

Penskalaan otomatis dengan metrik kustom

Anda dapat menskalakan Deployment berdasarkan metrik kustom yang diekspor dari Cloud Monitoring.

Untuk mempelajari cara menggunakan metrik kustom guna menskalakan otomatis deployment, lihat tutorial Menskalakan otomatis deployment dengan metrik kustom.

Langkah selanjutnya