Menskalakan permintaan dan batas resource container


Halaman ini menjelaskan cara menganalisis dan menyesuaikan permintaan CPU dan permintaan memori container di Google Kubernetes Engine (GKE) menggunakan penskalaan otomatis Pod vertikal.

Anda dapat menskalakan resource container secara manual melalui Google Cloud Console, menganalisis resource menggunakan objek VerticalPodAutoscaler, atau mengonfigurasi penskalaan otomatis menggunakan penskalaan Pod vertikal.

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 initialize gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan gcloud components update.

Menganalisis permintaan resource

Autoscaler Pod Vertikal otomatis menganalisis container dan menyediakan permintaan resource yang disarankan. Anda dapat melihat permintaan resource ini menggunakan Google Cloud Console, Cloud Monitoring, atau Google Cloud CLI.

Konsol

Untuk melihat permintaan resource yang disarankan di konsol Google Cloud, Anda harus memiliki beban kerja yang di-deploy setidaknya selama 24 jam. Beberapa saran mungkin tidak tersedia atau relevan untuk workload tertentu, seperti yang dibuat dalam 24 jam terakhir, Pod mandiri, dan aplikasi yang ditulis di Java.

  1. Buka halaman Workload di Konsol Google Cloud.

    Buka Workload

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

  3. Klik Actions > Scale > Edit resource requests.

    Bagian Analisis data penggunaan resource menampilkan data penggunaan historis yang dianalisis oleh pengontrol Autoscaler Pod Vertikal untuk membuat permintaan resource yang disarankan di bagian Sesuaikan permintaan dan batas resource.

Cloud Monitoring

Untuk melihat permintaan resource yang disarankan di Cloud Monitoring, Anda harus memiliki beban kerja yang sudah di-deploy.

  1. Buka halaman Metrics Explorer di Konsol Google Cloud.

    Buka Metrics Explorer

  2. Klik Configuration.

  3. Luaskan menu Select a Metric.

  4. Di menu Resource, pilih Kubernetes Scale.

  5. Di menu Metric category, pilih Autoscaler.

  6. Di menu Metric, pilih Recommended per replication request bytes dan Recommended per replication request core.

  7. Klik Apply.

gcloud CLI

Untuk melihat permintaan resource yang disarankan, Anda harus membuat objek VerticalPodAutoscaler dan Deployment.

  1. Untuk cluster Standar, aktifkan penskalaan otomatis Pod vertikal untuk cluster Anda. Untuk cluster Autopilot, penskalaan otomatis Pod vertikal diaktifkan secara default.

    gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
    

    Ganti CLUSTER_NAME dengan nama cluster Anda.

  2. Simpan manifes berikut sebagai my-rec-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-rec-deployment
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: my-rec-deployment
      template:
        metadata:
          labels:
            app: my-rec-deployment
        spec:
          containers:
          - name: my-rec-container
            image: nginx
    

    Manifes ini menjelaskan Deployment yang tidak memiliki permintaan CPU atau memori. Nilai containers.name dari my-rec-deployment menentukan bahwa semua Pod di Deployment adalah milik VerticalPodAutoscaler.

  3. Terapkan manifes ke cluster:

    kubectl create -f my-rec-deployment.yaml
    
  4. Simpan manifes berikut sebagai my-rec-vpa.yaml:

    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
      name: my-rec-vpa
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind:       Deployment
        name:       my-rec-deployment
      updatePolicy:
        updateMode: "Off"
    

    Manifes ini menjelaskan VerticalPodAutoscaler. Nilai updateMode dari Off berarti bahwa saat Pod dibuat, pengontrol Vertical Pod Autoscaler menganalisis kebutuhan CPU dan memori pada container dan mencatat rekomendasi tersebut dalam kolom status sumber daya. Pengontrol Autoscaler Pod Vertikal tidak otomatis memperbarui permintaan resource untuk menjalankan container.

  5. Terapkan manifes ke cluster:

    kubectl create -f my-rec-vpa.yaml
    
  6. Setelah beberapa saat, lihat VerticalPodAutoscaler:

    kubectl get vpa my-rec-vpa --output yaml
    

    Outputnya mirip dengan hal berikut ini:

    ...
      recommendation:
        containerRecommendations:
        - containerName: my-rec-container
          lowerBound:
            cpu: 25m
            memory: 262144k
          target:
            cpu: 25m
            memory: 262144k
          upperBound:
            cpu: 7931m
            memory: 8291500k
    ...
    

    Output ini menampilkan rekomendasi untuk permintaan CPU dan memori.

Menetapkan permintaan resource Pod secara manual

Anda dapat menetapkan permintaan resource Pod secara manual menggunakan Google Cloud CLI atau Google Cloud Console.

Konsol

  1. Buka halaman Workloads di Konsol Google Cloud.

    Buka Workload

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

  3. Klik Actions > Scale > Edit resource requests.

    1. Bagian Sesuaikan permintaan dan batas resource menampilkan permintaan CPU dan memori saat ini untuk setiap container serta permintaan memori dan CPU yang disarankan.
  4. Klik Apply Latest Suggestions untuk melihat permintaan yang disarankan untuk setiap container.

  5. Klik Save Changes.

  6. Klik Confirm.

gcloud

Guna menetapkan permintaan resource untuk Pod, tetapkan nilai requests.cpu dan memory.cpu dalam manifes Deployment Anda.Dalam contoh ini, Anda harus memodifikasi secara manual Deployment yang dibuat dalamMenganalisis permintaan resource dengan permintaan resource yang disarankan.

  1. Simpan contoh manifes berikut sebagai my-adjusted-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-rec-deployment
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: my-rec-deployment
      template:
        metadata:
          labels:
            app: my-rec-deployment
        spec:
          containers:
          - name: my-rec-container
            image: nginx
            resources:
              requests:
                cpu: 25m
                memory: 256Mi
    

    Manifes ini menjelaskan Deployment yang memiliki dua Pod. Setiap Pod memiliki satu container yang meminta memori 25 miliCPU dan 256 MiB.

  2. Terapkan manifes ke cluster:

    kubectl apply -f my-adjusted-deployment.yaml
    

Anda juga dapat menerapkan perubahan secara manual dengan melakukan 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 Actions > Scale > Edit resource requests.

  4. Konfigurasikan permintaan container Anda.

  5. Klik Get Equivalent YAML.

  6. Klik Download Workload atau salin dan tempel manifes ke dalam file bernama resource-adjusted.yaml.

  7. Terapkan manifes ke cluster Anda:

    kubectl create -f resource-adjusted.yaml
    

Menetapkan permintaan resource Pod secara otomatis

Penskalaan otomatis Pod vertikal menggunakan objek VerticalPodAutoscaler untuk menetapkan permintaan resource secara otomatis pada Pod saat updateMode adalah Auto. Anda dapat mengonfigurasi VerticalPodAutoscaler menggunakan gcloud CLI atau Konsol Google Cloud.

Konsol

Untuk menyetel permintaan resource secara otomatis, Anda harus memiliki cluster dengan fitur penskalaan otomatis Pod vertikal yang diaktifkan. Cluster Autopilot mengaktifkan fitur penskalaan otomatis Pod vertikal secara default.

Aktifkan Penskalaan Otomatis Pod Vertikal

  1. Buka halaman Google Kubernetes Engine di Konsol Google Cloud.

    Buka Google Kubernetes Engine

  2. Di daftar cluster, klik nama cluster yang ingin diubah.

  3. Di bagian Automation, klik Edit untuk opsi Vertical Pod Autoscaling.

  4. Pilih kotak centang Enable Vertical Pod Autoscaling.

  5. Klik Save changes.

Mengonfigurasi Penskalaan Otomatis Pod Vertikal

  1. Buka halaman Workloads di Konsol Google Cloud.

    Buka Workloads

  2. Dalam daftar beban kerja, klik nama Deployment yang ingin Anda konfigurasi penskalaan otomatis Pod vertikalnya.

  3. Klik Actions > Autoscale > Vertical pod autoscaling.

  4. Pilih mode penskalaan otomatis:

    • Mode otomatis: Penskalaan otomatis Pod vertikal mengupdate permintaan memori dan CPU selama masa pakai Pod.
    • Mode awal: Penskalaan otomatis Pod vertikal menetapkan permintaan resource hanya saat pembuatan Pod dan tidak pernah mengubahnya nanti.
  5. (Opsional) Tetapkan kebijakan container. Opsi ini memungkinkan Anda memastikan bahwa rekomendasi tidak pernah ditetapkan di atas atau di bawah permintaan resource yang ditentukan.

    1. Klik Add Policy.
    2. Pilih Auto untuk Edit container mode.
    3. Di bagian Controlled resources, pilih resource yang ingin Anda lakukan penskalaan otomatis container secara otomatis.
    4. Klik Add rule untuk menetapkan satu atau beberapa rentang minimum atau maksimum untuk permintaan resource container:
      • Min. allowed Memory: jumlah minimum memori yang harus selalu dimiliki container, dalam MiB.
      • Min. allowed CPU: jumlah CPU minimum yang harus selalu dimiliki container, dalam mCPU.
      • Max allowed Memory: jumlah maksimum memori yang harus selalu dimiliki container, dalam MiB.
      • Max allowed CPU: jumlah CPU maksimum yang harus selalu dimiliki container, dalam mCPU.
  6. Klik Done.

  7. Klik Simpan.

gcloud

Untuk menyetel permintaan resource secara otomatis, Anda harus menggunakan cluster yang mengaktifkan fitur penskalaan otomatis Pod vertikal. Fitur ini diaktifkan secara default di cluster Autopilot.

  1. Untuk cluster Standar, aktifkan penskalaan otomatis Pod vertikal untuk cluster Anda:

    gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
    

    Ganti CLUSTER_NAME dengan nama cluster Anda.

  2. Simpan manifes berikut sebagai my-auto-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-auto-deployment
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: my-auto-deployment
      template:
        metadata:
          labels:
            app: my-auto-deployment
        spec:
          containers:
          - name: my-container
            image: registry.k8s.io/ubuntu-slim:0.1
            resources:
              requests:
                cpu: 100m
                memory: 50Mi
            command: ["/bin/sh"]
            args: ["-c", "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"]
    

    Manifes ini menjelaskan Deployment yang memiliki dua Pod. Setiap Pod memiliki satu container yang meminta 100 miliCPU dan memori 50 MiB.

  3. Terapkan manifes ke cluster:

    kubectl create -f my-auto-deployment.yaml
    
  4. Daftar Pod yang berjalan:

    kubectl get pods
    

    Output menampilkan nama-nama Pod di my-deployment:

    NAME                            READY     STATUS             RESTARTS   AGE
    my-auto-deployment-cbcdd49fb-d6bf9   1/1       Running            0          8s
    my-auto-deployment-cbcdd49fb-th288   1/1       Running            0          8s
    
  5. Simpan manifes berikut sebagai my-vpa.yaml:

    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
      name: my-vpa
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind:       Deployment
        name:       my-auto-deployment
      updatePolicy:
        updateMode: "Auto"
    

    Manifes ini menjelaskan VerticalPodAutoscaler dengan properti berikut:

    • targetRef.name: menentukan bahwa setiap Pod yang dikontrol oleh Deployment bernama my-deployment adalah milik VerticalPodAutoscaler ini.
    • updateMode: Auto: menentukan bahwa pengontrol Autoscaler Pod Vertikal dapat menghapus Pod, menyesuaikan permintaan CPU dan memori, lalu memulai Pod baru.

    Anda juga dapat mengonfigurasi penskalaan otomatis Pod vertikal untuk menetapkan permintaan resource hanya pada waktu pembuatan Pod, menggunakan updateMode: "Initial".

  6. Terapkan manifes ke cluster:

    kubectl create -f my-vpa.yaml
    
  7. Tunggu beberapa menit, lalu lihat Pod yang berjalan lagi:

    kubectl get pods
    

    Output menunjukkan bahwa nama Pod telah berubah:

    NAME                                 READY     STATUS             RESTARTS   AGE
    my-auto-deployment-89dc45f48-5bzqp   1/1       Running            0          8s
    my-auto-deployment-89dc45f48-scm66   1/1       Running            0          8s
    

    Jika nama Pod belum berubah, tunggu sedikit lebih lama, lalu lihat Pod yang berjalan lagi.

Melihat informasi tentang Autoscaler Pod Vertikal

Untuk melihat detail tentang Vertical Pod Autoscaler, lakukan hal berikut:

  1. Dapatkan informasi mendetail tentang salah satu Pod yang berjalan:

    kubectl get pod POD_NAME --output yaml
    

    Ganti POD_NAME dengan nama salah satu Pod yang diambil di langkah sebelumnya.

    Outputnya mirip dengan hal berikut ini:

    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        vpaUpdates: 'Pod resources updated by my-vpa: container 0: cpu capped to node capacity, memory capped to node capacity, cpu request, memory request'
    ...
    spec:
      containers:
      ...
        resources:
          requests:
            cpu: 510m
            memory: 262144k
        ...
    

    Output ini menunjukkan bahwa pengontrol Vertical Pod Autoscaler memiliki permintaan memori sebesar 262144k dan permintaan CPU sebesar 510 miliCPU.

  2. Dapatkan informasi mendetail tentang VerticalPodAutoscaler:

    kubectl get vpa my-vpa --output yaml
    

    Outputnya mirip dengan hal berikut ini:

    ...
      recommendation:
        containerRecommendations:
        - containerName: my-container
          lowerBound:
            cpu: 536m
            memory: 262144k
          target:
            cpu: 587m
            memory: 262144k
          upperBound:
            cpu: 27854m
            memory: "545693548"
    

    Output ini menampilkan rekomendasi untuk permintaan CPU dan memori serta mencakup properti berikut:

    • target: menentukan bahwa container harus berjalan secara optimal, container harus meminta 587 miliCPU dan 262144 kilobyte memori.
    • lowerBound dan upperBound: penskalaan otomatis Pod vertikal menggunakan properti ini untuk memutuskan apakah akan menghapus Pod dan menggantinya dengan Pod baru. Jika Pod memiliki permintaan yang lebih kecil dari batas bawah atau lebih besar dari batas atas, Autoscaler Pod Vertikal akan menghapus Pod dan menggantinya dengan Pod yang memenuhi atribut target.

Memilih tidak ikut container tertentu

Anda dapat mengecualikan container tertentu dari penskalaan otomatis Pod vertikal menggunakan gcloud CLI atau Google Cloud Console.

Konsol

Untuk mengecualikan container tertentu dari penskalaan otomatis Pod vertikal, Anda harus memiliki cluster dengan fitur penskalaan otomatis Pod vertikal yang diaktifkan. Fitur penskalaan otomatis Pod vertikal diaktifkan secara default di cluster Autopilot.

Aktifkan Penskalaan Otomatis Pod Vertikal

  1. Buka halaman Google Kubernetes Engine di Konsol Google Cloud.

    Buka Google Kubernetes Engine

  2. Di daftar cluster, klik nama cluster yang ingin diubah.

  3. Di bagian Automation, klik Edit untuk opsi Vertical Pod Autoscaling.

  4. Pilih kotak centang Enable Vertical Pod Autoscaling.

  5. Klik Save changes.

Mengonfigurasi Penskalaan Otomatis Pod Vertikal

  1. Buka halaman Workloads di Konsol Google Cloud.

    Buka Workloads

  2. Dalam daftar beban kerja, klik nama Deployment yang ingin Anda konfigurasi penskalaan otomatis Pod vertikalnya.

  3. Klik Actions > Autoscale > Vertical pod autoscaling.

  4. Pilih mode penskalaan otomatis:

    • Mode otomatis: Penskalaan otomatis Pod vertikal mengupdate permintaan memori dan CPU selama masa pakai Pod.
    • Mode awal: Penskalaan otomatis Pod vertikal menetapkan permintaan resource hanya saat pembuatan Pod dan tidak pernah mengubahnya nanti.
  5. Klik Add Policy.

  6. Pilih container yang ingin Anda kecualikan.

  7. Untuk Edit container mode, pilih Off.

  8. Klik Done.

  9. Klik Simpan.

gcloud

Untuk tidak menyertakan container tertentu dari penskalaan otomatis Pod vertikal, lakukan langkah-langkah berikut:

  1. Simpan manifes berikut sebagai my-opt-vpa.yaml:

    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
      name: my-opt-vpa
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind:       Deployment
        name:       my-opt-deployment
      updatePolicy:
        updateMode: "Auto"
      resourcePolicy:
        containerPolicies:
        - containerName: my-opt-sidecar
          mode: "Off"
    

    Manifes ini menjelaskan VerticalPodAutoscaler. Nilai mode: "Off" menonaktifkan rekomendasi untuk container my-opt-sidecar.

  2. Terapkan manifes ke cluster:

    kubectl apply -f my-opt-vpa.yaml
    
  3. Simpan manifes berikut sebagai my-opt-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-opt-deployment
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: my-opt-deployment
      template:
        metadata:
          labels:
            app: my-opt-deployment
        spec:
          containers:
          - name: my-opt-container
            image: nginx
          - name: my-opt-sidecar
            image: busybox
            command: ["sh","-c","while true; do echo Doing sidecar stuff!; sleep 60; done"]
    
  4. Terapkan manifes ke cluster:

    kubectl apply -f my-opt-deployment.yaml
    
  5. Setelah beberapa waktu, lihat Vertical Pod Autoscaler:

    kubectl get vpa my-opt-vpa --output yaml
    

    Output menunjukkan rekomendasi untuk permintaan CPU dan memori:

    ...
      recommendation:
        containerRecommendations:
        - containerName: my-opt-container
    ...
    

    Dalam output ini, hanya ada rekomendasi untuk satu container. Tidak ada rekomendasi untuk my-opt-sidecar.

    Autoscaler Pod Vertikal tidak pernah memperbarui resource pada container yang tidak diikutsertakan. Jika Anda menunggu beberapa menit, Pod akan dibuat ulang, tetapi hanya satu container yang memiliki permintaan resource yang diperbarui.

Langkah selanjutnya