Pod 는 "하나 이상"의 컨테이너 그룹이다.
고래 떼(pod of whales)
In Virtualization, basic scheduling unit is VM
In Containerization, basic scheduling unit is Container
In Kubernetes, basic scheduling unit is Pod
Pod is just the most basic unit of deployments in k8s.
Ex) Node,js컨테이너 와 Nodejs로 보내주는 Data컨테이너
파드안에선 하나 죽으면 나머지 하나도 같이 죽음!
파드 안에서 IP와 Port를 같이 공유하며 같이 스케줄링 된다.
파드 하나당 ip 하나다
파드는 같은 파드 안에 속한 컨테이너에게 두 가지 공유 리소스를 제공한다. 네트워킹 과 저장소
네트워킹
각각의 파드는 유일한 IP주소를 할당 받는다. 한 파드 내부의 모든 컨테이너는 네트워크 네임스페이스와 IP주소 및 네트워크 포트를 공유한다. 파드 안에 있는 컨테이너는 다른 컨테이너와 localhost를 통해서 통신할 수 있다. 특정 파드 안에 있는 컨테이너가 파드 밖의 요소들과 통신하기 위해서는, 네트워크 리소스를 어떻게 쓰고 있는지 공유 해야 한다(예를 들어 포트 등).
저장소
파드는 공유 저장소 집합인 Volumes 을 명시할 수 있다. 파드 내부의 모든 컨테이너는 공유 볼륨에 접근할 수 있고, 그 컨테이너끼리 데이터를 공유하는 것을 허용한다. 또한 볼륨은 컨테이너가 재시작되어야 하는 상황에도 파드 안의 데이터가 영구적으로 유지될 수 있게 한다.
파드 작업
파드는 스스로 자신을 치료하지 않는다. 만약 파드가 스케줄링된 노드에 장애가 생기거나, 스케쥴링 동작이 스스로 실패할 경우 파드는 삭제된다. 그와 비슷하게, 파드는 리소스나 노드의 유지 부족으로 인해 제거되는 상황에서 살아남지 못할 것이다.
Nodes
노드에서 파드를 돌린다.
노드는 피지컬 머신일수도, 버추얼 머신일수도 있다.
쿠버네티스 마스터는 어떤 노드에 파드를 올릴지 각 노드의 가용 리소스를 보고 스케줄링 한다.
파드와 컨트롤러
컨트롤러는 다중 파드를 생성하고 관리해 주는데, 클러스터 범위 내에서의 레플리케이션 핸들링, 롤아웃 그리고 셀프힐링 기능 제공을 한다. 예를 들어, 만약 노드가 고장났을 때, 컨트롤러는 다른 노드에 파드를 스케줄링 함으로써 자동으로 교체할 것이다.
파드는 스스로 자신을 치료하지 않는다. 만약 파드가 스케줄링된 노드에 장애가 생기거나, 스케쥴링 동작이 스스로 실패할 경우 파드는 삭제된다.
컨트롤러는 파드 템플릿을 사용하여 실제 파드를 만든다.
<docs 참고>
https://kubernetes.io/ko/docs/concepts/workloads/pods/pod-overview/
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.10
Pod를 어떻게 생성하는지 알 수 있다.
우리가 필요한 쿠버네티스를 만들기 위해 어떻게 스크립트를 써야되는지가 나와있다.
언제 사용하는지 예를 들어보자.
아래와 같은 MSA에서 각 컨테이너에 들어가 도커 명령어를 치려하면
이것 또한 노가다일 수 있다.
쿠버네티스는 이 MSA를 시작하고 멈추는 등의 관리를 해준다.
파드는 하나 또는 여러개의 컨테이너 Wrapper 라고 보면 된다.
하나의 마이크로 서비스를 만드는데 약간의 도움을 줄만한 컨테이너가 필요하다면,?
서비스를 운영하는데 있어서 두 컨테이너의 로그를 한꺼번에 보고싶을때 등등
----------------
파드
노드가 종료되면 해당 노드로 스케줄 된 파드는 제한시간이 지나면 삭제되도록 스케줄된다. 해당 파드(UID로 정의된)는 새로운 노드에 “리스케줄(reschedule)” 되지 않는다. 대신, 동일한 파드로, 원한다면 이름도 동일하게, 교체될 수 있지만, 새로운 UID가 부여된다. 더 자세한 내용은 레플리케이션 컨트롤러를 참조한다.
참조
Pods in Kubernetes | Coupon: UDEMYJAN20 | Udemy: Kubernetes Made Easy | Kubernetes Tutorial