- 파드
- 함께 배치된 컨테이너 그룹, 기본 빌딩 블록, 최소 배포 단위
- 파드 하나의 컨테이너들은 하나의 워커노드에 들어간다.
- 다만, 일반적인 환경에선 하나의 파드에 하나의 컨테이너가 들어간다.
- 왜 파드를 쓰나? 컨테이너를 바로 안쓰고
- 컨테이너는 단일 프로세스의 실행을 목적으로 설계 되었음.
- 여러 프로세스를 실행 시키려면 프로세스 실행과 로그 관리가 모두 사용자 역할이 된다.
- 일례로 단일 프로세스 실패 시 자동 재시작을 위한 과정을 직접 설정 해두어야 한다.
- 또한 프로세스 별로 로그를 남기는 작업이 어려워진다.
- 그렇기 때문에 단일 컨테이너들을 하나로 묶고 관리하기 위한 상위 구조가 필요했음.
- 컨테이너를 묶어서 연관된 프로세스가 단일 컨테이너에서 실행되는 것처럼 관리하면서 각각은 격리되어 있는 양쪽의 장점을 모두 잡기 위한 개념으로 생긴 것
- 파드안의 컨테이너 간 부분 격리
- 컨테이너 그룹 내에서는 특정 리소스의 공유를 위해 완벽한 격리를 이루지 않음.
- 쿠버네티스는 그룹 안의 컨테이너들이 동일한 리눅스 네임스페이스를 공유하도록 도커를 설정함.
- 네트워크 네임스페이스, UTS 네임스페이스, IPC 네임스페이스 가 똑같아 호스트 이름과 네트워크 인터페이스를 공유하고 IPC를 통해 통신이 가능
- 다만 파일 시스템은 컨테이너 이미지에서 나오기 때문에 서로 격리되어 나온다. 하지만 쿠버네티스의 볼륨 개념을 이용하여 디렉터리를 공유할 수 있다.
- 네트워크를 공유하기 때문에 동일한 아이피 주소와 포트 공간을 가진다. → 포트 중복이 안된다.
- 루프백(127.0.0.1)이 같기 때문에 로컬호스트를 통해 통신이 가능하다.
- 플랫 네트워크
- 모든 파드는 하나의 플랫한 공유 네트워크 주소 공간에 상주하고 있어 다른 파드의 아이피 주소를 사용해 접근 하는 것이 가능하다.
- 또한, 접근을 위해 따로 NAT(Network Address Translation) 가 따로 필요하지 않음. 상대방의 아이피 주소를 출발지 아이피 주소에서 찾을 수 있음.
- 플랫 네트워크를 이용하기 때문에 파드 간에 통신은 단순해짐. 워커 노드의 위치에 상관 없이 쉽게 통신이 가능
- LAN 통신과 비슷하게 통신을 할 수 있게 된다.
- 파드에서 컨테이너의 적절한 구성
- 결론적으로 최대한 자잘하게 나누는게 좋다.
- 예를 들어 2개의 워커노드가 있고 백과 프론트 서버가 있을 때 하나의 파드에 백 프론트 다 넣으면 워커노드 중 한개 만 쓸 수 있게 된다. 리소스를 효율적으로 쓰기 위해 나눌 필요가 있음.
- 또한 스케일링에서도 필요한 서버의 리소스만 늘려주기 위해서도 나누는 것이 좋다.
- 파드에서 여러 컨테이너가 들어가는 경우
- 여러 컨테이너가 들어가는 주된 이유는 하나의 메인 컨테이너가 있고 얘를 보조하기 위한 서브 컨테이너로 이루어진 경우이다.
- 이런 파드들을 멀티 컨테이너 파드라고 부름
- 이와 관련된 디자인 패턴들을 정의 해놨는데 아래 블로그에 정리가 잘 되어 있다.
- 이런 서브 컨테이너로 로그 수집, 데이터 프로세서, 통신 어댑터 등을 사용.
- 하지만 일반적으로는 단일 컨테이너가 들어간다. 멀티 컨테이너 환경이 정말로 필요한지를 따져보고 환경 구축을 해야할 것이다.