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 }
autoscalerconfig 개체를 업데이트할 수 있습니다. 이 개체에는 autoscaler에 대한 매개 변수가 포함되어 있습니다. 매개 변수 정보는 자동 크기 조정기 프로필을 사용하는 방법을 참조 하세요.
새 클러스터에 자동 크기 조정 사용
새로 만든 모든 노드 풀에서 자동 크기 조정을 자동으로 사용하도록 설정하려면 명령과 함께 다음 매개 변수를 New-AksHciCluster
사용합니다.
New-AksHciCluster -name mycluster -enableAutoScaler -autoScalerProfileName myAutoScalerProfile
기존 클러스터에서 자동 크기 조정 사용
기존 클러스터에서 새로 만든 각 노드 풀에서 자동 크기 조정을 자동으로 사용하도록 설정하려면 다음 명령과 함께 매개 변수를 Set-AksHciCluster
사용합니다enableAutoScaler
.
Set-AksHciCluster -Name <string> [-enableAutoScaler <boolean>] [-autoScalerProfileName <String>]
기존 노드 풀에서 자동 크기 조정 사용
기존 노드 풀에서 자동 크기 조정을 사용하도록 설정하려면 다음 명령과 autoScaler
함께 매개 변수를 Set-AksHciNodePool
사용합니다.
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 Autoscaler(가로 자동 크기 조정기라고도 함)는 애플리케이션 배포의 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%에 도달하고 1에서 50개의 Pod로 확장될 때 새 Pod를 예약하도록 Horizontal Pod Autoscaler를 구성합니다.
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
스케일 다운을 확인하려면 Ctrl-C를 눌러 부하 생성기 Pod를 종료하고 연결된 PowerShell 창을 닫습니다. 약 30분 후에 Pod 수가 감소하는 것을 볼 수 있습니다. 약 30분 후에 노드의 프로비전이 해제됩니다.
Kubernetes Horizontal Pod Autoscaler에 대한 자세한 내용은 Horizontal Pod 자동 크기 조정을 참조 하세요.
노드 선호도 규칙
노드 선호도 규칙을 사용하여 Kubernetes 스케줄러가 노드의 특정 특성에 따라 클러스터 또는 노드 풀의 특정 노드 집합에서만 Pod를 실행할 수 있습니다. Horizontal Node Autoscaler의 함수를 표시하려면 동일한 규칙을 사용하여 지정된 Pod의 인스턴스가 각 노드에서만 실행되도록 할 수 있습니다.
필수 조건:
- 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 Autoscaler를 사용하도록 설정하면 관리 클러스터에 호출 <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
자동 크기 조정기 상태 클러스터 전체 수준 및 노드 풀당 정보가 포함됩니다. 대상 클러스터에 대해 다음 명령을 실행하여 상태를 확인합니다.참고 항목
해당 대상 클러스터에
kubeconfig
액세스하기 위해 정보를 검색하기 위해 실행Get-AksHciCredentials -Name <clustername>
되었는지 확인합니다.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에 대한 다음 참조 페이지를 참조하세요.
- Get-AksHciAutoScalerProfile
- AKS용 Get-AksHciCluster
- AKS용 Get-AksHciNodePool
- New-AksHciAutoScalerProfile
- New-AksHciCluster
- New-AksHciNodePool
- Remove-AksHciAutoScalerProfile
- Set-AksHciAutoScalerProfile
- Set-AksHciCluster
- Set-AksHciNodePool