연습 - AKS에 배포할 GitHub 작업 만들기
- 10분
이 연습에서는 다음 작업을 완료합니다.
- 배포 작업을 포함하도록 기존 GitHub 작업을 개선합니다.
- 변경 내용이 AKS(Azure Kubernetes Service) 클러스터에 배포되는지 확인합니다.
- 배포를 되돌립니다.
제품 서비스에 대한 Kubernetes 매니페스트 업데이트
eShop 제품 서비스의 새 버전을 배포하려면 이전 단원에서 사용한 ACR(Azure Container Registry)을 가리키도록 product.yml 파일을 편집합니다.
포크된 리포지토리에서 code tab을 선택한 다음, product.yml 파일을 선택합니다.
파일을 편집하려면 편집 아이콘(연필)을 선택합니다.
줄을 편집합니다.
containers: - image: [replace with your ACR name].azurecr.io/productservice:latest[replace with your ACR name]ACR의 이름(예: acseshop186748394)으로 바꿉니다.오른쪽 위에서 변경 내용 커밋을 선택한 다음 대화 상자에서 변경 내용 커밋을 선택합니다.
배포 작업 만들기
YAML 코드는 새 이미지를 배포하는 한 단계가 있는 GitHub 단계를 추가합니다. ubuntu-latest 실행기 단계는 다음과 같습니다.
- 이 파일이 있는 리포지토리를 확인합니다.
- Azure 로그인은 서비스 주체 자격 증명을 사용하여 Azure에 로그인합니다.
- 비대화형 로그인에 kubelogin을 설정 하면 Azure 인증을 위해 kubeconfig 파일이 구성됩니다.
- K8s 컨텍스트 가져오기 설정 컨텍스트는 실행기 .kube/config 파일에서 AKS(Azure Kubernetes Service) 자격 증명을 설정합니다.
- 이전 단계에서 빌드된 이미지와 이전에 편집한 Kubernetes 매니페스트 파일을 사용하여 애플리케이션을 AKS에 배포합니다.
다음 단계를 완료하여 쿠폰 서비스를 배포하는 GitHub 작업을 만듭니다.
포크된 리포지토리에서 code tab를 클릭한 후, .github/workflows 탭을 선택합니다.
azure-kubernetes-service.yml를 선택합니다.
파일을 편집하려면 편집 아이콘(연필)을 선택합니다.
파일 맨 아래에 다음 YAML 코드를 편집기에 붙여넣습니다.
deploy: permissions: actions: read contents: read id-token: write runs-on: ubuntu-latest needs: [buildImage] steps: # Checks out the repository this file is in - uses: actions/checkout@v3 # Logs in with your Azure credentials - name: Azure login uses: azure/login@v1.4.6 with: creds: '${{ secrets.AZURE_CREDENTIALS }}' # Use kubelogin to configure your kubeconfig for Azure auth - name: Set up kubelogin for non-interactive login uses: azure/use-kubelogin@v1 with: kubelogin-version: 'v0.0.25' # Retrieves your Azure Kubernetes Service cluster's kubeconfig file - name: Get K8s context uses: azure/aks-set-context@v3 with: resource-group: ${{ env.RESOURCE_GROUP }} cluster-name: ${{ env.CLUSTER_NAME }} admin: 'false' use-kubelogin: 'true' # Deploys application based on given manifest file - name: Deploys application uses: Azure/k8s-deploy@v4 with: action: deploy manifests: ${{ env.DEPLOYMENT_MANIFEST_PATH }} images: | ${{ env.AZURE_CONTAINER_REGISTRY }}.azurecr.io/${{ env.CONTAINER_NAME }}:${{ github.sha }} pull-images: false오른쪽 위에서 변경 내용 커밋을 선택한 다음 대화 상자에서 변경 내용 커밋을 선택합니다.
배포를 시작하다
파일을 업데이트 azure-kubernetes-service.yml 하고 변경 내용을 커밋하면 다른 배포가 자동으로 트리거됩니다. 이제 코드 변경을 통해 다른 배포를 트리거하는 방법을 알아보세요.
마케팅 팀이 카탈로그에 추가하려는 새 제품이 있습니다.
포크된 리포지토리의 code tab에서 Products 폴더를 선택합니다.
Data 폴더를 선택합니다.
ProductDataContext.c 파일을 선택합니다.
파일을 편집하려면 편집 아이콘(연필)을 선택합니다.
파일 아래쪽에서 제품 배열에 새 제품을 추가합니다.
new Product { Name = "Camping Tent 2", Description = "This updated tent is improved and cheaper, perfect for your next trip.", Price = 79.99m, ImageUrl = "product9.png" },오른쪽 위에서 변경 내용 커밋을 선택한 다음 대화 상자에서 변경 내용 커밋을 선택합니다.
배포 모니터링
배포 진행률을 모니터링하려면 탭을 Actions 선택합니다.
워크플로에 대해 나열된 Build and deploy an app to AKS 가장 최근 워크플로 실행을 선택합니다. 실행의 이름은 이전 단계에서 사용한 커밋 메시지입니다.
deploy 이 워크플로 실행에 대한 세부 정보를 보려면 작업을 선택합니다.
터미널에서 다음 명령을 실행하여 AKS 클러스터의 쿠폰 서비스 Pod를 모니터링합니다.
--selector플래그는 쿠폰 서비스의 pod로만 목록을 필터링하고,--watch플래그는kubectl가 변경 사항을 감시하도록 지시합니다.kubectl get pods --selector=app=productservice --watch배포하는 동안 다음과 같은 출력의 변형이 나타납니다.
NAME READY STATUS RESTARTS AGE productservice-7979d4c47-xlcrr 1/1 Running 0 17m productservice-ff98b6d8d-7wmsh 0/1 Pending 0 0s productservice-ff98b6d8d-7wmsh 0/1 Pending 0 0s productservice-ff98b6d8d-7wmsh 0/1 ContainerCreating 0 0s productservice-ff98b6d8d-7wmsh 1/1 Running 0 4s productservice-7979d4c47-xlcrr 1/1 Terminating 0 19m이전 출력에서는 새 productservice Pod가 생성됩니다. 새 Pod가 준비되면 이전 Pod가 종료됩니다. 이 프로세스를 통해 새 버전으로 최대한 원활하게 전환할 수 있습니다.
앱 확인
다음 단계를 완료하여 앱이 여전히 작동하는지 확인합니다.
터미널에서 다음 명령을 실행하여 배포된 eShop을 봅니다.
echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"이 명령은 웹앱의 외부 IP 주소를 반환합니다. Ctrl 키를 누른 채 링크를 선택하여 새 탭에서 앱을 엽니다.
제품 페이지로 이동하여 페이지 아래쪽에 나열된 새 텐트를 봅니다.
배포 롤백
프로덕션 문제에 대한 일반적인 완화 방법 중 하나는 알려진 좋은 배포로 되돌리는 것입니다. Kubernetes는 이전 버전의 앱으로 롤백하는 데 사용할 수 있는 배포 기록을 유지 관리합니다.
터미널에서 이 명령을 실행하여 웹 사이트에 방금 추가한 새 텐트를 제거합니다.
kubectl rollout undo deployment/productservice
이 콘솔 메시지가 표시됩니다.
deployment.apps/productservice rolled back
브라우저에서 제품 페이지를 새로 고치면 새 텐트가 더 이상 나열되지 않습니다.
비고
실제 시나리오에서는 빌드의 아티팩트를 여러 환경에 배포합니다. 예를 들어 개발, 테스트 및 스테이징 환경이 있을 수 있습니다. PR 병합과 같은 이벤트를 통해 배포 워크플로를 트리거할 수 있습니다. 관련자의 PR 승인과 같은 품질 또는 승인 게이트를 추가하여 예기치 않은 프로덕션 배포를 방지할 수 있습니다.
