Azure Stack HCI 및 Windows Server의 Azure Kubernetes Service Windows 애플리케이션 배포

적용 대상: Windows Server의 Azure Stack HCI

이 자습서에서는 Windows Server 컨테이너의 ASP.NET 샘플 애플리케이션을 Kubernetes 클러스터에 배포한 다음, 애플리케이션을 테스트하고 크기를 조정하는 방법을 알아봅니다. Windows 노드를 Active Directory 도메인에 조인하는 방법도 알아봅니다.

이 자습서에서는 Kubernetes 개념에 대한 기본적인 이해를 가정합니다. 자세한 내용은 Azure Stack HCI 및 Windows Server의 AKS에 대한 Kubernetes 핵심 개념을 참조하세요.

시작하기 전에

다음 요구 사항을 충족했는지 확인합니다.

다음 액세스 권한도 필요합니다.

  • PowerShell 관리 창에서 이 문서의 명령을 실행합니다.
  • OS 특정 워크로드가 적절한 컨테이너 호스트에 있는지 확인합니다. 혼합 Linux 및 Windows 작업자 노드 Kubernetes 클러스터가 있는 경우 노드 선택기 또는 테인트 및 튜닝을 사용할 수 있습니다. 자세한 내용은 노드 선택기 및 테인트 및 튜어레이션 사용을 참조하세요.

애플리케이션 배포

Kubernetes 매니페스트 파일은 어떤 컨테이너 이미지가 실행되는지 등과 같은 클러스터에 대해 원하는 상태를 정의합니다. 이 문서에서는 매니페스트를 사용하여 Windows Server 컨테이너에서 ASP.NET 샘플 응용 프로그램을 실행하는 데 필요한 모든 개체를 만듭니다. 이 매니페스트에는 ASP.NET 샘플 응용 프로그램에 대한 Kubernetes 배포 및 인터넷에서 응용 프로그램에 액세스하는 외부 Kubernetes 서비스가 포함되어 있습니다.

ASP.NET 샘플 응용 프로그램은 .NET Framework 샘플의 일부로 제공되며 Windows Server 컨테이너에서 실행됩니다. Azure Stack HCI 및 Windows Server의 AKS를 사용하려면 Windows Server 컨테이너가 Windows Server 2019의 이미지를 기반으로 해야 합니다.

또한 Kubernetes 매니페스트 파일은 Windows Server 컨테이너를 실행할 수 있는 노드에서 ASP.NET 샘플 응용 프로그램의 Pod를 실행하도록 AKS 클러스터에 지시하는 노드 선택기를 정의해야 합니다.

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:
        "beta.kubernetes.io/os": windows
      containers:
      - name: sample
        image: mcr.microsoft.com/dotnet/framework/samples:aspnetapp
        resources:
          limits:
            cpu: 1
            memory: 800M
          requests:
            cpu: .1
            memory: 300M
        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

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

kubectl apply -f sample.yaml

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

deployment.apps/sample created
service/sample created

애플리케이션 테스트

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

진행 상태를 모니터링하려면 --watch 인수와 함께 kubectl get service 명령을 사용합니다.

kubectl get service sample --watch

처음에는 샘플 서비스에 대한 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 주소를 보여줍니다.

NAME    TYPE           CLUSTER-IP   EXTERNAL-IP     PORT(S)        AGE
sample  LoadBalancer   10.0.37.27   52.179.23.131   80:30572/TCP   2m

샘플 앱이 실제로 작동하는 모습을 보려면 웹 브라우저를 서비스의 외부 IP 주소로 엽니다.

Image of browsing to ASP.NET sample application

페이지를 로드할 때 연결 시간 제한이 수신되면 샘플 앱이 명령으로 kubectl get pods --watch 준비되었는지 확인합니다. Windows 컨테이너가 시작되기 전에 외부 IP 주소를 사용할 수 있는 경우도 있습니다.

애플리케이션 Pod 크기 조정

애플리케이션 프런트 엔드의 단일 복제본을 만들었습니다. 클러스터의 Pod 수와 상태를 보려면 다음과 같이 명령을 사용합니다 kubectl get .

kubectl get pods -n default

샘플 배포의 Pod 수를 변경하려면 명령을 사용합니다kubectl scale. 다음 예제에서는 프런트 엔드 Pod 수를 3으로 늘입니다.

kubectl scale --replicas=3 deployment/sample

다시 실행 kubectl get pods 하여 추가 Pod가 만들어졌는지 확인합니다. 약 1분이 지나면 클러스터에서 추가 Pod를 사용할 수 있습니다.

kubectl get pods -n default

다음 단계