Mengonfigurasi penskalaan otomatis Pod multidimensi


Penskalaan otomatis Pod multidimensi membebaskan Anda dari memilih satu cara untuk menskalakan cluster. Dengan penskalaan otomatis Pod multidimensi, Anda dapat menggunakan penskalaan horizontal berdasarkan CPU dan penskalaan vertikal berdasarkan memori secara bersamaan.

Objek MultidimPodAutoscaler mengubah permintaan memori dan menambahkan replika sehingga penggunaan CPU rata-rata setiap replika sesuai dengan target pemanfaatan Anda.

Prasyarat

Menggunakan penskalaan otomatis Pod multidimensi

Contoh ini menunjukkan cara membuat Deployment dan objek MultidimPodAutoscaler untuk menskalakan Deployment Anda secara otomatis.

Membuat Deployment

Sebelum dapat membuat MultidimPodAutoscaler, Anda harus membuat workload yang dipantau. File berikut, php-apache.yaml, menentukan nilai untuk permintaan CPU:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
spec:
  selector:
    matchLabels:
      run: php-apache
  replicas: 1
  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
      - name: php-apache
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        ports:
        - containerPort: 80
        resources:
        # Since MPA does not specify CPU requests, you must specify a request in
        # the Deployment
          limits:
            cpu: 500m
          requests:
            cpu: 200m

Untuk membuat Deployment, terapkan manifes php-apache.yaml:

kubectl apply -f php-apache.yaml

Membuat MultidimPodAutoscaler

Setelah membuat Deployment, Anda dapat membuat objek MultidimPodAutoscaler. Manifes MultidimPodAutoscaler berikut otomatis menyesuaikan jumlah replika dan permintaan memori berdasarkan nilai yang Anda tentukan.

Untuk mengetahui informasi selengkapnya tentang kolom dalam contoh ini, baca bagian Referensi API.

apiVersion: autoscaling.gke.io/v1beta1
kind: MultidimPodAutoscaler
metadata:
  name: php-apache-autoscaler
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  goals:
    metrics:
    - type: Resource
      resource:
      # Define the target CPU utilization request here
        name: cpu
        target:
          type: Utilization
          averageUtilization: 60
  constraints:
    global:
      minReplicas: 1
      maxReplicas: 5
    containerControlledResources: [ memory ]
    container:
    - name: '*'
    # Define boundaries for the memory request here
      requests:
        minAllowed:
          memory: 1Gi
        maxAllowed:
          memory: 2Gi
  policy:
    updateMode: Auto

Untuk membuat MultidimPodAutoscaler, terapkan manifes php-apache-autoscaler.yaml:

kubectl apply -f php-apache-autoscaler.yaml

Melihat MultidimPodAutoscaler

Lihat semua objek MultidimPodAutoscaler dengan menggunakan perintah kubectl get:

kubectl get mpa

Menghapus MultidimPodAutoscaler

Hapus objek MultidimPodAutoscaler menggunakan perintah kubectl delete:

kubectl delete -f php-apache-autoscaler.yaml

Referensi API

Bagian berikut memberikan informasi tentang kemungkinan kolom yang dapat Anda tambahkan ke objek MultidimPodAutoscaler.

Semua kolom ditujukan untuk apiVersion v1beta1 autoscaling.gke.io.

MultidimPodAutoscaler

MultidimPodAutoscaler adalah konfigurasi untuk autoscaler Pod multidimensi, yang otomatis mengelola resource Pod dan jumlahnya berdasarkan pemakaian resource secara historis dan real-time.

Kolom Jenis Deskripsi
metadata ObjectMeta Metadata objek standar.
spec MultidimPodAutoscalerSpec Perilaku yang diinginkan dari autoscaler Pod multidimensi.
status MultidimPodAutoscalerStatus Status autoscaler Pod multidimensi yang terakhir diamati.

MultidimPodAutoscalerSpec

MultidimPodAutoscalerSpec adalah spesifikasi yang menentukan perilaku autoscaler.

Kolom Jenis Deskripsi
ScaleTargetRef autoscaling.CrossVersionObjectReference Referensi yang menunjuk ke resource target untuk diskalakan (dengan subresource Scale).
Goals *MultidimGoals Sasaran yang akan dicapai dan dikelola oleh autoscaler Pod multidimensi.
Constraints *MultidimConstraints Menjelaskan batasan untuk penskalaan otomatis. Batasan lebih besar daripada sasaran. Jika kendala menghalangi beberapa tujuan, tujuan tidak akan tercapai. Misalnya, mencapai jumlah replika maksimum akan mencegah peningkatan skala lebih lanjut meskipun replika mungkin perlu melakukan penskalaan.
Policy *MultidimPolicy Dengan kebijakan, Anda dapat menentukan cara penerapan rekomendasi.

MultidimGoals

MultidimGoals adalah sasaran yang akan dicapai oleh autoscaler Pod multidimensi.

Kolom Jenis Deskripsi
Metrics []MetricSpec Berisi daftar metrik beserta nilai yang diinginkan. Autoscaler Pod multidimensi mencoba tetap mendekati nilai yang diinginkan.

MultidimConstraints

MultidimConstraints mendeskripsikan batasan untuk penskalaan otomatis. Batasan lebih diutamakan daripada sasaran.

Kolom Jenis Deskripsi
Global *GlobalConstraints Batasan yang berlaku untuk aplikasi yang diskalakan otomatis secara keseluruhan.
Pod *PodConstraints Batasan yang berlaku untuk satu Pod dari aplikasi yang ditargetkan.
ContainerControlledResources []ResourceName Resource Container yang harus dikontrol oleh autoscaler. memory adalah satu-satunya nilai yang didukung.
Container []ContainerConstraints Batasan yang berlaku untuk container Pod.

ResourceConstraints

ResourceConstraints menentukan jumlah minimum dan maksimum resource yang dapat ditetapkan ke container, Pod, atau aplikasi.

Kolom Jenis Deskripsi
MinAllowed ResourceList Jumlah minimum resource yang dapat Anda tetapkan. Jika tidak diberikan, 0 akan digunakan.
MaxAllowed ResourceList Jumlah maksimum resource yang dapat Anda tetapkan. Jika tidak diberikan, tidak ada batasan jumlah maksimum resource.

GlobalConstraints

GlobalConstraints menentukan batasan yang sepenuhnya diterapkan ke aplikasi. Batasan ini mencakup jumlah replika atau jumlah total resource.

Kolom Jenis Deskripsi
MinReplicas *Int32 Jumlah minimum replika yang dapat dimiliki aplikasi. Jika tidak diberikan, 1 akan digunakan.
MaxReplicas *Int32 Jumlah maksimum replika yang dapat dimiliki aplikasi. Jika tidak diberikan, tidak ada batasan jumlah maksimum replika.
Requests *ResourceConstraints Jumlah resource minimum dan maksimum yang dapat diminta aplikasi, dijumlahkan di seluruh pod.

PodConstraints

PodConstraints menentukan jumlah minimum dan maksimum resource yang dapat diminta oleh satu Pod, yang dijumlahkan di seluruh container yang termasuk dalam Pod.

Kolom Jenis Deskripsi
Requests *ResourceConstraints Jumlah minimum dan maksimum resource yang dapat diminta oleh satu Pod, dijumlahkan di seluruh container yang menjadi bagian dari Pod.

ContainerConstraints

ContainerConstraints adalah batasan yang berlaku untuk container Pod.

Kolom Jenis Deskripsi
Name String Nama container yang menetapkan batasan. Anda juga dapat menggunakan * untuk menentukan batasan bagi semua container dalam Pod.
Requests *ResourceConstraints Jumlah minimum dan maksimum resource yang dapat diminta container yang ditentukan.

UpdateMode

Gunakan UpdateMode untuk mengontrol cara penerapan rekomendasi yang dihitung.

Kolom Jenis Deskripsi
AutoUpdates UpdateMode = "Auto" Dengan AutoUpdates, semua rekomendasi autoscaler dapat diterapkan kapan saja.
AutoUpdates UpdateMode = "Off" Dengan AutoUpdates, rekomendasi autoscaler tidak akan diterapkan sama sekali.

MultidimPolicy

Kolom Jenis Deskripsi
Update UpdateMode Menentukan bagaimana rekomendasi akan diterapkan. Nilai kosong gagal divalidasi.

MultidimPodAutoscalerStatus

MultidimPodAutoscalerStatus menjelaskan status runtime autoscaler.

Kolom Jenis Deskripsi
ObservedGeneration *Int64 Generasi terbaru yang diamati oleh autoscaler ini.
RecommendedPodResources *RecommendedPodResources Jumlah resource yang terakhir dihitung yang direkomendasikan oleh autoscaler untuk Pod yang dikontrol.
CurrentReplicas Int32 CurrentReplicas adalah jumlah replika Pod saat ini yang dikelola oleh autoscaler ini, seperti yang terakhir terlihat oleh autoscaler.
DesiredReplicas Int32 DesiredReplicas adalah jumlah replika Pod yang diinginkan yang dikelola oleh autoscaler ini, seperti yang terakhir dihitung oleh autoscaler.
CurrentMetrics []autoscaling.MetricStatus Status baca terakhir dari metrik yang digunakan oleh autoscaler ini.
Conditions []metav1.Condition Conditions adalah kumpulan kondisi yang diperlukan agar autoscaler ini dapat menskalakan targetnya, dan menunjukkan apakah kondisi tersebut terpenuhi atau tidak.

Langkah selanjutnya