AKS 하이브리드에서 Windows 애플리케이션 배포

적용 대상: Azure Stack HCI의 AKS, Windows Server의 AKS

이 자습서에서는 WINDOWS Server 컨테이너의 ASP.NET 샘플 애플리케이션을 AKS 하이브리드의 AKS(Azure Kubernetes Service) 클러스터에 배포한 다음 애플리케이션을 테스트하고 확장하는 방법을 알아봅니다. Windows 노드를 Active Directory 도메인에 조인하는 방법도 알아봅니다.

이 자습서에서는 Kubernetes 개념에 대한 기본적인 이해를 가정합니다. 자세한 내용은 AKS 하이브리드에 대한 Kubernetes 핵심 개념을 참조하세요.

시작하기 전에

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

절차를 수행하는 경우:

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

애플리케이션 배포

Kubernetes 매니페스트 파일은 실행할 컨테이너 이미지와 같이 클러스터에 대해 원하는 상태를 정의합니다. 이러한 절차에서는 매니페스트를 사용하여 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를 실행하도록 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 주소로 엽니다.

AKS 클러스터에 배포된 Windows용 ASP.NET 샘플 애플리케이션의 홈페이지 스크린샷

페이지를 로드하려고 할 때 연결 시간이 초과되면 명령을 실행하여 샘플 앱이 준비되었는지 확인합니다 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

다음 단계