일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- kubernetes
- 빌드
- 레이블
- kube
- kubenetes architecture
- 쿠버네티스
- 어플리케이션셋
- 쿠버네티스 어노테이션
- 추상화
- 레이블 셀렉터
- 피터코드
- applicationset
- OOP
- 캡슐화
- argocd applicationset
- kubenetes in action
- delegation
- 상속성
- 객체지향
- 위임
- kubernetes in actin
- kubenetes
- Abstraction
- Encapsulation
- 메이븐
- maven
- ArgoCD
- 피터코드의 상속규칙
- kubernetes component
- kubernetes in action
- Today
- Total
IT 끄적장
# 5 kubernetes 구성 요소_ Pod - 1 본문
POD(파드) 소개
파드는 함께 배치된 컨테이너 그룹이며 쿠버네티스의 기본 빌딩 블록이다.
컨테이너를 개별적으로 배포하기 보다는 컨테이너를 가진 파드를 배포하고 운영한다.
여기서 파드가 항상 두개 이상의 컨테이너를 포함하는 것을 의미하는 것은 아니다. 일반적으로 파드는 하나의 컨테이너만 포함한다.
파드의 핵심은 파드가 여러 컨테이너를 가지고 있을 경우에, 모든 컨테이너는 항상 하나의 워커 노드에서 실행되며 여러 노드에 걸쳐 실행되지 않는다.
POD가 필요한 이유
IPC 혹은 로컬 파일을 통해 통신하는 여러 프로세스로 구성되어 있고, 같은 노드에서 실행해야 하는 애플리케이션을 상상해보면, 쿠버네티스에서는 프로세스를 항상 컨테이너에서 실행시키고 각 컨테이너는 격리된 머신과 비슷하기 때문에 여러 프로세스를 단일 컨테이너 안헤서 실행하는 것이 타당하다고 생각할 수 있지만 실제로는 그렇지 않다.
컨테이너는 단일 프로세스를 실행하는 것을 목적으로 설계되었다.
단일 컨테이너에서 관련 없는 다른 프로세스를 실행하는 경우, 모든 프로세스를 실행하고 로그를 관리하는 것은 모두 사용자의 책임이다. 일례로 개별 프로세스가 실패하는 경우 자동으로 재시작하는 메커니즘을 포함해야 한다. 또한 이러한 모든 프로세스는 동일한 표준 출력으로 로그를 기록하기 때문에 어떤 프로세스가 남긴 로그인지 파악하는 것이 매우 어렵다.
따라서 각 프로세스를 자체의 개별 컨테이너로 실행해야 한다.
POD 이해하기
여러 프로세스를 단일 컨테이너로 묶지 않았기 때문에, 컨테이너를 함께 묶고 하나의 단위로 관리할 수 있는 또 다른 상위 구조가 필요하다. 이게 파드가 필요한 유일한 이유다.
컨테이너 모음을 사용해 밀접하게 연관된 프로세스를 함께 실행하고 단일 컨테이너 안에서 모두 함께 실행되는 것처럼 거의 동일한 환경을 제공할 수 있으면서도 이들을 격리된 상태로 유지할 수 있다. 이런 방식으로 두 개의 장점으로 모두 활용한다.
컨테이너가 제공하는 모든 기능을 활용하는 동시에 프로세스가 함께 실행되는 것 처럼 보이게 할 수 있다.
- 같은 POD안에 컨테이너간 부분 격리
쿠버네티스는 파드 안에 있는 모든 컨테이너가 자체 네임스페이스가 아닌 동일한 리눅스 네임스페이스를 공유하도록 도커를 설정한다.
파드의 모든 컨테이너는 동일한 네트워크 네임스페이스과 UTS 네임스페이스 안에서 실행되기 때문에, 모든 컨테이너는 같은 호스트 이름과 네트워크 인터페이스를 공유한다.
비슷하게 파드의 모든 컨테이너는 동일한 IPC 네임스페이스 아래에서 실행돼 IPC를 통해 서로 통신할 수 있다.
그러나 파일 시스템의 경우 예외적이다.
대부분의 컨테이너 파일시스템은 컨테이너 이미지에서 나오기 때문에, 기본적으로 파일시스템은 다른 컨테이너와 완전히 분리된다. - 컨테이너가 동일한 IP와 포트를 공유하는 방법
파드 안의 컨테이너가 동일한 네트워크 네임스페이스에서 실행되기 때문에, 동일한 IP 주소와 포트 공간을 공유한다는 것이다. 이는 동일한 파드 안 컨테이너에서 실행중인 프로세스가 같은 포트 번호를 사용하지 않도록 주의해야 함을 의미한다. 그렇지 않으면 포트 충돌이 발생할 수 있다.
파드 안에 있는 모든 컨테이너느 동일한 루프백 네트워크 인터페이스를 갖기 때문에, 컨테이너들이 localhost를 통해 서로 통신할 수 있다. - 파드 간 플랫 네트워크 소개
쿠버네티스 클러스터의 모드 파드는 하나의 플랫한 공유 네트워크 주소 공간에 상주하므로 모든 파드는 다른 파드의 IP주소를 사용해 접근하는 것이 가능하다.
결과적으로 파드 사이의 통신은 항상 단순하다. 두 파드가 동일 혹은 서로 다른 워커 노드에 있는지는 중요하지 않으며, 두 경우 모두 파드안에 있는 컨테이너는 NAT가 없는 플랫한 네트워크를 통해 서로 통신하는 것이 가능하다.
이것은 실제 노드 간 네트워크 토폴로지에 관계없이, LAN에 있는 컴퓨터 간의 통신과 비슷하다.
LAN 상에 있는 컴퓨터 처럼 각 파드는 고유 IP를 가지며 모든 다른 파드에서 이 네트워크를 통해 접속할 수 있다.
이는 일반적으로 물리 네트워크 위에 추가적인 SDN계층을 통해 달성된다.
'Kubernetes' 카테고리의 다른 글
#7 YAML 디스크립터로 POD 생성하기 (0) | 2021.02.17 |
---|---|
# 6 kubernetes 구성 요소_ Pod - 2 (0) | 2021.02.09 |
#4 kubernetes 사용의 장점 (0) | 2021.02.08 |
# 3 kubernetes 동작 원리 (0) | 2021.02.03 |
#2 kubernetes 클러스터 컴포넌트 (0) | 2021.02.03 |