[Kubernetes] 포드(Pod): 컨테이너를 다루는 기본 단위

연수·2021년 11월 1일
1

kubernetes

목록 보기
4/15

쿠버네티스에서 컨테이너 애플리케이션의 기본 단위를 포드(Pod)라고 부르며, 포드는 1개 이상의 컨테이너로 구성된 컨테이너의 집합이다.

1개의 포드에는 1개의 컨테이너가 존재할 수도 있고, 여러 개의 컨테이너가 존재할 수도 있다.

❓Nginx 웹 서비스를 쿠버네티스에서 생성하려면?

→ 포드 1개에 Nginx 컨테이너 1개만을 포함해 생성

→ 1개의 Nginx 컨테이넌가 들어 있는 동일한 포드를 여러 개 생성

  • nginx-pod.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-nginx-pod
    spec:
      containers:
      - name: my-nginx-container
        image: nginx:latest
        ports:
        - containerPort: 80
          protocol: TCP

작성한 YAML 파일은 kubectl apply-f 명령어로 쿠버네티스에 생성할 수 있다. 아래 명령어로 새로운 포드를 생성한다.

$ kubectl apply -f nginx-pod.yaml

# 특정 오브젝트의 목록 확인
$ kubectl get pods

# 생성된 리소스의 자세한 정보 확인
$ kubectl describe pods my-nginx-pod

이 Nginx 포드를 생성할 때, YAML 파일에 사용할 포트를 정의하긴 했지만, 아직 외부에서 접근할 수 있도록 노출된 상태는 아니다. 따라서 포드 컨테이너의 내부 IP로만 접근이 가능하다.

쿠버네티스 외부 또는 내부에서 포드에 접근하려면 서비스(service)라고 하는 쿠버네티스 오브젝트를 따로 생성해야 한다.

# 컨테이너 내부 IP로 접근
$ curl {컨테이너 내부 IP 주소}

# 포드의 컨테이너에 명령 전달
$ kubectl exec -it my-nginx-pod bash

# 로그 확인
$ kubectl logs my-nginx-pod

# 삭제
$ kubectl delete -f nginx-pod.yaml

🐨 쿠버네티스 YAML 파일의 구성 요소

  1. apiVersion

    YAML 파일에서 정의한 오브젝트의 API 버전

  2. kind

    리소스의 종류

  3. metadata

    라벨, 주석, 이름 등과 같은 리소스의 부가 정보

  4. spec

    리소스를 생성하기 위한 자세한 정보

    도커 이미지, 사용할 포트 등..

🌻 완전한 애플리케이션으로서의 포드

실제 쿠버네티스 환경에서는 1개의 컨테이너로 구성된 포드를 사용하는 경우가 많다.

'하나의 포드는 하나의 완전한 애플리케이션'이기 때문이다.

만약 하나의 컨테이너가 실행되기 위해 부가적인 기능을 필요로 한다면, 기능 확장을 위한 추가 컨테이너를 함께 포드에 포함시킬 수 있다. 이러한 부가적인 컨테이너를 사이드카(sidecar) 컨테이너라고 부르며, 사이드카 컨테이너는 포드 내의 다른 컨테이너와 네트워크 환경 등을 공유하게 된다.

이러한 구조 및 원리에 따라 포드에 정의된 여러 개의 컨테이너는 하나의 완전한 애플리케이션으로서 동작하게 된다.

[출처] 시작하세요! 도커/쿠버네티스 (용찬호 지음)

profile
DCDI

0개의 댓글