간서치 2022. 12. 14. 00:12
728x90

pod란 개념은 K8S에서 유래 되었다.

pod란 Container를 실행하는 최소 단위이며 하나, 또는 그 이상의 Container가 실행되는 환경이다.

PODMAN의 pod 역시 이와 유사하게 정의되어 있다.

 

PODMAN의 Pod 개념

1. 구조  및 Infra Container

 1.1. 모든 Podman pod에는 infra container가 포함되어 있음.

 1.2. Infra container는 아무 작업도 수행하지 않지만 sleep mode로 전환되지는 않는다. 

  1.2.1. 중요 정보 저장 및 Pod 유지

 1.3. Infra Container는 팟(Pod)과 연관된 NameSpace를 보유

 1.4. Podman이 pod내의 다른 Container에 연결할 수 있도록 함. 

   1.4.1. 이렇게 함으로서 pod 내의 Container 시작 및 중지가 가능

   1.4.2. 단 infra Container의 시작과 중지는 불가능

  1.5. Infra Contaier는 k8s.gcr.io/pause 이미지를 기반

   1.5.1. 별도로 명시하지 않는 한 모든 pod는 기본 이미지를 기반으로 하는 컨테이너를 갖게 됨.

 

2. 제약 사항

 2.1. Pod를 구성하는 대부분의 속성은 실제로 Infra Container에 할당

  2.1.1. port binding, cgroup-parent 값 및 kernel namespace는 모두 infra Container에 할당

 2.2 Pod가 생성되면 이러한 속성이 Infra Container에 할당되고 변경할 수 없음. - pod에 port 생성 반드시 필요이유

  2.2.1. 예를 들어 Pod를 생성한 다음 나중에 새 포트를 바인딩하는 컨테이너를 추가하기로 결정한 경우 Podman은 이를 수행할 수 없음. 새 컨테이너를 추가하기 전에 추가 포트 바인딩을 사용하여 포드를 다시 생성해야 함.

 

3. 아키텍처 이해

 3.1. 각 컨테이너 위에 있는 Box.

  3.1.1. Container mornitorr. 

  3.1.2. runc: 컨테이너의 기본 프로세스를 감시하고 컨테이너가 죽으면 종료 코드를 저장. 또한 나중에 연결할 수 있도록 컨테이너의 tty를 Open 중. 

  3.1.4. 이것은 podman이 분리 모드(백그라운드)에서 실행되도록 허용하므로 podman은 종료할 수 있지만 conmon은 계속 실행. 

  3.1.5. 각 컨테이너에는 고유한 conmon 인스턴스가 있습니다.

 

4. Pod 생성 및 삭제

 4.1. pod를 생성하면 Infra Container는 자동 생성됨. 

  4.1.1. noportpod란 이름의 pod 생성

# podman pod create --name noportpod

  4.1.2. pod 확인

# podman pod list

  4.1.3. pod내 infra Container 확인

# podman ps -a --pod

 

4.2. Infra Container만 삭제 할 수 없음. 

  4.2.1. infra container 삭제 시도

# podman rm -f INFRACONTAINERNAME

 4.3. Pod를 삭제 해야만 Infra Container가 삭제됨.

  4.3.1. pod 삭제

# podman pod rm PODNAME

  4.3.2. pod내 Container 확인

# podman ps -a --pod

  4.3.3. pod 확인

$ podman pod list

pod 생성 및 삭제

결론 : Infra Container의 생명주기는 POD와 같다. POD가 삭제되면 Infra Container로 삭제된다.

단 Infra Container는 그 이외의 방법으로는 삭제되지 않는다.

 

조금 힘든 개념이지요!
잘 이해하시면 나중에 K8S 공부에 많은 도움이 됩니다.

Have a nice day!

728x90