0Pricing
Cloud & IT Cert Prep · 강의

Azure를 위한 Kubernetes 개념

파드, 배포, 서비스, 네임스페이스 등 Kubernetes의 핵심 구성을 살펴보고, AKS가 제어 평면을 대신 관리하는 방식을 이해합니다.

Azure를 위한 Kubernetes 개념은(는) CoddyKit의 무료 Cloud & IT Cert Prep 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cloud & IT Cert Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cloud & IT Cert Prep 강의에는 총 4개의 강의가 포함되어 있습니다.

Kubernetes란?

Kubernetes(K8s)는 원래 Google에서 개발한 오픈 소스 컨테이너 오케스트레이션 플랫폼입니다. 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화합니다. 컨테이너를 수동으로 실행하는 대신 YAML 매니페스트에 애플리케이션의 desired state를 선언하면 Kubernetes가 실제 상태를 desired state와 일치시키도록 지속적으로 작업합니다. 여기에는 실패한 컨테이너 재시작, 정상 Node에 workload 예약, replica 확장이 포함됩니다.

클러스터 아키텍처: Control Plane 및 Node

Kubernetes 클러스터는 control plane과 worker Node로 구성됩니다. Control plane에는 API 서버(모든 kubectl 명령의 진입점), etcd(분산 state store), scheduler(Pod를 Node에 할당), controller manager(desired state 유지)가 포함됩니다. Worker Node에서는 kubelet(Node 에이전트), kube-proxy(Network 규칙), 컨테이너 런타임(containerd)이 실행됩니다. AKS에서는 Microsoft가 control plane을 관리하므로 사용자는 worker Node만 관리하면 됩니다.

# Kubernetes control plane components
# kube-apiserver    - REST API for all cluster operations
# etcd              - Distributed key-value store (cluster state)
# kube-scheduler    - Assigns pending pods to nodes
# kube-controller-manager  - Runs reconciliation controllers

# Worker node components
# kubelet           - Node agent, ensures containers run
# kube-proxy        - Network routing for services
# containerd        - Container runtime (runs containers)

Pod: 배포 가능한 가장 작은 단위

Pod는 Kubernetes에서 배포 가능한 가장 작은 단위입니다. Pod는 Network 네임스페이스(동일한 IP 주소), 스토리지 볼륨, lifetime을 공유하는 하나 이상의 컨테이너를 묶습니다. Pod 내부의 컨테이너는 localhost를 통해 통신합니다. Pod는 임시적이므로 장애가 발생하면 서로 다른 IP를 가진 새 Pod로 교체됩니다. 일반적으로 Pod를 직접 생성하지 않고 Pod를 관리하는 상위 수준의 Resource를 생성합니다.

# Simple pod manifest
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp
    image: mycontainerregistry.azurecr.io/myapp:v1.0
    ports:
    - containerPort: 80
    resources:
      requests:
        cpu: '100m'
        memory: '128Mi'
      limits:
        cpu: '500m'
        memory: '512Mi'

Deployment: Replica Set 관리

Deployment는 Kubernetes에서 상태 비저장 애플리케이션을 실행하는 표준 방법입니다. Deployment는 동일한 Pod replica의 원하는 수를 유지하는 ReplicaSet을 생성하고 관리합니다. Deployment는 기존 Pod를 새 Pod로 점진적으로 교체하는 rolling 업데이트와 이전 버전으로 되돌리는 롤백을 지원합니다. 원하는 Pod template과 replica 수를 설명하면 나머지는 Kubernetes가 처리합니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1       # Create 1 extra pod during update
      maxUnavailable: 0 # Never reduce below desired count
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: mycontainerregistry.azurecr.io/myapp:v1.0
        ports:
        - containerPort: 80

Service: 안정적인 Network 엔드포인트

Pod는 임시적이고 IP가 변경되므로 Service는 일치하는 Pod 전체에 트래픽을 load balancing하는 안정적인 Network 엔드포인트를 제공합니다. Service는 label selector를 사용하여 Pod를 찾습니다. Service 유형은 다음과 같습니다. ClusterIP(내부 전용, 기본값), NodePort(모든 Node에 포트를 노출), LoadBalancer(public IP를 사용하는 Azure Load Balancer를 프로비저닝), ExternalName(외부 Service에 대한 DNS 별칭).

# Service exposing myapp pods externally
apiVersion: v1
kind: Service
metadata:
  name: myapp-svc
spec:
  type: LoadBalancer  # Creates Azure Load Balancer
  selector:
    app: myapp        # Routes traffic to pods with this label
  ports:
  - port: 80          # Service port
    targetPort: 80    # Pod/container port

# After creation, check the EXTERNAL-IP (Azure LB public IP)
# kubectl get service myapp-svc

다중 테넌시를 위한 Namespace

Namespace는 하나의 Kubernetes 클러스터를 여러 virtual 클러스터로 분할합니다. 서로 다른 Namespace의 Resource는 이름을 기준으로 격리되므로 development와 production Namespace에 각각 myapp Deployment를 동시에 둘 수 있습니다. Namespace는 팀이나 환경에 RBAC, Resource 할당량, Network 정책을 적용하는 기본 단위입니다. 기본 Namespace에는 default, kube-system, kube-public이 포함됩니다.

# Create a namespace for the dev team
kubectl create namespace dev-team

# Deploy into a specific namespace
kubectl apply -f deployment.yaml --namespace dev-team

# List all resources in a namespace
kubectl get all --namespace dev-team

# Set default namespace for current context
kubectl config set-context --current --namespace dev-team

ConfigMaps 및 Secrets

ConfigMaps는 민감하지 않은 구성 Data를 키-값 쌍 또는 파일로 저장하고, 이를 환경 변수나 볼륨 Mount로 Pod에 주입합니다. Secrets는 민감한 Data(암호, 토큰)를 base64로 인코딩하여 저장합니다(기본적으로 암호화되지는 않으므로 저장 시 실제 암호화에는 Azure Key Vault Provider for Secrets Store CSI Driver를 사용하세요). 두 Resource 모두 Namespace 범위이며 Pod 사양에서 이름으로 참조합니다.

# Create a ConfigMap from literal values
kubectl create configmap app-config \
  --from-literal=APP_ENV=production \
  --from-literal=LOG_LEVEL=info

# Create a Secret
kubectl create secret generic db-secret \
  --from-literal=DB_PASSWORD='super-secret'

# Reference in a pod spec
# env:
# - name: APP_ENV
#   valueFrom:
#     configMapKeyRef:
#       name: app-config
#       key: APP_ENV
# - name: DB_PASSWORD
#   valueFrom:
#     secretKeyRef:
#       name: db-secret
#       key: DB_PASSWORD

Azure의 Persistent Volume

상태 저장 애플리케이션에는 개별 Pod보다 오래 유지되는 스토리지가 필요합니다. Kubernetes는 PersistentVolumes(PV)와 PersistentVolumeClaims(PVC)를 사용하여 스토리지와 Pod lifetime을 분리합니다. AKS에서는 기본 제공 Azure Disk 및 Azure Files 스토리지 클래스가 PVC 생성 시 관리형 디스크와 파일 공유를 자동으로 프로비저닝합니다. Azure Disk는 단일 Pod 액세스용이며 Azure Files는 여러 Pod의 동시 읽기/쓰기를 지원합니다.

# PersistentVolumeClaim using Azure Disk
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-disk-pvc
spec:
  accessModes:
  - ReadWriteOnce   # Single-node read/write (Azure Disk)
  storageClassName: managed-csi
  resources:
    requests:
      storage: 10Gi

# Mount in a pod
# volumes:
# - name: data
#   persistentVolumeClaim:
#     claimName: my-disk-pvc
# volumeMounts:
# - name: data
#   mountPath: /data

Horizontal Pod Autoscaler

Horizontal Pod Autoscaler(HPA)는 관찰된 CPU/메모리 Utilization 또는 사용자 지정 metric을 기준으로 Deployment의 Pod replica 수를 자동으로 조정합니다. HPA controller는 15초마다 metrics 서버를 조회하고 Utilization을 target에 가깝게 유지하도록 replica를 늘리거나 줄입니다. 과도한 확장을 방지하는 안전장치로 최소 및 최대 replica 수를 설정합니다.

# Create an HPA targeting 50% CPU utilisation
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp
  minReplicas: 2
  maxReplicas: 20
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

상태 확인: Liveness 및 Readiness Probe

Kubernetes는 probe를 사용하여 컨테이너 상태를 모니터링합니다. liveness probe는 컨테이너가 계속 실행 중인지 확인하며, 실패하면 Kubernetes가 컨테이너를 다시 시작합니다. readiness probe는 컨테이너가 트래픽을 처리할 준비가 되었는지 확인하며, 실패하면 컨테이너를 다시 시작하지 않고 Service의 load balancing 대상에서 Pod를 제거합니다. startup probe는 애플리케이션이 초기화될 때까지 다른 probe를 지연시켜 느린 시작 중 조기 재시작을 방지합니다.

livenessProbe:
  httpGet:
    path: /health
    port: 80
  initialDelaySeconds: 15
  periodSeconds: 20
  failureThreshold: 3

readinessProbe:
  httpGet:
    path: /ready
    port: 80
  initialDelaySeconds: 5
  periodSeconds: 10
  failureThreshold: 3

startupProbe:
  httpGet:
    path: /startup
    port: 80
  failureThreshold: 30
  periodSeconds: 10  # Allow 300s for slow startup

Resource 요청 및 제한

Kubernetes의 모든 컨테이너는 Resource 요청(scheduler가 사용하는 최소 보장 할당량)과 제한(초과할 수 있는 최대 허용량)을 선언해야 합니다. 제한을 초과하면 컨테이너가 throttling되거나 종료됩니다. CPU 요청은 millicore(m) 단위이며, 1000m = CPU 코어 1개입니다. 요청과 제한을 정확하게 설정하면 noisy neighbor 문제를 방지하고, Resource를 과도하게 할당하지 않으면서 scheduler가 Node에 Pod를 효율적으로 배치할 수 있습니다.

resources:
  requests:
    cpu: '250m'      # 0.25 CPU core guaranteed
    memory: '256Mi'  # 256 MiB guaranteed
  limits:
    cpu: '1'         # Max 1 CPU core
    memory: '512Mi'  # Max 512 MiB (OOMKilled if exceeded)

빠른 확인

이 lesson에서 다룬 Microsoft Azure Fundamentals (AZ-900) 개념에 대한 이해도를 확인해 보세요.

lesson 요약

이 lesson에서는 다음을 배웠습니다. 파드는 네트워크와 스토리지를 공유하는 가장 작은 배포 단위이고, 배포는 롤링 업데이트를 지원하는 무상태 복제본 집합을 관리하며, 서비스는 일시적으로 생성되고 사라지는 파드 전체에 트래픽을 분산하는 안정적인 엔드포인트를 제공합니다. 다음으로는 AKS에 워크로드를 배포하는 방법을 살펴보겠습니다.

자주 묻는 질문

“Azure를 위한 Kubernetes 개념” 강의는 무료인가요?

네 — “Azure를 위한 Kubernetes 개념” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cloud & IT Cert Prep 강의 전체를 잠금 해제할 수 있습니다. Cloud & IT Cert Prep 강의에는 총 4개의 강의가 포함되어 있습니다.

“Azure를 위한 Kubernetes 개념”에서 뭘 배우나요?

파드, 배포, 서비스, 네임스페이스 등 Kubernetes의 핵심 구성을 살펴보고, AKS가 제어 평면을 대신 관리하는 방식을 이해합니다. 브라우저에서 직접 실행하는 실습 코드로 Cloud & IT Cert Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Cloud & IT Cert Prep을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Cloud & IT Cert Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“Azure를 위한 Kubernetes 개념” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Cloud & IT Cert Prep 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Cloud & IT Cert Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Azure Container Registry
  2. Azure Container Instances
  3. Azure를 위한 Kubernetes 개념
  4. AKS에서 워크로드 배포
← Cloud & IT Cert Prep(으)로 돌아가기