자습서: AKS 하이브리드에서 Linux 앱 배포

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

이 자습서에서는 AKS 하이브리드의 AKS(Azure Kubernetes Service) 클러스터에 웹 프런트 엔드 및 Redis 데이터베이스 인스턴스를 포함하는 다중 컨테이너 앱을 배포하는 방법을 설명합니다. 또한 앱을 테스트하고 크기를 조정하는 방법도 알아봅니다.

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

시작하기 전에

다음 요구 사항이 준비되었는지 확인합니다.

  • 실행 중인 Linux 작업자 노드가 하나 이상 있는 AKS 클러스터입니다.
  • 클러스터에 액세스하기 위한 kubeconfig 파일입니다.
  • AksHci PowerShell 모듈이 설치됩니다. 자세한 내용은 Install-AksHci를 참조하세요.

자습서 절차를 수행하는 경우:

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

참고

네트워크를 다른 대상 클러스터와 공유하는 대상 클러스터를 배포하면 부하 분산 장치 IP 주소 충돌이 발생할 수 있습니다. 동일한 AksHciClusterNetwork 개체를 공유하는 대상 클러스터에서 서로 다른 포트를 사용하는 두 개의 워크로드를 배포하는 경우 IP 주소 충돌이 발생할 수 있습니다. IP 주소 및 포트 매핑이 HA 프록시 내에 할당되는 방식 때문에 중복 IP 주소가 할당 될 수 있습니다. 이 경우 워크로드를 다시 배포할 때까지 하나 또는 두 워크로드에 임의 네트워크 연결 문제가 발생합니다. 워크로드를 다시 배포할 때 동일한 포트를 사용하여 각 워크로드에 서비스 IP 주소를 할당하거나 다른 AksHciClusterNetwork 개체를 사용하는 대상 클러스터에 워크로드를 다시 배포할 수 있습니다.

앱 배포

Kubernetes 매니페스트 파일은 실행할 컨테이너 이미지와 같은 클러스터에 대해 원하는 상태를 정의합니다. 이 빠른 시작에서는 매니페스트를 사용하여 Azure 투표 앱을 실행하는 데 필요한 모든 개체를 만듭니다. 이 매니페스트에는 두 개의 Kubernetes 배포가 포함됩니다. 하나는 샘플 Azure Vote Python 앱용이고 다른 하나는 Redis 인스턴스용입니다. Redis 인스턴스에 대한 내부 서비스 및 인터넷에서 Azure Vote 앱에 액세스하는 외부 서비스인 두 개의 Kubernetes 서비스도 만들어집니다.

azure-vote.yaml이라는 파일을 만들고 다음 YAML 정의에 복사합니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: azure-vote-back
spec:
  replicas: 1
  selector:
    matchLabels:
      app: azure-vote-back
  template:
    metadata:
      labels:
        app: azure-vote-back
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: azure-vote-back
        image: redis
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        ports:
        - containerPort: 6379
          name: redis
---
apiVersion: v1
kind: Service
metadata:
  name: azure-vote-back
spec:
  ports:
  - port: 6379
  selector:
    app: azure-vote-back
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: azure-vote-front
spec:
  replicas: 1
  selector:
    matchLabels:
      app: azure-vote-front
  template:
    metadata:
      labels:
        app: azure-vote-front
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: azure-vote-front
        image: mcr.microsoft.com/azuredocs/azure-vote-front:v1
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        ports:
        - containerPort: 80
        env:
        - name: REDIS
          value: "azure-vote-back"
---
apiVersion: v1
kind: Service
metadata:
  name: azure-vote-front
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: azure-vote-front

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

kubectl apply -f azure-vote.yaml

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

deployment "azure-vote-back" created
service "azure-vote-back" created
deployment "azure-vote-front" created
service "azure-vote-front" created

앱 테스트

앱이 실행되면 Kubernetes 서비스는 앱 프런트 엔드를 인터넷에 노출합니다. 이 프로세스를 완료하는 데 몇 분이 걸릴 수 있습니다.

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

kubectl get service azure-vote-front --watch

처음에는 azure-vote-front 서비스에 대한 EXTERNAL-IP보류 중으로 표시됩니다.

NAME               TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
azure-vote-front   LoadBalancer   10.0.37.27      <pending>     80:30572/TCP   22m

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

NAME               TYPE           CLUSTER-IP   EXTERNAL-IP     PORT(S)        AGE
azure-vote-front   LoadBalancer   10.0.37.27   52.179.23.131   80:30572/TCP   24m

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

Azure의 Kubernetes 클러스터에 배포된 Azure Voting App 애플리케이션의 홈페이지 스크린샷

애플리케이션 Pod 크기 조정

Azure Voting App 프런트 엔드 및 Redis 인스턴스의 단일 복제본을 만들었습니다. 클러스터의 Pod 수와 상태를 보려면 다음 명령을 사용합니다 kubectl get .

kubectl get pods -n default

다음 예제 출력은 프런트 엔드 Pod 1개와 백 엔드 Pod 1개를 보여줍니다.

NAME                                READY     STATUS    RESTARTS   AGE
azure-vote-back-6bdcb87f89-g2pqg    1/1       Running   0          25m
azure-vote-front-84c8bf64fc-cdq86   1/1       Running   0          25m

azure-vote-front 배포에서 Pod 수를 변경하려면 명령을 사용합니다kubectl scale. 다음 예제에서는 프런트 엔드 Pod 수를 5로 늘입니다.

kubectl scale --replicas=5 deployment/azure-vote-front

를 다시 실행 kubectl get pods 하여 추가 Pod가 생성되었는지 확인합니다. 1분 정도 지나면 클러스터에서 추가 Pod를 사용할 수 있습니다.

kubectl get pods -n default

Name                                READY   STATUS    RESTARTS   AGE
azure-vote-back-6bdcb87f89-g2pqg    1/1     Running   0          31m
azure-vote-front-84c8bf64fc-cdq86   1/1     Running   0          31m
azure-vote-front-84c8bf64fc-56h64   1/1     Running   0          80s
azure-vote-front-84c8bf64fc-djkp8   1/1     Running   0          80s
azure-vote-front-84c8bf64fc-jmmvs   1/1     Running   0          80s
azure-vote-front-84c8bf64fc-znc6z   1/1     Running   0          80s

다음 단계