Menskalakan dan menskalakan otomatis layanan runtime

Anda dapat menskalakan sebagian besar layanan yang berjalan di Kubernetes dari command line atau dalam penggantian konfigurasi. Anda dapat menyetel parameter penskalaan untuk layanan runtime Apigee Hybrid di file overrides.yaml.

Layanan Diterapkan Sebagai Penskalaan
Cassandra ApigeeDatastore (CRD) Lihat Menskalakan Cassandra.
Ingress/LoadBalancer Deployment Cloud Service Mesh menggunakan Horizontal Pod Autoscaling (HPA).
Logger DaemonSet DaemonSet mengelola replika pod di semua node, sehingga DaemonSet akan menskalakan saat Anda menskalakan pod itu sendiri.
MART
Apigee Connect
Watcher
ApigeeOrganization (CRD)

Untuk melakukan penskalaan melalui konfigurasi, tingkatkan nilai properti konfigurasi replicaCountMin Deployment untuk stanza mart, watcher, dan/atau connectAgent. Contoh:

mart:
  replicaCountMax: 2
  replicaCountMin: 1

watcher:
  replicaCountMax: 2
  replicaCountMin: 1

connectAgent:
  replicaCountMax: 2
  replicaCountMin: 1

Deployment ini menggunakan Horizontal Pod Autoscaler untuk penskalaan otomatis. Tetapkan properti targetCPUUtilizationPercentage objek Deployment ke nilai minimum untuk penskalaan; saat nilai ini terlampaui, Kubernetes akan menambahkan pod hingga nilai replicaCountMax.

Untuk mengetahui informasi selengkapnya tentang cara menyetel properti konfigurasi, lihat Mengelola komponen bidang runtime.

Runtime
Synchronizer
UDCA
ApigeeEnvironment (CRD) Untuk melakukan penskalaan melalui konfigurasi, tingkatkan nilai properti replicaCountMin untuk stanza udca, synchronizer, dan/atau runtime dalam file penggantian. Contoh:
synchronizer:
  replicaCountMax: 10
  replicaCountMin: 1

runtime:
  replicaCountMax: 10
  replicaCountMin: 1

udca:
  replicaCountMax: 10
  replicaCountMin: 1

Catatan: Perubahan ini berlaku untuk SEMUA lingkungan dalam file penggantian. Jika Anda ingin menyesuaikan penskalaan untuk setiap lingkungan, lihat Konfigurasi lanjutan di bawah.

Deployment ini menggunakan Horizontal Pod Autoscaler untuk penskalaan otomatis. Tetapkan properti targetCPUUtilizationPercentage objek Deployment ke nilai minimum untuk penskalaan; saat nilai ini terlampaui, Kubernetes akan menambahkan pod hingga nilai replicaCountMax.

Untuk mengetahui informasi selengkapnya tentang cara menyetel properti konfigurasi, lihat Mengelola komponen bidang runtime.

Konfigurasi lanjutan

Dalam beberapa skenario, Anda mungkin perlu menggunakan opsi penskalaan lanjutan. Contoh skenario mencakup:

  • Menetapkan opsi penskalaan yang berbeda untuk setiap lingkungan. Misalnya, jika env1 memiliki minReplica sebesar 5 dan env2 memiliki minReplica sebesar 2.
  • Menetapkan opsi penskalaan yang berbeda untuk setiap komponen dalam lingkungan. Misalnya, jika komponen udca memiliki maxReplica 5 dan komponen synchronizer memiliki maxReplica 2.

Contoh berikut menunjukkan cara menggunakan perintah kubernetes patch untuk mengubah properti maxReplicas untuk komponen runtime:

  1. Buat variabel lingkungan untuk digunakan dengan perintah:
    export ENV_NAME=my-environment-name
    export ENV_RELEASE_NAME=$ENV_NAME # the Helm release name for the environment
    export APIGEE_NAMESPACE=apigee  #the namespace where Apigee is deployed
    export COMPONENT=runtime #can be udca or synchronizer
    export MAX_REPLICAS=2
    export MIN_REPLICAS=1
  2. Terapkan patch. Perhatikan bahwa contoh ini mengasumsikan bahwa kubectl ada di PATH Anda:
    kubectl patch apigeeenvironment -n $APIGEE_NAMESPACE \
      $(kubectl get apigeeenvironments -n $APIGEE_NAMESPACE -o jsonpath='{.items[?(@.spec.name == "'$ENV'" )]..metadata.name}') \
      --patch "$(echo -e "spec:\n  components:\n    $COMPONENT:\n      autoScaler:\n        maxReplicas: $MAX_REPLICAS\n        minReplicas: $MIN_REPLICAS")" \
      --type merge
    
  3. Verifikasi perubahan yang terjadi:
    kubectl get hpa -n $APIGEE_NAMESPACE
    

Penskalaan berbasis lingkungan

Secara default, penskalaan dijelaskan di tingkat organisasi. Anda dapat mengganti setelan default dengan menentukan penskalaan khusus lingkungan dalam file overrides.yaml seperti yang ditunjukkan dalam contoh berikut:

envs:
  # Apigee environment name
  - name: ENV_NAME>
    components:
    # Environment-specific scaling override
    # Otherwise, uses scaling defined at the respective root component
     runtime:
      replicaCountMin: 2
      replicaCountMax: 20

Penskalaan berbasis metrik

Dengan penskalaan berbasis metrik, runtime dapat menggunakan metrik CPU dan aplikasi untuk menskalakan pod apigee-runtime. Horizontal Pod Autoscaler (HPA) API Kubernetes, menggunakan kolom hpaBehavior untuk mengonfigurasi perilaku penskalaan dan penurunan skala layanan target. Penskalaan berbasis metrik tidak tersedia untuk komponen lain dalam deployment hybrid.

Penskalaan dapat disesuaikan berdasarkan metrik berikut:

Metrik Ukur Pertimbangan
serverMainTaskWaitTime Waktu tunggu rata-rata (dalam md) antrean pemrosesan di instance runtime untuk permintaan proxy guna memproses kebijakan. Metrik ini mengukur dampak kompleksitas dalam kebijakan yang dilampirkan pada alur permintaan proxy.
serverNioTaskWaitTime Waktu tunggu rata-rata (dalam md) antrean pemrosesan di instance runtime untuk permintaan proxy di lapisan http. Metrik ini mengukur dampak jumlah dan ukuran payload permintaan dan respons proxy.

Contoh berikut dari stanza runtime dalam overrides.yaml mengilustrasikan parameter standar (dan rentang yang diizinkan) untuk menskalakan pod apigee-runtime dalam penerapan hybrid:

runtime:
  # the following parameters configure metrics-based scaling
  hpaMetrics:
    serverMainTaskWaitTime: 400M # (range: 300M to 450M)
    serverNioTaskWaitTime: 400M # (range: 300M to 450M)
    targetCPUUtilizationPercentage: 75
  hpaBehavior:
    scaleDown:
      percent:
        periodSeconds: 60 # (range: 30 - 180)
        value: 20 # (range: 5 - 50)
      pods:
        periodSeconds: 60 # (range: 30 - 180)
        value: 2 # (range: 1 - 15)
      selectPolicy: Min
      stabilizationWindowSeconds: 120 # (range: 60 - 300)
    scaleUp:
      percent:
        periodSeconds: 60 # (range: 30 - 120)
        value: 20 # (range: 5 - 100)
      pods:
        periodSeconds: 60 # (range: 30 - 120)
        value: 4 # (range: 2 - 15)
      selectPolicy: Max
      stabilizationWindowSeconds: 30 # (range:  30 - 120)
  

Terapkan setelan ini dengan memperbarui diagram apigee-runtime untuk setiap lingkungan. Contoh:

helm upgrade $ENV_RELEASE_NAME apigee-runtime/ \
  --namespace APIGEE_NAMESPACE \
  --atomic \
  --set env=$ENV_NAME \
  -f overrides.yaml

Mengaktifkan atau menonaktifkan penskalaan berbasis metrik

Penskalaan berbasis metrik diaktifkan secara default. Anda dapat mengaktifkan atau menonaktifkan penskalaan berbasis metrik dengan menyetel properti customAutoscaling.enabled ke true atau false. Terapkan perubahan pada properti customAutoscaling.enabled dengan memperbarui diagram apigee-telemetry. Contoh:

helm upgrade telemetry apigee-telemetry/ \
  --namespace APIGEE_NAMESPACE \
  --atomic \
  -f overrides.yaml

Mengonfigurasi penskalaan yang lebih agresif

Meningkatkan nilai percent dan pods kebijakan penskalaan akan menghasilkan kebijakan penskalaan yang lebih agresif. Demikian pula, peningkatan nilai percent dan pods dalam scaleDown akan menghasilkan kebijakan penurunan skala yang agresif. Contoh:

runtime:
  # ...
  hpaMetrics:
    serverMainTaskWaitTime: 400M
    serverNioTaskWaitTime: 400M
    targetCPUUtilizationPercentage: 75
  hpaBehavior:
    scaleDown:
      percent:
        periodSeconds: 60
        value: 20
      pods:
        periodSeconds: 60
        value: 4
      selectPolicy: Min
      stabilizationWindowSeconds: 120
    scaleUp:
      percent:
        periodSeconds: 60
        value: 30
      pods:
        periodSeconds: 60
        value: 5
      selectPolicy: Max
      stabilizationWindowSeconds: 30

Pada contoh di atas, scaleDown.pods.value ditingkatkan menjadi 5, scaleUp.percent.value ditingkatkan menjadi 30, dan scaleUp.pods.value ditingkatkan menjadi 5.

Mengonfigurasi penskalaan yang tidak terlalu agresif

Nilai konfigurasi hpaBehavior juga dapat dikurangi untuk menerapkan kebijakan penskalaan naik dan penskalaan turun yang tidak terlalu agresif. Contoh:

runtime:
  # ...
  hpaMetrics:
    serverMainTaskWaitTime: 400M
    serverNioTaskWaitTime: 400M
    targetCPUUtilizationPercentage: 75
  hpaBehavior:
    scaleDown:
      percent:
        periodSeconds: 60
        value: 10
      pods:
        periodSeconds: 60
        value: 1
      selectPolicy: Min
      stabilizationWindowSeconds: 180
    scaleUp:
      percent:
        periodSeconds: 60
        value: 20
      pods:
        periodSeconds: 60
        value: 4
      selectPolicy: Max
      stabilizationWindowSeconds: 30

Dalam contoh di atas, scaleDown.percent.value diturunkan menjadi 10, scaleDown.pods.value diturunkan menjadi 1, dan scaleUp.stablizationWindowSeconds dinaikkan menjadi 180.

Untuk mengetahui informasi selengkapnya tentang penskalaan berbasis metrik menggunakan kolom hpaBehavior, lihat Kebijakan penskalaan.

Pemecahan masalah

Bagian ini menjelaskan metode pemecahan masalah untuk error umum yang mungkin Anda alami saat mengonfigurasi penskalaan dan penskalaan otomatis.

HPA menampilkan unknown untuk nilai metrik

Jika penskalaan berbasis metrik tidak berfungsi dan HPA menampilkan unknown untuk nilai metrik, gunakan perintah berikut untuk memeriksa output HPA:

kubectl describe hpa HPA_NAME

Saat menjalankan perintah, ganti HPA_NAME dengan nama HPA yang ingin Anda lihat.

Output akan menampilkan target dan pemakaian CPU layanan, yang menunjukkan bahwa penskalaan CPU akan berfungsi tanpa penskalaan berbasis metrik. Untuk perilaku HPA menggunakan beberapa parameter, lihat Menskalakan pada beberapa metrik.