다음을 통해 공유


Windows 노드 풀 만들기

적용 대상: Azure 로컬의 AKS

이 문서에서는 Azure CLI를 사용하여 Windows Server 컨테이너를 실행하기 위해 기존 AKS 클러스터에 Windows 노드 풀을 배포하는 방법을 설명합니다. 또한 이 문서에서는 Windows Server 컨테이너의 샘플 ASP.NET 애플리케이션을 클러스터에 배포하는 방법에 대해서도 설명합니다.

필수 조건

AKS 클러스터를 만드는 방법의 지침에 따라 AKS 클러스터를 만듭니다.

중요합니다

Windows Server 노드 풀은 Azure Local의 Windows Server VM 활성화에 설명된 대로 Windows Server 구독 또는 Azure 하이브리드 혜택을 사용하여 라이선스를 부여해야 합니다.

Windows 노드 풀 추가

기본적으로 Kubernetes 클러스터는 Linux 컨테이너를 실행할 수 있는 노드 풀로 만들어집니다. Azure 로컬 2509 릴리스부터 Windows 노드 풀 기능은 기본적으로 사용하지 않도록 설정됩니다. Windows 노드 풀을 만들려면 먼저 Windows 노드 풀 기능을 사용하도록 설정해야 합니다. 자세한 내용은 Windows 노드 풀 사용을 참조하세요.

매개 변수az aksarc nodepool add와 함께 명령을 사용하여 Windows 컨테이너 호스트가 있는 --os-type Windows 노드 풀을 추가합니다. 운영 체제 SKU가 지정되지 않은 경우 노드 풀은 클러스터의 Kubernetes 버전에 따라 기본 OS로 설정됩니다. Windows Server 2022는 Kubernetes 버전 1.25.0 이상의 기본 운영 체제입니다.

Windows Server 2022를 사용하려면 다음 매개 변수를 지정합니다.

  • --os-type(이)가 Windows(으)로 설정됩니다.
  • --os-sku (선택 사항)으로 Windows2022 설정합니다.

다음 명령은 $mynodepool라는 이름의 새 노드 풀을 만들고 Windows Server 2022 노드 하나를 $myAKSCluster에 추가합니다.

az aksarc nodepool add --resource-group $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --node-count 1 --os-type Windows --os-sku Windows2022

AKS 클러스터에 연결

이제 로컬 컴퓨터에서 명령을 실행하여 Kubernetes 클러스터에 az connectedk8s proxy 연결할 수 있습니다. 이 명령을 실행하기 전에 Azure에 로그인해야 합니다. 여러 Azure 구독이 있는 경우 az account set 명령을 사용하여 적절한 구독 ID를 선택합니다.

다음 명령은 Kubernetes 클러스터의 kubeconfig를 로컬 컴퓨터에 다운로드하고 온-프레미스 Kubernetes 클러스터에 대한 프록시 연결 채널을 엽니다. 이 명령이 실행되는 동안 채널이 열립니다. 클러스터에 액세스하려는 한 이 명령을 실행합니다. 명령 시간이 초과되면 CLI 창을 닫고 새 창을 연 다음 명령을 다시 실행합니다.

다음 명령을 성공적으로 실행하려면 AKS 클러스터를 호스트하는 리소스 그룹에 대한 기여자 권한이 있어야 합니다.

az connectedk8s proxy --name $aksclustername --resource-group $resource_group --file .\aks-arc-kube-config

예상 출력:

Proxy is listening on port 47011
Merged "aks-workload" as current context in .\aks-arc-kube-config
Start sending kubectl requests on 'aks-workload' context using kubeconfig at .\aks-arc-kube-config
Press Ctrl+C to close proxy.

이 세션을 계속 실행하고 다른 터미널/명령 프롬프트에서 Kubernetes 클러스터에 연결합니다. 명령을 실행하여 Kubernetes 클러스터에 연결할 수 있는지 확인합니다 kubectl get . 이 명령은 클러스터 노드 목록을 반환합니다.

kubectl get node -A --kubeconfig .\aks-arc-kube-config

다음 예제 출력은 이전 단계에서 만든 노드를 보여줍니다. 노드 상태가 준비 상태인지 확인합니다.

NAME              STATUS   ROLES           AGE     VERSION
moc-lesdc78871d   Ready    control-plane   6d8h    v1.26.3
moc-lupeeyd0f8c   Ready    <none>          6d8h    v1.26.3
moc-ww2c8d5ranw   Ready    <none>          7m18s   v1.26.3

샘플 애플리케이션 배포

Kubernetes 매니페스트 파일은 실행할 컨테이너 이미지와 같은 클러스터에 대해 원하는 상태를 정의합니다.

YAML 매니페스트를 사용하여 Windows Server 컨테이너에서 ASP.NET 샘플 애플리케이션을 실행하는 데 필요한 모든 개체를 만들 수 있습니다. 이 매니페스트에는 ASP.NET 샘플 애플리케이션에 대한 Kubernetes 배포 와 인터넷에서 애플리케이션에 액세스하는 Kubernetes 서비스가 포함됩니다.

ASP.NET 샘플 애플리케이션은 .NET Framework 샘플 의 일부로 제공되며 Windows Server 컨테이너에서 실행됩니다. AKS를 사용하려면 Windows Server 컨테이너가 Windows Server 2019 이상의 이미지를 기반으로 해야 합니다. 또한 Kubernetes 매니페스트 파일은 windows Server 컨테이너를 실행할 수 있는 노드에서 ASP.NET 샘플 애플리케이션의 Pod가 예약되도록 노드 선택기를 정의해야 합니다.

  1. sample.yaml이라는 파일을 만들고 다음 YAML 정의를 붙여넣습니다.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: sample
      labels:
        app: sample
    spec:
      replicas: 1
      template:
        metadata:
          name: sample
          labels:
            app: sample
        spec:
          nodeSelector:
            "kubernetes.io/os": windows
          containers:
          - name: sample
            image: mcr.microsoft.com/dotnet/framework/samples:aspnetapp
            resources:
              limits:
                cpu: 1
                memory: 800M
            ports:
              - containerPort: 80
      selector:
        matchLabels:
          app: sample
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: sample
    spec:
      type: LoadBalancer
      ports:
      - protocol: TCP
        port: 80
      selector:
        app: sample
    

    YAML 매니페스트 파일의 분석은 배포 및 YAML 매니페스트를 참조하세요.

  2. kubectl apply 명령을 사용하여 애플리케이션을 배포하고 YAML 매니페스트의 이름을 지정합니다.

    kubectl apply -f sample.yaml --kubeconfig .\\aks-arc-kube-config
    

다음 예제 출력은 배포 및 서비스가 성공적으로 생성되었음을 보여줍니다.

deployment.apps/sample created
service/sample created

애플리케이션 테스트

애플리케이션이 실행되면 애플리케이션 프런트 엔드를 인터넷에 공개하는 Kubernetes 서비스가 만들어집니다. 이 프로세스를 완료하는 데 몇 분 정도 걸릴 수 있습니다. 경우에 따라 서비스를 프로비전하는 데 몇 분 이상 걸릴 수 있습니다. 프로비저닝이 완료되기까지 최대 10분이 소요됩니다.

  1. 인수와 함께 --watch 명령을 사용하여 진행 상황을 모니터링합니다.

    kubectl get service sample --watch --kubeconfig .\aks-arc-kube-config
    

    처음에 출력은 샘플 서비스에 대한 EXTERNAL-IP보류 중으로 표시합니다.

    NAME   TYPE         CLUSTER-IP EXTERNAL-IP PORT(S)      AGE
    sample LoadBalancer 10.0.37.27 <pending>   80:30572/TCP 6s
    

    EXTERNAL-IP 주소가 보류 중에서 IP 주소로 변경되면, CTRL-C를 사용하여 kubectl 감시 프로세스를 중지합니다. 다음 예제 출력은 서비스에 할당된 유효한 공용 IP 주소를 보여줍니다.

    sample LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
    
  2. 샘플 서비스의 외부 IP 주소 및 포트에 대한 웹 브라우저를 열어 작동하는 샘플 앱을 참조하세요.

    ASP.NET 샘플 애플리케이션을 보여 주는 스크린샷

    페이지 로드 시 연결 시간 초과가 발생하면 명령 kubectl get pods --watch을(를) 사용하여 샘플 앱이 준비되었는지 확인해야 합니다. 경우에 따라 외부 IP 주소를 사용할 수 있는 시간까지 Windows 컨테이너가 시작되지 않습니다.

노드 풀 삭제

다음 명령을 사용하여 노드 풀을 삭제합니다.az aksarc nodepool delete

az aksarc nodepool delete -g $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --no-wait

다음 단계