ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 쿠버네티스 핵심 개념 한눈에 보기 — Pod부터 배포까지
    카테고리 없음 2026. 4. 10. 13:03

    쿠버네티스란 무엇인가?

    쿠버네티스(Kubernetes, K8s)는 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하는 오픈소스 플랫폼입니다.
    구글이 내부적으로 사용하던 Borg 시스템을 기반으로 2014년에 공개했으며, 현재는 CNCF(Cloud Native Computing Foundation)가 관리합니다.
    도커(Docker)만으로는 단일 서버에서의 컨테이너 관리만 가능하지만, 쿠버네티스를 사용하면 수백, 수천 개의 컨테이너를 여러 서버에 걸쳐 효율적으로 운영할 수 있습니다.

    왜 쿠버네티스가 필요한가?

    현대 서비스 환경에서는 마이크로서비스 아키텍처와 컨테이너 기반 배포가 표준이 되었습니다.
    컨테이너 수가 늘어날수록 장애 감지, 재시작, 로드 밸런싱, 롤링 업데이트 같은 작업을 수동으로 처리하기 어려워집니다.
    쿠버네티스는 이런 복잡한 운영 작업을 자동화하여 개발자가 비즈니스 로직에 집중할 수 있도록 도와줍니다.

    핵심 구성 요소

    쿠버네티스 클러스터는 크게 컨트롤 플레인(Control Plane)과 워커 노드(Worker Node)로 구성됩니다.
    컨트롤 플레인은 클러스터의 두뇌 역할을 하며, API 서버, etcd(상태 저장소), 스케줄러, 컨트롤러 매니저로 이루어져 있습니다.
    워커 노드는 실제 컨테이너가 실행되는 곳으로, kubelet, kube-proxy, 컨테이너 런타임이 포함됩니다.

    주요 리소스 타입은 다음과 같습니다.

    • Pod: 쿠버네티스의 최소 배포 단위. 하나 이상의 컨테이너를 포함
    • Deployment: Pod의 복제본 수와 업데이트 전략을 관리
    • Service: Pod에 안정적인 네트워크 접근점을 제공
    • ConfigMap / Secret: 설정값과 민감한 정보를 분리하여 관리
    • Namespace: 클러스터 내에서 리소스를 논리적으로 분리

    Pod와 Deployment 이해하기

    Pod는 쿠버네티스에서 가장 작은 배포 단위이며, 하나 이상의 컨테이너가 같은 네트워크 네임스페이스를 공유합니다.
    일반적으로 Pod를 직접 생성하지 않고, Deployment를 통해 관리합니다.
    Deployment는 지정한 수의 Pod 복제본을 항상 유지하고, 롤링 업데이트와 롤백을 지원합니다.

    아래는 간단한 nginx Deployment 예시입니다.

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

    위 설정을 적용하면 쿠버네티스가 자동으로 3개의 nginx Pod를 생성하고 유지합니다.
    하나의 Pod가 장애가 발생하면 즉시 새로운 Pod를 생성해 3개의 복제본 상태를 복원합니다.

    Service와 네트워크 구성

    Pod는 생성될 때마다 새로운 IP 주소를 할당받기 때문에, 직접 Pod IP로 통신하는 것은 불안정합니다.
    Service는 Pod 집합에 고정된 가상 IP(ClusterIP)와 DNS 이름을 부여해, 안정적인 접근 경로를 제공합니다.
    Service 타입에는 ClusterIP(클러스터 내부 접근), NodePort(노드 포트로 외부 접근), LoadBalancer(클라우드 로드 밸런서 연동)가 있습니다.

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
    spec:
      selector:
        app: nginx
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80
      type: ClusterIP

    이 Service는 app: nginx 레이블을 가진 모든 Pod로 트래픽을 자동으로 분산합니다.
    내부 DNS를 통해 다른 Pod에서 nginx-service 라는 이름으로 접근할 수 있습니다.

    kubectl로 클러스터 다루기

    쿠버네티스는 kubectl CLI를 통해 모든 리소스를 관리합니다.
    자주 사용하는 명령어를 익혀두면 운영 작업 속도가 크게 향상됩니다.

    # 리소스 조회
    kubectl get pods
    kubectl get deployments
    kubectl get services
    
    # 리소스 상세 정보 확인
    kubectl describe pod <pod-name>
    
    # YAML 파일 적용
    kubectl apply -f deployment.yaml
    
    # Pod 로그 확인
    kubectl logs <pod-name>
    
    # Pod 내부 접속
    kubectl exec -it <pod-name> -- /bin/bash
    
    # 리소스 삭제
    kubectl delete -f deployment.yaml

    kubectl apply는 선언적으로 리소스를 관리하므로, 파일을 수정한 뒤 다시 실행하면 변경 사항이 자동으로 반영됩니다.

    마무리

    쿠버네티스는 처음에는 복잡하게 느껴지지만, Pod, Deployment, Service 세 가지 핵심 개념을 이해하면 기본 운영은 충분히 가능합니다.
    클라우드 환경(GKE, EKS, AKS)에서는 컨트롤 플레인을 직접 관리할 필요 없이 쉽게 클러스터를 시작할 수 있어 진입 장벽이 낮아졌습니다.
    로컬 학습 환경으로는 minikubekind를 추천하며, 실제 YAML을 작성하고 배포해보면서 감을 익히는 것이 가장 빠른 학습 방법입니다.

Designed by Tistory.