연습 - Azure Kubernetes Service 클러스터에 스케일 개체 배포

완료됨

이 연습에서는 크기 조정 개체 CRD(사용자 지정 리소스 정의)를 AKS 클러스터에 배포합니다. 스케일러 개체에는 배포된 애플리케이션을 KEDA에 연결하는 트리거가 포함되어 있습니다. AKS에 배포한 후 KEDA는 Redis 목록을 모니터링하여, 목록 길이가 정의된 임계값을 초과하면 스케일 업하고 목록 길이가 정의된 임계값 아래이면 스케일 다운합니다.

ScaledObject 매니페스트 개요

  • scaleTargetRef: 이 섹션에서는 KEDA가 관찰하는 워크로드에 대해 설명합니다.

      scaleTargetRef:
        apiVersion: apps/v1                           # Optional. Default: apps/v1
        kind: deployment                              # Optional. Default: Deployment
        name: contoso-microservice                    # Mandatory. Must be in the same namespace as the ScaledObject
        envSourceContainerName: contoso-microservice  # Optional. Default: .spec.template.spec.containers[0]
    
  • minReplicaCountmaxReplicaCount: 이러한 두 특성은 KEDA가 스케일에 사용하는 복제본의 범위를 결정합니다. 이 경우에는 최소 0부터 최대 20개까지 크기를 조정하도록 KEDA에 지시합니다.

      minReplicaCount: 0            # Optional. Default: 0
      maxReplicaCount: 20           # Optional. Default: 100
    

    참고 항목

    minReplicaCount: 0는 배포 기본 복제본 수를 1에서 0으로 전환합니다. 이는 서비스가 유휴 상태이고 이벤트를 처리하지 않는 경우에 발생합니다. 이 경우 Redis 목록에 항목이 없고 서비스가 유휴 상태로 유지되는 경우 KEDA가 0으로 크기를 조정합니다.

  • advanced: 이 섹션은 KEDA의 고급 사용자 지정과 관련이 있습니다. restoreToOriginalReplicaCount 확장 이벤트 후 복제본(replica) 개수를 원래 값으로 반환하도록 KEDA에 지시합니다. 이 경우 이 값을 false로 설정하면 minReplicaCount 값이 0으로 스케일 다운됩니다.

      restoreToOriginalReplicaCount: 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: 이 섹션에서는 scalers를 사용하여 개체의 활성화/비활성화 여부를 감지하고 특정 이벤트 원본에 대한 사용자 지정 메트릭을 제공합니다. listLength는 목록에 항목이 10개 있을 때 스케일 업하도록 KEDA에 지시합니다.

      triggers:
      - type: redis
        metadata:
          # address:                  # Format must be host:port
          passwordFromEnv: REDIS_KEY
          listName: keda              # Required
          listLength: "10"            # Required
          enableTLS: "false"          # optional
          databaseIndex: "0"          # optional
          hostFromEnv: REDIS_HOST
          portFromEnv: REDIS_PORT
    

자세한 내용은 KEDA 스케일러를 참조하세요.

ScaledObject 매니페스트 만들기

  1. Cloud Shell에서 다음 명령을 사용하여 touch 호출 scaled-object.yaml 되는 Kubernetes 배포에 대한 매니페스트 파일을 만듭니다.

    touch scaled-object.yaml
    
  2. code .을 입력하여 Cloud Shell에서 통합 편집기를 엽니다.

  3. scaled-object.yaml 파일을 열고 YAML의 다음 코드 섹션을 추가합니다.

    apiVersion: keda.sh/v1alpha1
    kind: ScaledObject
    metadata:
      name: scaled-contoso
    spec:
      scaleTargetRef:
        apiVersion: apps/v1                             # Optional. Default: apps/v1
        kind: deployment                                # Optional. Default: Deployment
        name: contoso-microservice                      # Mandatory. Must be in the same namespace as the ScaledObject
        envSourceContainerName: contoso-microservice    # Optional. Default: .spec.template.spec.containers[0]
      pollingInterval: 30                               # Optional. Default: 30 seconds
      cooldownPeriod:  120                              # Optional. Default: 300 seconds
      minReplicaCount: 0                                # Optional. Default: 0
      maxReplicaCount: 20                               # Optional. Default: 100
      advanced:                                         # Optional. Section to specify advanced options
        restoreToOriginalReplicaCount: 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:
      - type: redis
        metadata:
          # address:                  # Format must be host:port
          passwordFromEnv: REDIS_KEY
          listName: keda              # Required
          listLength: "10"            # Required
          enableTLS: "false"          # optional
          databaseIndex: "0"          # optional
          hostFromEnv: REDIS_HOST
          portFromEnv: REDIS_PORT
    
  4. 매니페스트 파일(CTRL + S)을 저장하고 편집기(CTRL + Q)를 닫습니다.

매니페스트 적용

  1. 다음 명령을 사용하여 클러스터에 매니페스트를 배포합니다.kubectl apply

    kubectl apply -f ./scaled-object.yaml
    

    출력은 다음 예제 출력과 비슷하게 됩니다.

    scaledobject.keda.sh/scaled-contoso created
    
  2. 다음 명령을 사용하여 kubectl get pods 실행 중인 Pod 수를 확인합니다.

    kubectl get pods
    

    출력은 하나의 Pod가 실행되는 다음 예제 출력과 비슷하게 표시됩니다.

    NAME                                  READY   STATUS    RESTARTS   AGE
    contoso-microservice-794d98b5-4flvg   1/1     Running   0          2m1s
    
  3. 주기적으로 kubectl get pods 명령을 실행하여 배포가 작업의 백로그에 따라 Pod 수를 스케일링하고 있는지 확인합니다.

    참고 항목

    Linux 유틸리티 조사식이 설치된 경우 명령을 사용하여 watch kubectl get pods Pod 크기를 확인하여 Redis 목록 항목을 처리할 수 있습니다. 그렇지 않은 경우 명령을 사용할 kubectl get pods -w 수 있습니다.

    출력은 다음 예제 출력과 비슷하게 됩니다.

      NAME                                  READY   STATUS    RESTARTS   AGE
      contoso-microservice-794d98b5-4flvg   1/1     Running   0          3m
      contoso-microservice-794d98b5-4jpxp   1/1     Running   0          3m
      contoso-microservice-794d98b5-4lw7b   1/1     Running   0          2m15s
      contoso-microservice-794d98b5-5fqj5   1/1     Running   0          3m
      contoso-microservice-794d98b5-5kdbw   1/1     Running   0          2m15s
    

모든 항목이 처리되고 cooldownPeriod 만료되면 Pod 수가 0임을 알 수 있습니다. KEDA가 실행 중인 모든 복제본을 제거하고 처리할 항목이 없기 때문입니다.