Azure Arc에서 사용하도록 설정된 AKS에서 클러스터 자동 크기 조정에 PowerShell 사용

적용 대상: Azure Stack HCI 22H2의 AKS, Windows Server의 AKS

PowerShell을 사용하여 자동 크기 조정기를 사용하도록 설정하고 Arc에서 사용하도록 설정된 AKS의 대상 클러스터에서 노드 풀의 자동 크기 조정을 관리할 수 있습니다. PowerShell을 사용하여 클러스터 자동 크기 조정을 구성하고 관리할 수도 있습니다.

새 AksHciAutoScalerConfig 개체 만들기

또는 Set-AksHciCluster 명령에 전달할 새 AksHciAutoScalerConfig 개체를 New-AksHciCluster 만들려면 다음 명령을 사용합니다.

New-AksHciAutoScalerProfile -Name asp1 -AutoScalerProfileConfig @{ "min-node-count"=2; "max-node-count"=7; 'scale-down-unneeded-time'='1m'}

클러스터를 만들 때 autoscalerconfig 개체를 제공할 수 있습니다. 개체에는 자동 크기 조정기 매개 변수가 포함됩니다. 매개 변수 정보는 자동 크기 조정기 프로필을 사용하는 방법을 참조하세요.

기존 AksHciAutoScalerConfig 프로필 개체 변경

기존 AksHciAutoScalerConfig 프로필 개체를 업데이트하면 해당 개체를 사용하는 클러스터가 새 매개 변수를 사용하도록 업데이트됩니다.

Set-AksHciAutoScalerProfile -name myProfile -autoScalerProfileConfig @{ "max-node-count"=5; "min-node-count"=2 }

autoscaler에 대한 매개 변수를 포함하는 autoscalerconfig 개체를 업데이트할 수 있습니다. 매개 변수 정보는 자동 크기 조정기 프로필을 사용하는 방법을 참조하세요.

새 클러스터에 자동 크기 조정 사용

새로 만든 모든 노드 풀에서 자동 크기 조정을 자동으로 사용하도록 설정하려면 명령과 함께 다음 매개 변수를 New-AksHciCluster 사용합니다.

New-AksHciCluster -name mycluster -enableAutoScaler -autoScalerProfileName myAutoScalerProfile

기존 클러스터에서 자동 크기 조정 사용

기존 클러스터에서 새로 만든 각 노드 풀에서 자동으로 자동 크기 조정을 사용하도록 설정하려면 명령과 함께 매개 변수를 Set-AksHciCluster 사용합니다enableAutoScaler.

Set-AksHciCluster -Name <string> [-enableAutoScaler <boolean>] [-autoScalerProfileName <String>] 

기존 노드 풀에서 자동 크기 조정 사용

기존 노드 풀에서 자동 크기 조정을 사용하도록 설정하려면 명령과 함께 매개 변수를 Set-AksHciNodePool 사용합니다autoScaler.

Set-AksHciNodePool -clusterName <Your-Cluster-Name> -name <Your-NodePool-Name> -autoScaler $true

자동 크기 조정 사용 안 함

기존 클러스터에서 새로 만든 모든 노드 풀에서 자동 크기 조정을 사용하지 않도록 설정하려면 명령을 사용하여 Set-AksHciCluster false로 설정합니다enableAutoScaler.

Set-AksHciCluster -Name <string> -enableAutoScaler $false

가로 자동 크기 조정기를 효과적으로 사용

클러스터 및 노드 풀이 자동으로 크기 조정되도록 구성되었으므로 수평 자동 크기 조정기 기능을 사용하는 방식으로 크기를 조정하도록 워크로드를 구성할 수 있습니다.

워크로드 크기 조정에 사용할 수 있는 두 가지 기본 메서드는 다음과 같습니다.

  • Kubernetes Horizontal Pod Autoscaler: 부하 특성에 따라 Horizontal Pod 자동 크기 조정기( 가로 자동 크기 조정기라고도 함)는 애플리케이션 배포의 Pod를 Kubernetes 클러스터의 사용 가능한 노드로 크기 조정합니다. 예약할 수 있는 노드가 더 이상 없는 경우 가로 자동 크기 조정기는 Pod를 예약할 새 노드를 인스턴스화합니다. 애플리케이션 부하가 감소하면 노드의 크기가 다시 조정됩니다.
  • Kubernetes 노드 선호도 방지 규칙: Kubernetes 배포에 대한 선호도 방지 규칙은 Pod 집합을 동일한 노드에서 확장할 수 없도록 지정할 수 있으며 워크로드 크기를 조정하려면 다른 노드가 필요합니다. 수평 자동 크기 조정기는 부하 특성 또는 애플리케이션 인스턴스의 대상 Pod 수와 함께 노드 풀의 새 노드를 인스턴스화하여 요청을 충족합니다. 애플리케이션 요구가 가라앉으면 수평 자동 크기 조정기가 노드 풀을 다시 축소합니다.

이 섹션에는 몇 가지 예제가 포함되어 있습니다.

Horizontal Pod Autoscaler

필수 조건:

  • Arc에서 사용하도록 설정된 AKS가 설치됩니다.
  • 대상 클러스터가 설치되어 Azure에 연결됩니다.
  • 하나 이상의 활성 Linux 작업자 노드를 사용하여 하나의 Linux 노드 풀이 배포됩니다.
  • 수평 노드 자동 크기 조정기는 앞에서 설명한 대로 대상 클러스터 및 Linux 노드 풀에서 사용하도록 설정되었습니다.

Kubernetes Horizontal Pod Autoscaler 연습 예제를 사용하여 Horizontal Pod Autoscaler의 작동 방식을 보여 줍니다.

Horizontal Pod 자동 크기 조정기가 작동하려면 대상 클러스터에 메트릭 서버 구성 요소를 배포해야 합니다.

메트릭 서버를 라는 mycluster대상 클러스터에 배포하려면 다음 명령을 실행합니다.

Get-AksHciCredential -name mycluster
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

Kubernetes 메트릭 서버가 배포된 후 확장에 사용하는 노드 풀에 애플리케이션을 배포할 수 있습니다. 이 예제에서는 Kubernetes 커뮤니티 웹 사이트의 테스트 애플리케이션을 사용합니다.

kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
deployment.apps/php-apache created
service/php-apache created

이 명령은 호출 클라이언트에 "확인" 메시지를 반환하는 Apache 웹 서버 기반 PHP 애플리케이션의 배포를 만듭니다.

다음으로, 현재 Pod의 CPU 사용량이 50%에 도달하면 새 Pod를 예약하고 1에서 50개의 Pod로 확장하도록 Horizontal Pod 자동 크기 조정기를 구성합니다.

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
horizontalpodautoscaler.autoscaling/php-apache autoscaled

다음 명령을 실행하여 새로 만든 Horizontal Pod Autoscaler의 현재 상태 검사 수 있습니다.

kubectl get hpa
NAME         REFERENCE                     TARGET    MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   0% / 50%  1         10        1          18s

마지막으로 웹 서버의 부하를 늘려 스케일 아웃을 확인합니다. 새 PowerShell 창을 열고 다음 명령을 실행합니다.

kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"

이전 PowerShell 창으로 돌아가서 다음 명령을 실행하는 경우 짧은 기간 내에 Pod 수가 변경되는 것을 볼 수 있습니다.

kubectl get hpa php-apache --watch
NAME         REFERENCE                     TARGET      MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   305% / 50%  1         10        1          3m

이 예제에서는 다음과 같이 Pod 수가 1에서 7로 변경됩니다.

NAME         REFERENCE                     TARGET      MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   305% / 50%  1         10        7          3m

모든 Pod가 한 노드에 적합하기 때문에 노드 자동 크기 조정기를 트리거하기에 충분하지 않은 경우 더 많은 PowerShell 창을 열고 더 많은 부하 생성기 명령을 실행합니다. 명령을 실행할 때마다 만드는 Pod의 이름을 변경해야 합니다. 예를 들어 다음 명령과 같이 대신 load-generator를 사용합니다load-generator-2.

kubectl run -i --tty load-generator-2 --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"

그런 다음, 다음 명령을 사용하여 인스턴스화된 노드 수를 검사.

kubectl get nodes
NAME              STATUS   ROLES                  AGE    VERSION
moc-laondkmydzp   Ready    control-plane,master   3d4h   v1.22.4
moc-lorl6k76q01   Ready    <none>                 3d4h   v1.22.4
moc-lorl4323d02   Ready    <none>                   9m   v1.22.4
moc-lorl43bc3c3   Ready    <none>                   2m   v1.22.4

스케일 다운을 watch Ctrl-C를 눌러 부하 생성기 Pod를 종료하고 연결된 PowerShell 창을 닫습니다. 약 30분이 지나면 Pod 수가 감소하는 것을 볼 수 있습니다. 약 30분 후에 노드의 프로비전이 해제됩니다.

Kubernetes Horizontal Pod Autoscaler에 대한 자세한 내용은 Horizontal Pod 자동 크기 조정을 참조하세요.

노드 선호도 규칙

노드 선호도 규칙을 사용하여 Kubernetes 스케줄러가 노드의 특정 특성에 따라 클러스터 또는 노드 풀의 특정 노드 집합에서만 Pod를 실행할 수 있습니다. Horizontal Node Autoscaler의 함수를 표시하려면 동일한 규칙을 사용하여 지정된 Pod의 instance 하나만 각 노드에서 실행되도록 할 수 있습니다.

필수 조건:

  • AKS Arc가 설치됩니다.
  • 대상 클러스터가 설치되어 Azure에 연결됩니다.
  • 하나 이상의 활성 Linux 작업자 노드를 사용하여 하나의 Linux 노드 풀이 배포됩니다.
  • 가로 노드 자동 크기 조정기는 앞에서 설명한 대로 대상 클러스터 및 Linux 노드 풀에서 사용하도록 설정되었습니다.

다음 콘텐츠를 사용하여 YAML 파일을 만들고 로컬 폴더에 node-anti-affinity.yaml 로 저장합니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-cache
spec:
  selector:
    matchLabels:
      app: store
  replicas: 4
  template:
    metadata:
      labels:
        app: store
    spec:
      nodeSelector:
        kubernetes.io/os: linux
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - store
            topologyKey: "kubernetes.io/hostname"
      containers:
      - name: redis-server
        image: redis:3.2-alpine

PowerShell 창을 열고 대상 클러스터에 대한 자격 증명을 로드합니다. 이 예제에서 클러스터의 이름은 mycluster입니다.

Get-AksHciCredential -name mycluster

이제 대상 클러스터에 YAML 파일을 적용합니다.

kubectl apply -f node-anti-affinity.yaml

몇 분 후에 다음 명령을 사용하여 새 노드가 온라인 상태가 되었는지 검사 수 있습니다.

kubectl get nodes
NAME              STATUS   ROLES                  AGE    VERSION
moc-laondkmydzp   Ready    control-plane,master   3d4h   v1.22.4
moc-lorl6k76q01   Ready    <none>                 3d4h   v1.22.4
moc-lorl4323d02   Ready    <none>                   9m   v1.22.4
moc-lorl43bc3c3   Ready    <none>                   9m   v1.22.4
moc-lorl44ef56c   Ready    <none>                   9m   v1.22.4

노드를 제거하려면 다음 명령을 사용하여 redis 서버 배포를 삭제합니다.

kubectl delete -f node-anti-affinity.yaml

Kubernetes Pod 선호도 규칙에 대한 자세한 내용은 노드에 Pod 할당을 참조하세요.

수평 자동 크기 조정기 문제 해결

대상 클러스터에 대해 Horizontal Pod 자동 크기 조정기를 사용하도록 설정하면 관리 클러스터에 라는 <cluster_name>-cluster-autoscaler 새 Kubernetes 배포가 만들어집니다. 이 배포는 대상 클러스터를 모니터링하여 Pod를 예약하기에 충분한 작업자 노드가 있는지 확인합니다.

다음은 자동 크기 조정기와 관련된 문제를 디버그하는 몇 가지 다른 방법입니다.

  • 관리 클러스터에서 실행되는 클러스터 자동 크기 조정기 Pod는 크기 조정 결정을 내리는 방법, 발생하거나 제거해야 하는 노드 수 및 발생할 수 있는 일반적인 오류에 대한 유용한 정보를 수집합니다. 자동 크기 조정기는 이 정보를 로그에 저장합니다. 다음 명령을 실행하여 로그에 액세스합니다.

    kubectl --kubeconfig $(Get-AksHciConfig).Kva.kubeconfig logs -l app=<cluster_name>-cluster-autoscaler
    
  • 클라우드 운영자 로그는 관리 클러스터에 Kubernetes 이벤트를 기록합니다. 이 이벤트는 클러스터 및 노드 풀에 대해 자동 크기 조정기를 사용하거나 사용하지 않도록 설정한 시기를 이해하는 데 도움이 될 수 있습니다. 다음 명령을 실행하여 볼 수 있습니다.

    kubectl --kubeconfig $(Get-AksHciConfig).Kva.kubeconfig get events
    
  • 클러스터 자동 크기 조정기 배포는 관리하는 대상 클러스터에 를 만듭니다 configmap . 여기에는 configmap 자동 크기 조정기 상태 클러스터 전체 수준 및 노드 풀당 정보가 포함됩니다. 대상 클러스터에 대해 다음 명령을 실행하여 상태 확인합니다.

    참고

    를 실행 Get-AksHciCredentials -Name <clustername> 하여 해당 대상 클러스터에 kubeconfig 액세스하는 정보를 검색해야 합니다.

    kubectl --kubeconfig ~\.kube\config get configmap cluster-autoscaler-status -o yaml
    
  • 클러스터 자동 크기 조정기는 클러스터의 노드 풀 크기를 조정할 때 클러스터 자동 크기 조정기 상태 configmap 이벤트를 기록합니다. 대상 클러스터에 대해 다음 명령을 실행하여 이러한 로그를 볼 수 있습니다.

    kubectl --kubeconfig ~\.kube\config describe configmap cluster-autoscaler-status
    
  • 클러스터 자동 크기 조정기는 Pod를 예약할 수 없는 경우 크기 조정 결정을 내릴 때 대상 클러스터의 Pod에서 이벤트를 내보냅니다. Pod에서 이벤트를 보려면 다음 명령을 실행합니다.

    kubectl --kubeconfig ~\.kube\config describe pod <pod_name>
    

PowerShell 참조

클러스터 자동 크기 조정을 지원하는 PowerShell cmdlet에 대한 다음 참조 페이지를 참조하세요.

다음 단계