쿠버네티스 주요 구성 요소 이해하기

서론


쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 오픈 소스 플랫폼입니다. 쿠버네티스의 성공적인 활용을 위해서는 주요 구성 요소에 대한 이해가 필수적입니다. 이번 포스팅에서는 Node, Pod, Deployment, Service 등의 주요 구성 요소를 초보자도 이해할 수 있도록 자세히 설명합니다. 이를 통해 쿠버네티스의 기본 원리를 파악하고, 실무에서 활용할 수 있는 기초를 다지게 될 것입니다.


본론


Node (노드)


노드란 무엇인가?


노드는 쿠버네티스 클러스터를 구성하는 가장 기본적인 단위입니다. 노드는 물리적 또는 가상 서버로서, 컨테이너가 실행되는 환경을 제공합니다. 쿠버네티스 클러스터에는 두 종류의 노드가 있습니다.


  1. 마스터 노드 (Master Node): 클러스터 전체를 관리하고 제어하는 역할을 합니다. API 서버, 스케줄러, 컨트롤러 매니저 등이 실행됩니다.
  2. 워커 노드 (Worker Node): 실제 컨테이너 애플리케이션이 실행되는 노드입니다. 각 워커 노드는 쿠버네티스의 에이전트인 kubelet이 실행되어 마스터 노드와 통신합니다.

노드의 주요 구성 요소


  • kubelet: 각 워커 노드에서 실행되는 에이전트입니다. kubelet은 Pod의 상태를 모니터링하고, 컨테이너를 시작하거나 중지하는 등의 작업을 수행합니다.
  • 컨테이너 런타임: 컨테이너를 실행하는 소프트웨어입니다. 대표적인 컨테이너 런타임으로는 Docker, containerd, CRI-O 등이 있습니다.
  • kube-proxy: 각 노드에서 실행되는 네트워크 프록시입니다. kube-proxy는 클러스터 내부의 네트워크 트래픽을 관리하고, 서비스 간 통신을 지원합니다.

Pod (파드)


파드란 무엇인가?


파드는 쿠버네티스의 기본 배포 단위로, 하나 이상의 컨테이너가 포함된 논리적 호스팅 단위입니다. 같은 파드 내의 컨테이너는 네트워크와 스토리지를 공유하며, 항상 함께 스케줄링되고 실행됩니다. 파드는 일반적으로 단일 애플리케이션의 인스턴스를 실행합니다.


파드의 주요 특징


  • 단일 IP 주소: 파드는 클러스터 내에서 고유한 IP 주소를 가지며, 파드 내의 모든 컨테이너는 이 IP 주소를 공유합니다.
  • 네트워크 공유: 파드 내의 모든 컨테이너는 localhost를 통해 서로 통신할 수 있습니다.
  • 스토리지 공유: 파드는 볼륨을 통해 스토리지를 공유할 수 있습니다. 볼륨은 파드 내의 모든 컨테이너에서 접근 가능합니다.

Deployment (디플로이먼트)


디플로이먼트란 무엇인가?


디플로이먼트는 파드와 레플리카셋을 관리하는 상위 개념으로, 애플리케이션의 배포와 업데이트를 담당합니다. 디플로이먼트를 사용하면 애플리케이션의 롤링 업데이트, 롤백 등을 쉽게 수행할 수 있습니다.


디플로이먼트의 주요 기능


  • 롤링 업데이트: 디플로이먼트를 통해 애플리케이션의 새로운 버전을 점진적으로 배포할 수 있습니다. 이는 서비스의 중단 없이 업데이트를 진행할 수 있게 합니다.
  • 롤백: 문제가 발생한 경우, 이전 버전으로 쉽게 롤백할 수 있습니다.
  • 레플리카 관리: 디플로이먼트는 원하는 수의 파드 레플리카를 유지합니다. 예를 들어, 3개의 파드가 항상 실행되도록 설정할 수 있습니다.

디플로이먼트 예시


다음은 Nginx 서버를 배포하는 디플로이먼트 예시입니다.


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.14.2
        ports:
        - containerPort: 80

이 예시는 3개의 Nginx 파드를 배포하고, 항상 3개의 파드가 실행되도록 유지합니다.


Service (서비스)


서비스란 무엇인가?


서비스는 파드의 집합에 대한 네트워크 접근을 제공하는 추상화된 개념입니다. 파드는 동적으로 생성되고 삭제되기 때문에, 서비스는 안정적인 네트워크 엔드포인트를 제공하여 파드의 IP 주소 변화에 영향을 받지 않도록 합니다. 서비스는 클러스터 내부와 외부에서 접근할 수 있는 방법을 모두 제공합니다.


서비스의 주요 유형


  • 클러스터IP (ClusterIP): 기본 서비스 유형으로, 클러스터 내부에서만 접근할 수 있는 내부 IP 주소를 제공합니다.
  • 노드포트 (NodePort): 각 워커 노드의 포트를 통해 외부에서 접근할 수 있도록 설정합니다.
  • 로드밸런서 (LoadBalancer): 클라우드 서비스 제공업체의 로드 밸런서를 통해 외부 트래픽을 분산시킵니다.
  • 헤드리스 서비스 (Headless Service): 로드 밸런싱 없이 파드의 IP 주소를 직접 노출합니다.

서비스 예시


다음은 Nginx 서버를 노출하는 서비스 예시입니다.


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

이 예시는 Nginx 파드에 대한 클러스터 내부의 안정적인 네트워크 접근을 제공합니다.


추가 구성 요소


쿠버네티스에는 Node, Pod, Deployment, Service 외에도 다양한 구성 요소가 있습니다. 몇 가지 중요한 구성 요소를 추가로 소개합니다.


ConfigMap과 Secret


  • ConfigMap: 환경 설정 데이터를 키-값 쌍으로 저장하여 컨테이너에 전달합니다. 예를 들어, 데이터베이스 연결 문자열을 ConfigMap에 저장할 수 있습니다.
  • Secret: 비밀 데이터를 암호화하여 저장하고 컨테이너에 전달합니다. 예를 들어, 비밀번호, API 키 등을 Secret에 저장할 수 있습니다.

Ingress


  • Ingress: 클러스터 외부에서 내부 서비스로의 HTTP 및 HTTPS 트래픽을 관리합니다. Ingress는 경로 기반 라우팅을 지원하여, 특정 URL 패턴에 따라 트래픽을 다른 서비스로 라우팅할 수 있습니다.

PersistentVolume과 PersistentVolumeClaim


  • PersistentVolume (PV): 클러스터에서 관리하는 스토리지 리소스입니다. 스토리지 제공자가 미리 프로비저닝한 스토리지입니다.
  • PersistentVolumeClaim (PVC): 파드가 스토리지를 요청하는 방식입니다. PVC는 PV에 바인딩되어 파드에 스토리지를 제공합니다.

결론


쿠버네티스는 다양한 구성 요소를 통해 강력하고 유연한 컨테이너 오케스트레이션 플랫폼을 제공합니다. Node, Pod, Deployment, Service 등의 주요 구성 요소를 이해함으로써 쿠버네티스의 기본 원리를 파악하고, 실무에서 활용할 수 있는 기초를 다질 수 있습니다. 각 구성 요소의 역할과 특징을 명확히 이해하면 쿠버네티스를 더욱 효과적으로 사용할 수 있습니다.


다음 이전