KEDA 및 Azure Service Bus를 사용한 K8s POD 자동 확장

4018 단어
내 프로젝트 중 하나에서 우리는 Azure Service Bus에서 주제의 큐 깊이를 기반으로 포드를 확장해야 한다는 요구 사항이 있었고 검색은 클라우드 네이티브 기반 인큐베이션 프로젝트인 KEDA - Kubernetes Event Driven Autoscaling에서 끝났습니다. 이제 클러스터에서 Keda를 설정하는 방법을 살펴보겠습니다.

KEDA는 Horizontal Pod Autoscaler와 같은 표준 Kubernetes 구성 요소와 함께 작동하며 덮어쓰거나 복제하지 않고 기능을 확장할 수 있습니다.

Keda는 클러스터 내에서 Kubernetes Horizontal Pod Autoscaler를 통해 ScaledObject 매니페스트 파일에 설정된 최소 포드 수에서 최대 포드 수까지 확장하는 keda-operator와 확장 결정을 위한 데이터를 가져오는 keda-operator-metrics-apiserver라는 두 가지 핵심 역할을 맡았습니다.



케다 설치
Keda operator 및 metric api-server는 자체 네임스페이스에 설치할 수 있으며 확장할 포드가 있는 동일한 네임스페이스에 실제 scaledobject 구성 요소를 배포합니다.

Keda는 다양한 방법으로 설치할 수 있습니다. 저는 Helm을 사용하기로 했습니다. kubectl 스크립트는 Keda에서도 사용할 수 있습니다website .

Helm을 사용하여 Keda 설치
Helm 저장소 추가helm repo add kedacore https://kedacore.github.io/charts
Helm 저장소 업데이트helm repo update
Keda Helm 차트 설치kubectl create namespace keda
helm install keda kedacore/keda --namespace keda

Azure Service Bus SAS 정책 구성
ServiceBus에서 작동하도록 KEDA를 구성하려면 관리 권한이 필요합니다.



KEDA yaml 매니페스트에서 업데이트하기 위해 이 SAS 키에서 연결 문자열을 선택할 수 있습니다.

YAML 매니페스트
크기 조정은 Azure Service Bus 인증에 TriggerAuthentication 개체를 사용하는 ScaledObject에 의해 이루어집니다.

apiVersion: v1
kind: Secret
metadata:
  namespace: poc 
  name: keda-secrets
  labels:
    app: exchange-jobs
data:
  management-connectionstring: <***Your base 64 encoded connection string from Azure SAS Key section with manage permissions****>
---
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  namespace: poc
  name: exchange-jobs-keda-scaler
spec:
  scaleTargetRef:
    name: exchange-jobs
  pollingInterval: 1   # Optional. Default: 30 seconds - checks for the changes
  cooldownPeriod: 20   # Optional. Default: 300 seconds - shutdown - need to find a sweet spot , Its better to keep default so that we don't interrupt any running processes
  minReplicaCount: 0
  maxReplicaCount: 50  # Optional. Default: 100
  triggers:
  - type: azure-servicebus
    metadata:
      topicName: mytopic
      subscriptionName: S1
      namespace: test-sb-keda-scaler   
      messageCount: "5" # need to find a sweet spot
    authenticationRef:
      name: keda-sbus-auth

---
apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
  namespace: poc
  name: keda-sbus-auth
spec:
  secretTargetRef:
  - parameter: connection
    name: keda-secrets
    key: management-connectionstring


위의 yaml은 포드가 있는 네임스페이스에 적용할 수 있으며 예상대로 작동해야 합니다.

참고 사항:
  • 300초 미만의 쿨 다운(기본값)은 minReplicaCount를 0으로 설정한 경우에만 작동합니다. minReplicaCount를 지정하지 않으면 Keda에서 0으로 가정합니다.
  • SB 연결 문자열은 base 64로 인코딩되어야 합니다.
  • TriggerAuthentication 개체 매개 변수가 connectionString이 아닌 연결입니다
  • .

    콘솔 앱 테스트를 위해 SBUS 주제 발신자 및 수신자가 필요한 경우 찾으십시오here .

    몇 가지 유용한 참고 자료입니다.
    ◉ Kubernetes 이벤트 기반 자동 확장 – https://aka.ms/azfr/662/01
    ◉ GitHub의 KEDA – https://aka.ms/azfr/662/02
    ◉ KEDA를 사용하는 Kubernetes의 Azure Functions – https://aka.ms/azfr/662/03
    ◉ Azure Friday - KEDA를 사용하는 Kubernetes의 Azure 서버리스 – https://aka.ms/azfr/662/04

    좋은 웹페이지 즐겨찾기