ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kubernetes Pod 이해하기
    Kubernetes 2023. 7. 26. 07:44
    728x90
    반응형

    소개

    Pod는 쿠버네티스의 가장 기본적인 구성요소입니다.
    컨테이너 환경을 오케스트레이션하는 쿠버네티스 입장에서 Pod는 컨테이너를 관리하는 주체이기 때문입니다.
    하나의 Pod는 하나 이상의 컨테이너를 구동시키며,
    Pod에 속한 여러 컨테이너들은 Pod의 리소스를 공유하게 됩니다.

     

     

     

    <pod yaml>

    3개의 컨테이너를 가지는 Pod 의 yaml 입니다.

    각각의 컨테이너 이미지는 nginx, mysql, minio 입니다.

    apiVersion: v1
    kind: Pod
    metadata:
      name: multi-container-pod
      namespace: multi-container
      labels:
        app: multi-container
    spec:
      containers:
        - name: container1
          image: nginx
          volumeMounts:
            - name: html
              mountPath: /usr/share/nginx/
        - name: container2
          image: mysql
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: root
        - name: container3
          image: minio/minio
          args:
            - server
            - --console-address
            - ":9001"
            - "/storage"
          env:
            - name: MINIO_ACCESS_KEY
              value: "minio"
            - name: MINIO_SECRET_KEY
              value: "minio123"
            - name: TZ
              value: Asia/Seoul
            - name: LANG
              value: ko_KR.utf8
          volumeMounts:
            - name: storage
              mountPath: "/storage"
      volumes:
        - name: html
          emptyDir: {}
        - name: storage
          emptyDir: { }


    예를 들어,

    Pod는 새롭게 생성될 때마다 하나의 ip 를 부여받게 되는데 컨테이너들Pod의 ip 를 공유합니다.

    만약 Pod의 IP 주소 가 10.244.4.3 인 경우에 컨테이너들 또한 10.244.4.3 을 사용합니다.

     

    NAME                  READY   STATUS    RESTARTS   AGE   IP           NODE           NOMINATED NODE   READINESS GATES
    multi-container-pod   3/3     Running   0          53s   10.244.4.3   kind-worker2   <none>           <none>

    < multi-container-pod 라는 Pod는 3개의 container들을 가지고, ip 는 10.244.4.3 을 할당받았습니다.>

     

    각 container 의 ip 또한 10.244.4.3 으로 설정됩니다.

    eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 65535 qdisc noqueue state UP group default 
        link/ether 16:fd:56:f1:31:64 brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet 10.244.4.3/24 brd 10.244.4.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fd00:10:244:4::3/64 scope global 
           valid_lft forever preferred_lft forever
        inet6 fe80::14fd:56ff:fef1:3164/64 scope link 
           valid_lft forever preferred_lft forever

     

    그리고 파드가 가지는 볼륨을 공유할 수 있습니다.

    하나의 파드 내의 여러 컨테이너들이 같은 볼륨을 공유하는 상황은

    하나의 컨테이너가 데이터를 생성하고 다른 컨테이너가 데이터를 소비하는 상황이 있습니다.

    ex) 1 크롤러와 2 크롤링된 컨텐츠 서버

     

     

    컨테이너와 파드의 차이

    그런데 컨테이너가 실질적인 작업의 실행을 담당하기 때문에 굳이 파드를 써야하는 의문이 생길 수 있습니다.

    파드가 제공하는 ip 와 스토리지 기능이 아니더라도 컨테이너만  있어도 실질적인 기능은 동작할 것 같습니다.

     

    파드는 컨테이너를 한번 더 감싸서 쿠버네티스의 구성요소로 만들어줍니다.

    쿠버네티스를 선택된 CRI (Container Runtime Interface) 에 의해서 컨테이너를 관리하는데요.

    컨테이너는 docker 나 containerd 처럼 컨테이너 런타임에 의해서 관리됩니다.

    하지만 컨테이너 오케스트레이션을 담당하는 쿠버네티스의 관점에서 관리에 효율적인 방식으로 컨테이너를 추상화시킨 개념이 파드입니다.

     

    파드는 아래와 같은 기능을 제공합니다.

     

    1. 프로브 (Probe)

    프로브는 kubelet 이 컨테이너의 상태를 체크하는 진단 프로세스입니다.

    모든 파드들은 노드라는 서버에 존재하는데요. 노드는 물리적인 서버 또는 가상 서버를 의미합니다.

    즉 하나의 인스턴스입니다.

    그리고 모든 노드에는 하나의 kubelet 이 존재하는데 kubelet 이 컨테이너의 실행, 삭제, 수정, 진단 등의 작업을 수행합니다.

    probe 는 컨테이너의 상태를 체크하여 재시작 정책에 따른 대응을 합니다.

     

    2. affinity

    파드들은 노드에 위치합니다.

    파드가 노드에 할당되는 전반적인 개념을 파드 스케줄링이라고 하는데요.

    파드가 필요로하는 리소스에 따라 해당 리소스를 감당할 수 있는 노드에 배치됩니다.

    이러한 과정을 스케줄링이라고합니다.

    다만, 파드 별로 특정 노드에 배치되거나 특정 노드에 배치되지 않아야하는 제약이 필요할 수 있습니다.

    이러한 스케줄링에 대한 제약을 Affinity 라고합니다.

     

    파드는 위와 같은 기능들을 내포하며 컨테이너 그 이상의 작업을 수행합니다.

    그리고 파드는 쿠버네티스의 최소 구성 단위로써 쿠버네티스 클러스터에 의해서 관리됩니다.

     

     

    반응형

    'Kubernetes' 카테고리의 다른 글

    Kubernetes Ephemeral Volume  (0) 2023.08.09
    [Kubernetes] Service 이해하기  (0) 2023.08.01
    [Kubernetes] ReadinessProbe 알아보기  (0) 2023.06.16
    Kubernetes Event 이해하기  (0) 2023.06.16
    [Kubernetes] Metrics Server 알아보기  (0) 2023.05.09
Designed by Tistory.