KEDA ile ölçeklendirme

Tamamlandı

Kubernetes Olay Odaklı Otomatik Ölçeklendirme

Kubernetes Olay Odaklı Otomatik Ölçeklendirme (KEDA), uygulama otomatik ölçeklendirmesini basitleştiren tek amaçlı ve basit bir bileşendir. KeDA'yı herhangi bir Kubernetes kümesine ekleyebilir ve işlevselliğini genişletmek için Yatay Pod Otomatik Ölçeklendiricisi (HPA) veya Küme Otomatik Ölçeklendiricisi gibi standart Kubernetes bileşenleriyle birlikte kullanabilirsiniz. KEDA ile, olay temelli ölçeklendirmeden yararlanmak istediğiniz belirli uygulamaları hedefleyebilir ve diğer uygulamaların farklı ölçeklendirme yöntemleri kullanmasına izin vekleyebilirsiniz. KEDA, herhangi bir sayıda Kubernetes uygulaması veya çerçevesiyle birlikte çalışmak için esnek ve güvenli bir seçenektir.

Önemli özellikler ve özellikler

  • Sıfıra ölçek özellikleriyle sürdürülebilir ve uygun maliyetli uygulamalar oluşturma
  • KEDA ölçeklendiricilerini kullanarak uygulama iş yüklerini talebi karşılayacak şekilde ölçeklendirme
  • Ile uygulamaları otomatik ölçeklendirme ScaledObjects
  • ile işleri otomatik ölçeklendirme ScaledJobs
  • otomatik ölçeklendirmeyi ve kimlik doğrulamasını iş yüklerinden ayrıştırarak üretim sınıfı güvenliği kullanma
  • Özelleştirilmiş otomatik ölçeklendirme yapılandırmalarını kullanmak için kendi harici ölçeklendiricinizi getirin

Mimari

KEDA iki ana bileşen sağlar:

  • KEDA işleci: Kubernetes Dağıtımları, İşler, StatefulSets veya alt kaynağı tanımlayan herhangi bir /scale müşteri kaynağı desteğiyle son kullanıcıların iş yüklerini sıfırdan N örneğine ölçeklendirmesine olanak tanır.
  • Ölçüm sunucusu: Otomatik ölçeklendirme eylemlerini yönlendirmek için Kafka konu başlığındaki iletiler veya Azure Event Hubs'daki olaylar gibi dış ölçümleri HPA'da kullanıma sunar. Yukarı akış sınırlamaları nedeniyle, kümedeki tek yüklü ölçüm bağdaştırıcısı KEDA ölçüm sunucusu olmalıdır.

Aşağıdaki diyagramda KEDA'nın otomatik ölçeklendirme işlevselliği sağlamak için Kubernetes HPA, dış olay kaynakları ve Kubernetes API Sunucusu ile nasıl tümleştirilip tümleştirileme yöntemi gösterilmektedir:

Kubernetes'teki KEDA mimarisini gösteren diyagram.

İpucu

Daha fazla bilgi için resmi KEDA belgelerine bakın.

Olay kaynakları ve ölçekleyiciler

KEDA ölçeklendiricileri bir Dağıtımın etkinleştirilmesi veya devre dışı bırakılması gerekip gerekmediğini algılayabilir ve belirli bir olay kaynağı için özel ölçümler besleyebilir. Dağıtımlar ve StatefulSets, KEDA ile iş yüklerini ölçeklendirmenin en yaygın yoludur. Alt kaynağı uygulayan /scale özel kaynakları da ölçeklendikleyebilirsiniz. KEDA'nın ölçek tetikleyicisine göre ölçeklendirilmesini istediğiniz Kubernetes Dağıtımını veya StatefulSet'i tanımlayabilirsiniz. KEDA bu hizmetleri izler ve oluşan olaylara göre bunları otomatik olarak ölçeklendirir veya genişleter.

Arka planda KEDA, olay kaynağını izler ve bu verileri Kubernetes'e ve HPA'ya aktararak hızlı kaynak ölçeklendirmesini sağlar. Bir kaynağın her çoğaltması olay kaynağından öğeleri etkin bir şekilde çeker. KEDA ve Deployments/StatefulSetsile olaylara göre ölçeklendirebilir ve olay kaynağıyla zengin bağlantı ve işleme semantiği (örneğin, sıralı işleme, yeniden denemeler, kilitlenme veya denetim noktası oluşturma) sağlayabilirsiniz.

Ölçeklendirilmiş nesne belirtimi

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: {scaled-object-name}
spec:
  scaleTargetRef:
    apiVersion:    {api-version-of-target-resource}  # Optional. Default: apps/v1
    kind:          {kind-of-target-resource}         # Optional. Default: Deployment
    name:          {name-of-target-resource}         # Mandatory. Must be in the same namespace as the ScaledObject
    envSourceContainerName: {container-name}         # Optional. Default: .spec.template.spec.containers[0]
  pollingInterval: 30                                # Optional. Default: 30 seconds
  cooldownPeriod:  300                               # Optional. Default: 300 seconds
  minReplicaCount: 0                                 # Optional. Default: 0
  maxReplicaCount: 100                               # Optional. Default: 100
  advanced:                                          # Optional. Section to specify advanced options
    restoreToOriginalReplicaCount: true/false        # Optional. Default: false
    horizontalPodAutoscalerConfig:                   # Optional. Section to specify HPA related options
      behavior:                                      # Optional. Use to modify HPA's scaling behavior
        scaleDown:
          stabilizationWindowSeconds: 300
          policies:
          - type: Percent
            value: 100
            periodSeconds: 15
  triggers:
  # {list of triggers to activate scaling of the target resource}

Ölçeklendirilmiş iş belirtimi

Olay temelli kodu Dağıtımlar olarak ölçeklendirmeye alternatif olarak, kodunuzu Kubernetes İşi olarak da çalıştırabilir ve ölçeklendikleyebilirsiniz. Bu seçeneği göz önünde bulundurmanın birincil nedeni, uzun süre çalışan yürütmeleri işlemeniz gerektiğidir. Algılanan her olay, bir Dağıtım içinde birden çok olayı işlemek yerine kendi Kubernetes İşi'ni zamanlar. Bu yaklaşım, her olayı yalıtarak işlemenize ve kuyruktaki olay sayısına göre eşzamanlı yürütme sayısını ölçeklendirmenize olanak tanır.

apiVersion: keda.sh/v1alpha1
kind: ScaledJob
metadata:
  name: {scaled-job-name}
spec:
  jobTargetRef:
    parallelism: 1                            # [max number of desired pods](https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#controlling-parallelism)
    completions: 1                            # [desired number of successfully finished pods](https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#controlling-parallelism)
    activeDeadlineSeconds: 600                #  Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer
    backoffLimit: 6                           # Specifies the number of retries before marking this job failed. Defaults to 6
    template:
      # describes the [job template](https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/)
  pollingInterval: 30                         # Optional. Default: 30 seconds
  successfulJobsHistoryLimit: 5               # Optional. Default: 100. How many completed jobs should be kept.
  failedJobsHistoryLimit: 5                   # Optional. Default: 100. How many failed jobs should be kept.
  envSourceContainerName: {container-name}    # Optional. Default: .spec.JobTargetRef.template.spec.containers[0]
  maxReplicaCount: 100                        # Optional. Default: 100
  scalingStrategy:
    strategy: "custom"                        # Optional. Default: default. Which Scaling Strategy to use. 
    customScalingQueueLengthDeduction: 1      # Optional. A parameter to optimize custom ScalingStrategy.
    customScalingRunningJobPercentage: "0.5"  # Optional. A parameter to optimize custom ScalingStrategy.
  triggers:
  # {list of triggers to create jobs}

Bilginizi ölçün

1.

KEDA, Kubernetes içinde hangi temel rolleri oynar?

2.

KEDA hangi tür iş yüklerini ölçeklendirebilir?

3.

Ölçeklendirilmiş İşleri kullanmanın birincil nedeni nedir?