Windows Server 컨테이너 만들기

적용 대상: Azure Stack HCI, 버전 23H2

이 문서에서는 Azure CLI를 사용하여 Windows Server 컨테이너를 실행하는 기존 AKS 클러스터에 nodepool을 배포합니다. 또한 Windows Server 컨테이너의 ASP.NET 샘플 애플리케이션을 클러스터에 배포합니다.

사전 요구 사항

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

nodepool 추가

기본적으로 Kubernetes 클러스터는 Linux 컨테이너를 실행할 수 있는 nodepool을 사용하여 만들어집니다. Linux 노드 풀과 함께 Windows Server 컨테이너를 실행할 수 있는 다른 nodepool을 추가해야 합니다.

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

  • Windows Server 2019를 사용하려면 다음 매개 변수를 지정합니다.
    • os-typeWindows합니다.
    • os-skuWindows2019합니다.
  • Windows Server 2022를 사용하려면 다음 매개 변수를 지정합니다.
    • os-typeWindows합니다.
    • os-sku 로 설정됩니다 Windows2022 (선택 사항).

다음 명령은 라는 $mynodepool 새 nodepool을 만들고 하나의 Windows 2019 노드를 $myAKSCluster 사용하여 에 추가합니다.

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

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 클러스터에 연결합니다. kubectl get 명령을 실행하여 Kubernetes 클러스터에 연결할 수 있는지 확인합니다. 이 명령은 클러스터 노드 목록을 반환합니다.

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 명령을 사용하여 진행 상황을 모니터링합니다.

    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 watch 프로세스를 중지합니다. 다음 예제 출력은 서비스에 할당된 유효한 공용 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 컨테이너가 시작되지 않는 경우가 있습니다.

nodepool 삭제

명령을 사용하여 nodepool을 삭제합니다 az akshybrid nodepool delete .

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

다음 단계

이 문서에서는 기존 AKS 클러스터에 Windows nodepool을 배포하고 Windows Server 컨테이너에 ASP.NET 샘플 애플리케이션을 배포했습니다.