클러스터에 대한 노드 풀 관리(Azure Stack HCI 22H2의 AKS)
적용 대상: Azure Stack HCI 22H2의 AKS, Windows Server의 AKS
참고 항목
Azure Stack HCI 23H2의 AKS에서 노드 풀을 관리하는 방법에 대한 자세한 내용은 노드 풀 관리를 참조 하세요.
Azure Arc에서 사용하도록 설정된 AKS에서 동일한 구성의 노드는 노드 풀로 그룹화됩니다. 이러한 노드 풀에는 애플리케이션을 실행하는 기본 VM이 포함됩니다. 이 문서에서는 AKS Arc에서 클러스터에 대한 노드 풀을 만들고 관리하는 방법을 보여 줍니다.
참고 항목
이 기능을 사용하면 여러 노드 풀을 만들고 관리하는 방법을 더 자세히 제어할 수 있습니다. 따라서 만들기, 업데이트 및 삭제 작업에는 별도의 명령이 필요합니다. 이전에는 New-AksHciCluster 또는 Set-AksHciCluster를 통한 클러스터 작업이 하나의 Windows 노드 풀과 하나의 Linux 노드 풀을 사용하여 클러스터를 만들거나 크기를 조정하는 유일한 옵션이었습니다. 이 기능은 노드 풀 명령 New-AksHciNodePool, Set-AksHciNodePool, Get-AksHciNodePool 및 Remove-AksHciNodePool을 사용하여 개별 노드 풀에서 작업을 실행해야 하는 노드 풀에 대한 별도의 작업 집합을 노출합니다.
시작하기 전에
버전 1.1.6을 설치하는 것이 좋습니다. PowerShell 모듈이 이미 설치된 경우 다음 명령을 실행하여 버전을 찾습니다.
Get-Command -Module AksHci
PowerShell을 업데이트해야 하는 경우 AKS 호스트 업그레이드의 지침에 따릅니다.
AKS 클러스터 만들기
시작하려면 노드 풀이 하나인 AKS 클러스터를 만듭니다. 다음 예제에서는 New-AksHciCluster 명령을 사용하여 하나의 노드가 있는 Linuxnodepool이라는 하나의 Linux 노드 풀이 있는 새 Kubernetes 클러스터를 만듭니다. 이전 버전의 AKS를 사용하여 클러스터를 이미 배포했으며 이전 배포를 계속 사용하려는 경우 이 단계를 건너뛸 수 있습니다. 새 노드 풀 명령 집합을 사용하여 기존 클러스터에 더 많은 노드 풀을 추가할 수 있습니다.
New-AksHciCluster -name mycluster -nodePoolName linuxnodepool -nodeCount 1 -osType linux
참고 항목
이전 매개 변수 집합 New-AksHciCluster
은 계속 지원됩니다.
노드 풀 추가
이전 단계에서 만든 *'라는 mycluster
클러스터에는 단일 노드 풀이 있습니다. New-AksHciNodePool 명령을 사용하여 기존 클러스터에 두 번째 노드 풀을 추가할 수 있습니다. 다음 예제에서는 하나의 노드가 있는 windowsnodepool이라는 Windows 노드 풀을 만듭니다. 노드 풀의 이름이 기존 노드 풀과 같은 이름이 아닌지 확인합니다.
New-AksHciNodePool -clusterName mycluster -name windowsnodepool -count 1 -osType Windows -osSku Windows2022
노드 풀의 구성 정보 가져오기
노드 풀의 구성 정보를 보려면 Get-AksHciNodePool 명령을 사용합니다.
Get-AksHciNodePool -clusterName mycluster
예제 출력:
ClusterName : mycluster
NodePoolName : linuxnodepool
Version : v1.20.7
OsType : Linux
NodeCount : 1
VmSize : Standard_K8S3_v1
Phase : Deployed
ClusterName : mycluster
NodePoolName : windowsnodepool
Version : v1.20.7
OsType : Windows
NodeCount : 1
VmSize : Standard_K8S3_v1
Phase : Deployed
특정 노드 풀의 구성 정보를 보려면 Get-AksHciNodePool에서 매개 변수를 사용합니다-name
.
Get-AksHciNodePool -clusterName mycluster -name linuxnodepool
예제 출력:
ClusterName : mycluster
NodePoolName : linuxnodepool
Version : v1.20.7
OsType : Linux
NodeCount : 1
VmSize : Standard_K8S3_v1
Phase : Deployed
Get-AksHciNodePool -clusterName mycluster -name windowsnodepool
예제 출력:
ClusterName : mycluster
NodePoolName : windowsnodepool
Version : v1.20.7
OsType : Windows
NodeCount : 1
VmSize : Standard_K8S3_v1
Phase : Deployed
참고 항목
새 매개 변수 집합 New-AksHciCluster
을 사용하여 클러스터를 배포한 다음 실행 Get-AksHciCluster
하여 클러스터 정보를 가져오는 경우 필드 WindowsNodeCount
와 LinuxNodeCount
출력이 반환 0
됩니다. 각 노드 풀의 정확한 노드 수를 얻으려면 지정된 클러스터 이름을 가진 명령을 Get-AksHciNodePool
사용합니다.
노드 풀 크기 조정
노드 풀에서 노드 수를 늘리거나 축소할 수 있습니다.
노드 풀의 노드 수를 조정하려면 Set-AksHciNodePool 명령을 사용합니다. 다음 예제에서는 클러스터에 명명된 linuxnodepool
mycluster
노드 풀의 노드 수를 3으로 조정합니다.
Set-AksHciNodePool -clusterName mycluster -name linuxnodepool -count 3
컨트롤 플레인 노드 크기 조정
컨트롤 플레인 노드의 관리는 변경되지 않았습니다. 생성, 크기 조정 및 제거되는 방식은 동일하게 유지됩니다. 값을 제공하지 않는 경우 매개 변수 controlPlaneNodeCount
와 기본값이 각각 1 및 controlPlaneVmSize
Standard_A4_V2 New-AksHciCluster 명령을 사용하여 컨트롤 플레인 노드를 배포합니다.
애플리케이션의 워크로드 수요가 변경되면 컨트롤 플레인 노드의 크기를 조정해야 할 수 있습니다. 컨트롤 플레인 노드의 크기를 조정하려면 Set-AksHciCluster 명령을 사용합니다. 다음 예제에서는 이전 단계에서 만든 클러스터에서 mycluster
컨트롤 플레인 노드의 크기를 3으로 조정합니다.
Set-AksHciCluster -name mycluster -controlPlaneNodeCount 3
노드 풀 삭제
노드 풀을 삭제해야 하는 경우 Remove-AksHciNodePool 명령을 사용합니다. 다음 예제에서는 클러스터에서 명명된 windowsnodepool
노드 풀을 제거합니다 mycluster
.
Remove-AksHciNodePool -clusterName mycluster -name windowsnodepool
노드 풀에 대한 taint 지정
노드 풀을 만들 때 해당 노드 풀에 taint를 추가할 수 있습니다. taint를 추가하면 해당 노드 풀 내의 모든 노드도 해당 taint를 가져옵니다. 오염 및 관용에 대한 자세한 내용은 Kubernetes Taints 및 Tolerations를 참조 하세요.
노드 풀 taint 설정
taint를 사용하여 노드 풀을 만들려면 New-AksHciNodePool을 사용합니다. 이름을 taintnp
지정하고 매개 변수를 -taints
사용하여 taint를 지정 sku=gpu:noSchedule
합니다.
New-AksHciNodePool -clusterName mycluster -name taintnp -count 1 -osType linux -taints sku=gpu:NoSchedule
참고 항목
taint는 노드 풀을 만드는 동안 노드 풀에 대해서만 설정할 수 있습니다.
다음 명령을 실행하여 노드 풀이 지정된 taint와 함께 성공적으로 배포되었는지 확인합니다.
Get-AksHciNodePool -clusterName mycluster -name taintnp
출력
Status : {Phase, Details}
ClusterName : mycluster
NodePoolName : taintnp
Version : v1.20.7-kvapkg.1
OsType : Linux
NodeCount : 1
VmSize : Standard_K8S3_v1
Phase : Deployed
Taints : {sku=gpu:NoSchedule}
이전 단계에서는 노드 풀을 만들 때 sku=gpu:NoSchedule taint를 적용했습니다. 다음 기본 예제 YAML 매니페스트는 toleration을 사용하여 Kubernetes 스케줄러가 해당 노드 풀의 노드에서 NGINX Pod를 실행할 수 있도록 허용합니다.
이름이 지정된 nginx-toleration.yaml
파일을 만들고 다음 텍스트에 정보를 복사합니다.
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- image: mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine
name: mypod
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 1
memory: 2G
tolerations:
- key: "sku"
operator: "Equal"
value: "gpu"
effect: "NoSchedule"
그런 다음, 다음 명령을 사용하여 Pod를 예약합니다.
kubectl apply -f nginx-toleration.yaml
Pod가 배포되었는지 확인하려면 다음 명령을 실행합니다.
kubectl describe pod mypod
[...]
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
sku=gpu:NoSchedule
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 32s default-scheduler Successfully assigned default/mypod to moc-lk4iodl7h2y
Normal Pulling 30s kubelet Pulling image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine"
Normal Pulled 26s kubelet Successfully pulled image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine" in 4.529046457s
Normal Created 26s kubelet Created container mypod