자습서 - AKS(Azure Kubernetes Service)에 애플리케이션 배포
Kubernetes는 컨테이너화된 애플리케이션에 대해 분산 플랫폼을 제공합니다. 고유한 애플리케이션 및 서비스를 빌드하여 Kubernetes 클러스터에 배포하고, 클러스터가 가용성 및 연결을 관리하게 합니다.
7개 중 네 번째 부분인 이 자습서에서는 샘플 애플리케이션을 Kubernetes 클러스터에 배포합니다. 다음 방법에 대해 설명합니다.
- Kubernetes 매니페스트 파일을 업데이트합니다.
- Kubernetes에서 애플리케이션을 실행합니다.
- 애플리케이션을 테스트합니다.
팁
AKS를 사용하면 구성 관리를 위해 다음 방식을 사용할 수 있습니다.
GitOps: 클러스터 상태 선언이 클러스터에 자동으로 적용되도록 합니다. GitOps를 사용하여 AKS 클러스터에 애플리케이션을 배포하는 방법에 대한 자세한 내용은 GitOps with Flux v2 자습서에서 Azure Kubernetes Service 클러스터에 대한 필수 조건을 참조하세요.
DevOps: CI(연속 통합) 및 CD(지속적인 업데이트)를 통해 빌드, 테스트 및 배포할 수 있습니다. DevOps를 사용하여 AKS 클러스터로 애플리케이션을 배포하는 방법의 예를 보려면 Azure Pipelines를 사용하여 AKS 빌드 및 배포 또는 Kubernetes에 배포하기 위한 GitHub Actions을 참조하세요.
시작하기 전에
이전 자습서에서는 애플리케이션을 컨테이너 이미지로 패키지하고, Azure Container Registry에 이미지를 업로드하고, Kubernetes 클러스터를 만들었습니다. 이 자습서를 완료하려면 미리 작성된 aks-store-quickstart.yaml
Kubernetes 매니페스트 파일이 필요합니다. 이 파일은 자습서 1 - AKS용 애플리케이션 준비의 애플리케이션 소스 코드에서 다운로드되었습니다.
이 자습서에는 Azure CLI 버전 2.0.53 이상이 필요합니다. az --version
을 사용하여 버전을 확인합니다. 설치하거나 업그레이드하려면 Azure CLI 설치를 참조하세요.
매니페스트 파일 업데이트
이 자습서에서 ACR(Azure Container Registry) 인스턴스는 샘플 애플리케이션에 대한 컨테이너 이미지를 저장합니다. 애플리케이션을 배포하려면 ACR 로그인 서버 이름을 포함하도록 Kubernetes 매니페스트 파일의 이미지 이름을 업데이트해야 합니다.
az acr list
명령을 사용하여 로그인 서버 주소를 가져오고 로그인 서버에 대해 쿼리합니다.az acr list --resource-group myResourceGroup --query "[].{acrLoginServer:loginServer}" --output table
복제된 aks-store-demo 디렉터리에 있는지 확인한 다음 텍스트 편집기를 사용하여
aks-store-quickstart.yaml
매니페스트 파일을 엽니다.ghcr.io/azure-samples를 ACR 로그인 서버 이름으로 바꿔 컨테이너의
image
속성을 업데이트합니다.containers: ... - name: order-service image: <acrName>.azurecr.io/aks-store-demo/order-service:latest ... - name: product-service image: <acrName>.azurecr.io/aks-store-demo/product-service:latest ... - name: store-front image: <acrName>.azurecr.io/aks-store-demo/store-front:latest ...
파일을 저장 후 닫습니다.
애플리케이션 실행
매니페스트 파일을 구문 분석하고 정의된 Kubernetes 개체를 만드는
kubectl apply
명령을 사용하여 애플리케이션을 배포합니다.kubectl apply -f aks-store-quickstart.yaml
다음 예제 출력에서는 AKS 클러스터에서 성공적으로 만들어진 리소스를 보여줍니다.
statefulset.apps/rabbitmq created configmap/rabbitmq-enabled-plugins created service/rabbitmq created deployment.apps/order-service created service/order-service created deployment.apps/product-service created service/product-service created deployment.apps/store-front created service/store-front created
명령을 사용하여 Pod를 확인하여 배포가 성공적인지 확인합니다
kubectl get pods
.kubectl get pods
애플리케이션 테스트
애플리케이션이 실행되면 애플리케이션 프런트 엔드를 인터넷에 공개하는 Kubernetes 서비스가 만들어집니다. 이 프로세스를 완료하는 데 몇 분이 걸릴 수 있습니다.
명령줄
--watch
인수와 함께kubectl get service
명령을 사용하여 진행률을 모니터링합니다.kubectl get service store-front --watch
처음에는
store-front
서비스의EXTERNAL-IP
가<pending>
으로 표시됩니다.store-front LoadBalancer 10.0.34.242 <pending> 80:30676/TCP 5s
EXTERNAL-IP
주소가<pending>
에서 공용 IP 주소로 변경되면CTRL-C
를 사용하여kubectl
감시 프로세스를 중지합니다.다음 예제 출력은 서비스에 할당된 유효한 공용 IP 주소를 보여줍니다.
store-front LoadBalancer 10.0.34.242 52.179.23.131 80:30676/TCP 67s
웹 브라우저를 열고 서비스의 외부 IP 주소(
http://<external-ip>
)로 이동하여 실행 중인 애플리케이션을 확인합니다.
애플리케이션이 로드되지 않는 경우 이미지 레지스트리의 권한 부여 문제가 있을 수 있습니다. 컨테이너 상태를 보려면 kubectl get pods
명령을 사용합니다. 컨테이너 이미지를 풀할 수 없는 경우 Azure Kubernetes Service의 Azure Container Registry를 사용하여 인증을 참조하세요.
Azure Portal
Azure Portal로 이동하여 배포 정보를 찾습니다.
AKS 클러스터 리소스로 이동합니다.
서비스 메뉴의 Kubernetes 리소스 아래에서 서비스 및 수신을 선택합니다.
서비스에 대한 열에 표시된 외부 IP를 복사합니다
store-front
.브라우저에 IP를 붙여넣어 스토어 페이지를 방문합니다.
리소스 정리
애플리케이션 기능의 유효성을 검사했으므로 이제 애플리케이션에서 클러스터를 제거할 수 있습니다. 다음 자습서에서 애플리케이션을 다시 배포할 예정입니다.
kubectl delete
명령을 사용하여 컨테이너 인스턴스와 리소스를 중지하고 제거합니다.kubectl delete -f aks-store-quickstart.yaml
명령을 사용하여
kubectl get pods
모든 애플리케이션 Pod가 제거되었는지 확인합니다.kubectl get pods
다음 단계
이 자습서에서는 샘플 Azure 애플리케이션을 AKS의 Kubernetes 클러스터에 배포했습니다. 다음 방법에 대해 알아보았습니다.
- Kubernetes 매니페스트 파일을 업데이트합니다.
- Kubernetes에서 애플리케이션을 실행합니다.
- 애플리케이션을 테스트합니다.
다음 자습서에서는 Kubernetes의 상태 저장 워크로드에 PaaS 서비스를 사용하는 방법을 알아봅니다.
Azure Kubernetes Service