KEDA ile ölçeklendirme
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:
İ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/StatefulSets
ile 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}