AKS에서 워크로드 배포
AKS 클러스터를 만들고 kubectl과 Helm 차트를 사용해 다중 컨테이너 애플리케이션을 배포하며, Azure Load Balancer 서비스로 외부에 노출합니다.
AKS에서 워크로드 배포은(는) CoddyKit의 무료 Cloud & IT Cert Prep 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cloud & IT Cert Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cloud & IT Cert Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
Azure Kubernetes Service란?
Azure Kubernetes Service (AKS)는 Microsoft가 제어 플레인(API 서버, etcd, 스케줄러)을 무료로 운영하고 유지 관리하는 관리형 Kubernetes 서비스입니다. 사용자는 작업자 노드(VM)에 대해서만 비용을 지불합니다. AKS는 Kubernetes 버전 업그레이드, 노드 OS 패치, 제어 플레인 확장, Azure 네트워킹·스토리지·ID와의 통합을 처리합니다. 따라서 프로덕션에서 Kubernetes를 운영하는 데 필요한 관리 부담이 크게 줄어듭니다.
AKS Cluster 만들기
az aks create를 사용하고 노드 수, VM 크기, 네트워킹 옵션을 지정하여 AKS Cluster를 만드세요. AKS는 VM, 관리 디스크, NIC, LoadBalancer를 포함하는 노드 resource group을 자동으로 만듭니다. 권장 네트워킹 모드는 Azure CNI입니다. 각 파드에 실제 VNet IP 주소가 할당되므로 NAT 없이 다른 Azure 서비스와 직접 연결할 수 있습니다.
# Create an AKS cluster with 3 nodes
az aks create \
--name myAKSCluster \
--resource-group MyRG \
--location eastus \
--node-count 3 \
--node-vm-size Standard_D2s_v3 \
--enable-managed-identity \
--attach-acr mycontainerregistry \
--network-plugin azure \
--generate-ssh-keys
# Get kubectl credentials
az aks get-credentials --name myAKSCluster --resource-group MyRG노드 풀
AKS Cluster에는 동일한 구성을 사용하는 VM 그룹인 노드 풀을 여러 개 둘 수 있습니다. 시스템 노드 풀은 중요한 Kubernetes 시스템 구성 요소(kube-system 파드)를 실행합니다. 사용자 노드 풀은 애플리케이션 워크로드를 실행합니다. 풀을 분리하면 VM SKU를 조합할 수 있습니다. 예를 들어 웹 앱에는 범용 풀을, ML 워크로드에는 GPU 풀을 사용하고 각 풀을 독립적으로 확장할 수 있습니다.
# Add a GPU node pool for ML workloads
az aks nodepool add \
--cluster-name myAKSCluster \
--resource-group MyRG \
--name gpupool \
--node-count 2 \
--node-vm-size Standard_NC6s_v3 \
--node-taints sku=gpu:NoSchedule
# List node pools
az aks nodepool list \
--cluster-name myAKSCluster \
--resource-group MyRG \
-o table다중 Container 애플리케이션 배포
각 계층에 대해 별도의 Kubernetes 매니페스트 파일을 작성하고 kubectl apply로 적용하여 다중 계층 애플리케이션을 AKS에 배포하세요. 일반적인 배포에는 웹 계층용 배포, API 계층용 배포, 두 계층을 연결하는 서비스, 환경 구성을 위한 ConfigMap, 그리고 단일 호스트 이름을 통해 앱을 외부에 노출하는 Ingress resource가 포함됩니다.
# Apply all manifests in a directory
kubectl apply -f k8s/
# Or apply individual files
kubectl apply -f frontend-deployment.yaml
kubectl apply -f frontend-service.yaml
kubectl apply -f api-deployment.yaml
kubectl apply -f api-service.yaml
kubectl apply -f ingress.yaml
# Watch rollout status
kubectl rollout status deployment/frontend
kubectl rollout status deployment/apiIngress 및 Application Gateway
Ingress resource는 호스트 이름과 URL 경로를 백엔드 서비스에 매핑하는 HTTP 라우팅 규칙을 정의합니다. 서비스마다 외부 IP 하나가 필요한 LoadBalancer 서비스와 달리, 단일 Ingress 컨트롤러가 모든 외부 HTTP 트래픽을 처리하고 규칙에 따라 라우팅합니다. AKS에서는 NGINX Ingress Controller 또는 Application Gateway Ingress Controller (AGIC)를 사용하여 TLS를 종료하고 여러 서비스로 트래픽을 라우팅할 수 있습니다.
# Ingress routing traffic to two services by path
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
tls:
- hosts: [myapp.contoso.com]
secretName: myapp-tls
rules:
- host: myapp.contoso.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service: {name: api-svc, port: {number: 80}}
- path: /
pathType: Prefix
backend:
service: {name: frontend-svc, port: {number: 80}}애플리케이션 패키징을 위한 Helm 차트
Helm은 Kubernetes용 패키지 관리자입니다. 차트는 애플리케이션에 필요한 모든 Kubernetes 매니페스트(배포, 서비스, Ingress, ConfigMaps)를 하나의 버전 관리 및 매개 변수화된 패키지로 묶습니다. helm install은 환경별 값을 사용하여 차트를 배포합니다. Artifact Hub의 Helm 저장소에는 일반적인 인프라(NGINX, cert-manager, Prometheus, Redis)에 사용할 수 있도록 미리 만들어진 차트가 수천 개 호스팅되어 있습니다.
# Add the NGINX Ingress Controller chart repo
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
# Install NGINX Ingress Controller
helm install ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
--create-namespace \
--set controller.replicaCount=2
# Install your own app chart with custom values
helm install myapp ./charts/myapp -f values-prod.yaml롤링 업데이트 및 롤백
Container 이미지 태그를 변경하여 배포를 업데이트하면 Kubernetes가 롤링 업데이트를 수행합니다. 업데이트된 이미지로 새 파드를 만들고 기존 파드를 점진적으로 종료하므로 전체 과정에서 애플리케이션을 사용할 수 있습니다. 새 버전에 문제가 있으면 kubectl rollout undo를 사용하여 즉시 이전 리비전으로 롤백할 수 있습니다. Kubernetes는 각 배포에 대해 구성 가능한 리비전 기록을 유지합니다.
# Update the image to a new version
kubectl set image deployment/myapp \
myapp=mycontainerregistry.azurecr.io/myapp:v2.0
# Watch the rollout progress
kubectl rollout status deployment/myapp
# View rollout history
kubectl rollout history deployment/myapp
# Rollback to the previous version
kubectl rollout undo deployment/myapp
# Rollback to a specific revision
kubectl rollout undo deployment/myapp --to-revision=2Cluster Autoscaler
Cluster Autoscaler는 대기 중인 파드 스케줄링과 노드 사용률을 기준으로 AKS 노드 풀의 작업자 노드를 자동으로 추가하거나 제거합니다. 모든 노드가 가득 차 파드를 스케줄링할 수 없으면 Cluster Autoscaler가 새 노드를 프로비저닝합니다. 노드의 사용률이 낮고 파드를 통합할 수 있으면 해당 노드의 파드를 비우고 노드를 제거합니다. 이는 Horizontal Pod Autoscaler를 보완합니다. HPA는 파드를 확장하고 Cluster Autoscaler는 노드를 확장합니다.
# Enable Cluster Autoscaler on the default node pool
az aks update \
--name myAKSCluster \
--resource-group MyRG \
--enable-cluster-autoscaler \
--min-count 2 \
--max-count 10
# Update autoscaler bounds on a specific node pool
az aks nodepool update \
--cluster-name myAKSCluster \
--resource-group MyRG \
--name nodepool1 \
--enable-cluster-autoscaler \
--min-count 3 \
--max-count 20Azure Monitor를 사용한 AKS 모니터링
Azure Monitor Container Insights를 사용하도록 설정하면 타사 모니터링 도구를 배포하지 않고도 AKS Cluster에서 로그와 메트릭을 수집할 수 있습니다. Container Insights는 Cluster 상태, 노드 및 파드의 CPU/메모리, Container 로그, 실시간 파드 스트리밍을 위한 미리 작성된 대시보드를 제공합니다. 또한 사용자 지정 메트릭 수집을 위해 Prometheus와 통합되며, Log Analytics에서 KQL을 사용하여 모든 데이터를 쿼리할 수 있습니다.
# Enable Azure Monitor Container Insights on AKS
az aks enable-addons \
--addons monitoring \
--name myAKSCluster \
--resource-group MyRG \
--workspace-resource-id /subscriptions/.../workspaces/MyLogAnalytics
# Stream live logs from a running pod
kubectl logs -f deployment/myapp -c myapp
# Query pod resource usage
kubectl top pods --namespace defaultAKS RBAC 및 Azure Active Directory
AKS를 Microsoft Entra ID와 통합하면 Azure AD 사용자 및 Group을 Kubernetes RBAC에 사용할 수 있습니다. 별도의 Kubernetes 사용자 계정을 관리하는 대신 Entra ID Object ID에 ClusterRole 또는 Role 바인딩을 할당합니다. 개발자가 kubectl을 실행하면 AKS가 Entra ID 토큰을 검증합니다. 이를 통해 중앙 집중식 ID 관리를 구현하고 조건부 액세스 및 MFA 정책과 통합할 수 있습니다.
# Enable Entra ID RBAC on an AKS cluster
az aks update \
--name myAKSCluster \
--resource-group MyRG \
--enable-azure-rbac
# Assign a built-in AKS role to an Entra group
az role assignment create \
--role 'Azure Kubernetes Service RBAC Reader' \
--assignee '<Entra-Group-Object-ID>' \
--scope /subscriptions/.../resourceGroups/MyRG/providers/Microsoft.ContainerService/managedClusters/myAKSCluster파드 수준 보안을 위한 네트워크 정책
네트워크 정책은 서로 통신할 수 있는 파드를 제어하는 Kubernetes resource입니다. 기본적으로 Cluster의 모든 파드는 다른 모든 파드에 연결할 수 있지만, 네트워크 정책은 파드 수준에서 방화벽 역할을 합니다. AKS에서는 Azure 네트워크 정책 또는 Calico를 사용하도록 설정하여 정책을 적용할 수 있습니다. 일반적인 패턴은 파드 간 모든 트래픽을 차단하는 기본 거부 정책을 먼저 적용한 다음, 앱에 필요한 특정 경로에 대해 명시적인 허용 정책을 추가하는 것입니다.
# Default deny all ingress to pods in namespace
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
namespace: production
spec:
podSelector: {} # Matches all pods
policyTypes:
- Ingress
# Allow API pods to receive from frontend pods only
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: api-allow-frontend
spec:
podSelector: {matchLabels: {app: api}}
ingress:
- from:
- podSelector: {matchLabels: {app: frontend}}빠른 확인
이 lesson에서 다룬 Microsoft Azure Fundamentals (AZ-900) 개념에 대한 이해도를 확인해 보세요.
lesson 요약
이 lesson에서는 다음을 배웠습니다. AKS는 Microsoft가 제어 플레인을 운영하는 관리형 Kubernetes 서비스이고, Helm 차트는 반복 가능한 배포를 위해 여러 resource로 구성된 Kubernetes 애플리케이션을 패키징하며, Cluster Autoscaler는 파드 스케줄링 수요에 따라 노드를 동적으로 추가하고 제거합니다. 다음으로는 Azure Functions의 트리거와 바인딩을 살펴보겠습니다.
자주 묻는 질문
“AKS에서 워크로드 배포” 강의는 무료인가요?
네 — “AKS에서 워크로드 배포” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cloud & IT Cert Prep 강의 전체를 잠금 해제할 수 있습니다. Cloud & IT Cert Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
“AKS에서 워크로드 배포”에서 뭘 배우나요?
AKS 클러스터를 만들고 kubectl과 Helm 차트를 사용해 다중 컨테이너 애플리케이션을 배포하며, Azure Load Balancer 서비스로 외부에 노출합니다. 브라우저에서 직접 실행하는 실습 코드로 Cloud & IT Cert Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Cloud & IT Cert Prep을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Cloud & IT Cert Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“AKS에서 워크로드 배포” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Cloud & IT Cert Prep 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Cloud & IT Cert Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.