카테고리 없음

AKS에서 Pod, Deployment, Service 개념과 동작 방식

idea9329 2025. 2. 18. 13:09
반응형

 

Azure Kubernetes Service(AKS)에서 Pod, Deployment, Service는 Kubernetes의 핵심 리소스로, 애플리케이션을 배포하고 네트워크를 구성하는 데 사용됩니다.


1. Pod란? (Kubernetes의 최소 실행 단위)

 Pod 개념

  • Pod 하나 이상의 컨테이너를 포함하는 Kubernetes의 최소 실행 단위
  • 일반적으로 하나의 Pod에는 하나의 컨테이너만 포함되지만, Sidecar 패턴을 사용해 여러 개의 컨테이너를 포함할 수도 있음
  • 같은 Pod 내 컨테이너들은 localhost로 서로 통신 가능
  • Pod는 영구적인 존재가 아니며, 실패 시 다시 생성됨 (Ephemeral)

📌 Pod 예제 (YAML)

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx
    ports:
    - containerPort: 80

🔹 Pod는 직접 생성하지 않고 보통 Deployment를 통해 관리됨 (바로 생성하면 관리 어려움)


2. Deployment란? (Pod의 배포 및 관리)

 Deployment 개념

  • Deployment는 Pod의 생성, 업데이트, 삭제를 관리하는 컨트롤러
  • ReplicaSet을 통해 원하는 개수(Replicas)의 Pod를 유지
  • 배포 시 Rolling Update  Rollback 기능을 제공

📌 Deployment 예제 (YAML)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3  # 3개의 Pod 유지
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: nginx
        ports:
        - containerPort: 80

🔹 Deployment는 항상 ReplicaSet을 관리하며, ReplicaSet이 Pod를 생성

 Deployment 동작 방식

  1. kubectl apply -f deployment.yaml 실행
  2. Deployment → ReplicaSet 생성 → 지정된 수만큼 Pod 생성
  3. Deployment가 상태를 유지하며, Pod가 실패하면 자동으로 재생성
  4. 새로운 버전 배포 시 Rolling Update 방식으로 점진적 배포

3. Service란? (Pod 간 네트워크 및 외부 연결)

 Service 개념

  • Pod는 동적으로 생성/삭제되므로, 직접 접근하면 IP가 변경됨
  • Service는 Pod의 IP 변경과 무관하게 트래픽을 안정적으로 전달하는 네트워크 엔드포인트 역할
  • LoadBalancer, ClusterIP, NodePort 등의 타입이 존재

📌 Service 예제 (YAML)

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app  # 같은 라벨을 가진 Pod로 트래픽 전달
  ports:
    - protocol: TCP
      port: 80    # Service에서 노출하는 포트
      targetPort: 80  # Pod에서 사용 중인 포트
  type: ClusterIP  # 기본 타입 (내부에서만 접근 가능)

 Service 동작 방식

  1. Service는 Label Selector를 사용하여 Pod를 찾아 트래픽을 전달
  2. 내부적으로 Kubernetes Proxy(IPTables 또는 IPVS)를 이용해 Pod 로드 밸런싱
  3. DNS 서비스(Kube-DNS 또는 CoreDNS)를 이용해 서비스명 기반 라우팅 지원

4. Service의 주요 타입

Service Type설명사용 예

ClusterIP (기본값) 클러스터 내부에서만 접근 가능 마이크로서비스 간 내부 통신
NodePort 모든 노드의 특정 포트에서 접근 가능 클러스터 외부에서 직접 접근
LoadBalancer Azure Load Balancer를 통해 외부에서 접근 가능 퍼블릭 서비스 운영
ExternalName DNS 이름을 내부 서비스로 매핑 외부 API 호출 시 사용

📌 LoadBalancer Service 예제

apiVersion: v1
kind: Service
metadata:
  name: my-loadbalancer
spec:
  type: LoadBalancer  # Azure Load Balancer 생성됨
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

🔹 Azure 환경에서는 자동으로 Azure Load Balancer가 생성됨
🔹 kubectl get svc 실행하면 EXTERNAL-IP가 부여됨


5. Pod, Deployment, Service의 관계

 전체적인 구조

Client → LoadBalancer Service → NodePort Service → ClusterIP Service → Deployment → ReplicaSet → Pod
  • Deployment가 Pod를 관리
  • Service가 Pod 간 네트워크 및 외부 트래픽을 관리

📌 종합적인 예제 (Deployment + Service)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: nginx
        ports:
        - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer
  • kubectl apply -f example.yaml 실행 시
    1. Deployment가 3개의 Pod를 생성
    2. Service가 Pod를 찾아 트래픽 전달
    3. Azure Load Balancer가 외부에서 접근 가능하도록 설정됨

6. AKS에서 추가적인 고려 사항

 Pod 자동 확장 (HPA)

  • Horizontal Pod Autoscaler (HPA)를 사용하여 Pod 개수를 자동으로 조절 가능
  • 설정 예제:
    kubectl autoscale deployment my-deployment --cpu-percent=50 --min=2 --max=10
  • CPU 사용률이 50%를 초과하면 Pod 개수가 자동 증가

 Pod 네트워크 정책 (Network Policy)

  • 특정 네트워크 트래픽만 허용하도록 NetworkPolicy를 적용할 수 있음
  • 예제:
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-specific-namespace
    spec:
      podSelector:
        matchLabels:
          app: my-app
      ingress:
      - from:
        - namespaceSelector:
            matchLabels:
              project: frontend

7. 결론: AKS에서 Pod, Deployment, Service 요약

 Pod: Kubernetes의 최소 실행 단위, 컨테이너를 포함
 Deployment: Pod를 관리하고 업데이트, 확장을 쉽게 처리
 Service: Pod의 IP 변경과 무관하게 트래픽을 전달

💡 AKS에서 애플리케이션을 배포하려면 Deployment + Service를 조합하여 관리하는 것이 Best Practice! 🚀

반응형