Windows Server 컨테이너 만들기
적용 대상: Azure Stack HCI, 버전 23H2
이 문서에서는 Azure CLI를 사용하여 Windows Server 컨테이너를 실행하는 기존 AKS 클러스터에 노드 풀을 배포하는 방법을 설명합니다. 또한 Windows Server 컨테이너의 ASP.NET 샘플 애플리케이션을 클러스터에 배포하는 방법에 대해서도 설명합니다.
필수 조건
AKS 클러스터를 만드는 방법의 지침에 따라 AKS 클러스터를 만듭니다.
노드 풀 추가
기본적으로 Kubernetes 클러스터는 Linux 컨테이너를 실행할 수 있는 노드 풀을 사용하여 만들어집니다. Linux 노드 풀과 함께 Windows Server 컨테이너를 실행할 수 있는 다른 노드 풀을 추가해야 합니다.
매개 변수--os-type Windows
와 함께 명령을 사용하여 Windows 컨테이너 호스트가 있는 az aksarc nodepool add
노드 풀을 추가합니다. 운영 체제 SKU가 지정되지 않은 경우 노드 풀은 클러스터의 Kubernetes 버전에 따라 기본 OS로 설정됩니다. Windows Server 2022는 Kubernetes 버전 1.25.0 이상의 기본 운영 체제입니다. Windows Server 2019는 이전 버전의 기본 OS입니다.
- Windows Server 2019를 사용하려면 다음 매개 변수를 지정합니다.
os-type
(이)가Windows
(으)로 설정됩니다.os-sku
(이)가Windows2019
(으)로 설정됩니다.
- 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 클러스터에 연결합니다. 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가 예약되도록 노드 선택기를 정의해야 합니다.
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 매니페스트를 참조하세요.
kubectl apply 명령을 사용하여 애플리케이션을 배포하고 YAML 매니페스트의 이름을 지정합니다.
kubectl apply -f sample.yaml --kubeconfig .\\aks-arc-kube-config
다음 예제 출력은 배포 및 서비스가 성공적으로 생성되었음을 보여줍니다.
deployment.apps/sample created
service/sample created
애플리케이션 테스트
애플리케이션이 실행되면 애플리케이션 프런트 엔드를 인터넷에 공개하는 Kubernetes 서비스가 만들어집니다. 이 프로세스를 완료하는 데 몇 분이 걸릴 수 있습니다. 경우에 따라 서비스를 프로비전하는 데 몇 분 이상 걸릴 수 있습니다. 프로비전하는 데 최대 10분이 소요됩니다.
--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 조사식 프로세스를 중지합니다. 다음 예제 출력은 서비스에 할당된 유효한 공용 IP 주소를 보여줍니다.
sample LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
샘플 서비스의 외부 IP 주소 및 포트 에 대한 웹 브라우저를 열어 작동하는 샘플 앱을 참조하세요.
페이지를 로드하려고 할 때 연결 시간 제한이 수신되면 샘플 앱이 명령을 사용하여
kubectl get pods --watch
준비되었는지 확인해야 합니다. 외부 IP 주소를 사용할 수 있을 때까지 Windows 컨테이너가 시작되지 않는 경우가 있습니다.
노드 풀 삭제
다음 명령을 사용하여 노드 풀을 삭제합니다.az akshybrid nodepool delete
az aksarc nodepool delete -g $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --no-wait