카테고리 없음

[쿠버네티스] POD(파드)에 대해서 쉽게 알아보기 2

Catnap 2025. 6. 4. 17:57

파드 안에 있는 컨테이너들은 다음과 같은 중요한 특징이 있습니다. 

 

  • 동일한 네트워크 공간 공유: 파드 내의 모든 컨테이너는 동일한 IP 주소를 가지며, localhost를 통해 서로 통신할 수 있습니다. 마치 한 집 안에 사는 식구들처럼 서로에게 쉽게 접근할 수 있죠.

파드 구성:

  • 메인 컨테이너 (웹 서버): Nginx 또는 Apache 웹 서버가 실행됩니다.
  • 사이드카 컨테이너 (로컬 캐시): Redis 서버가 실행됩니다.

원리:

이 두 컨테이너는 같은 파드 안에 있으므로 동일한 IP 주소를 공유합니다. 따라서 웹 서버 컨테이너는 localhost:6379 (Redis 기본 포트)와 같이 localhost 주소만으로도 Redis 컨테이너에 접근하여 데이터를 저장하고 읽을 수 있습니다. 별도의 서비스나 복잡한 네트워크 설정 없이, 마치 한 컴퓨터 안에 두 개의 프로그램이 실행되는 것처럼 통신이 가능합니다.

 

YAML 예제: 

apiVersion: v1
kind: Pod
metadata:
  name: web-cache-pod
  labels:
    app: web-cache
spec:
  containers:
  - name: nginx-container  # 메인 컨테이너 (웹 서버)
    image: nginx:latest
    ports:
    - containerPort: 80
  - name: redis-container  # 사이드카 컨테이너 (로컬 캐시)
    image: redis:latest
    ports:
    - containerPort: 6379

 

  • 공유 스토리지 볼륨 접근: 필요하다면 파드 내의 컨테이너들은 동일한 저장소 볼륨을 공유하여 데이터를 함께 읽고 쓸 수 있습니다. 이는 서로 다른 컨테이너가 같은 파일에 접근해야 할 때 유용합니다.

상황: 웹 서버(Nginx)가 사용하는 설정 파일(예: nginx.conf)을 외부에서 가져와 주기적으로 업데이트하고 싶습니다. 설정 파일을 관리하는 별도의 컨테이너가 있고, 웹 서버는 항상 최신 설정 파일을 사용해야 합니다.

파드 구성:

  • 메인 컨테이너 (웹 서버): Nginx 웹 서버가 실행됩니다.
  • 사이드카 컨테이너 (설정 동기화 에이전트): 외부에서 설정 파일을 가져와 공유 볼륨에 쓰는 역할을 합니다.

원리:

이 두 컨테이너는 동일한 볼륨을 공유하도록 설정됩니다. 설정 동기화 에이전트 컨테이너가 외부에서 새로운 nginx.conf 파일을 다운로드하여 공유 볼륨에 저장하면, 웹 서버 컨테이너는 같은 공유 볼륨을 마운트하고 있으므로 해당 최신 설정 파일을 즉시 읽어 적용할 수 있습니다. 마치 두 사람이 같은 폴더에 파일을 넣고 꺼내 쓰는 것과 같습니다.

 

YAML 예제:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-config-pod
  labels:
    app: nginx-config
spec:
  volumes: # 공유 볼륨 정의
  - name: nginx-config-volume
    emptyDir: {} # 파드가 살아있는 동안만 존재하는 임시 볼륨
  containers:
  - name: nginx-container  # 메인 컨테이너 (웹 서버)
    image: nginx:latest
    ports:
    - containerPort: 80
    volumeMounts: # 컨테이너에 볼륨 마운트
    - name: nginx-config-volume
      mountPath: /etc/nginx/conf.d # Nginx가 설정을 읽는 경로
  - name: config-updater-container # 사이드카 컨테이너 (설정 파일 동기화)
    image: alpine/git # 예시: Git에서 설정을 가져오는 컨테이너
    command: ["/bin/sh", "-c"]
    args:
    - while true; do git clone https://github.com/your-repo/configs.git /configs; cp /configs/nginx.conf /shared-config/nginx.conf; sleep 60; done # 예시 명령어
    volumeMounts: # 컨테이너에 볼륨 마운트
    - name: nginx-config-volume
      mountPath: /shared-config # 설정 파일을 쓸 경로

 

 

 

  • 동일한 생명 주기: 파드 내의 컨테이너들은 함께 생성되고, 함께 시작되며, 함께 종료됩니다. 파드가 삭제되면 그 안의 모든 컨테이너도 함께 사라집니다.

 생명주기에 대한 내용은 파드의 기본적인 동작 방식이라서 예시는 생략입니다. 

파드는 쿠버네티스의 스케쥴링 단위이므로, 파드 안에 있는 모든 컨테이너는 항상 같은 노드에 함께 배포되며, 파드가 스케줄링되면 모든 컨테이너가 동시에 시작됩니다. 
만약 파드가 삭제되거나 재시작하면, 그 파드 안에 있는 모든 컨테이너들도 함께 다시 시작됩니다. 
개별 컨테이너만 따로 시작하거나 종료할 수 없습니다.