쿠버네티스에서 파드와 디플로이먼트는 spec과 status 등의 값을 가지고있다. 이러한 값을 가지고있는 pod와 deployment를 개별 속성을 포함해 부르는 단위를 object라고 한다.

기본 오브젝트

pod

쿠버네티스에서 실행되는 최소 단위, 즉 웹서비스를 구동하는데 필요한 최소단위다. 독립적인 공간과 사용 가능한 IP를 가지고있다. 하나의 pod는 하나의 container를 가지고있다. 범용으로 사용할 때는 대부분 1개의 pod에 1개의 container를 적용한다

namespace

클러스터에서 사용되는 resource들을 구분해 관리하는 그룹이다. 특별히 지정해주지 않으면 기본으로 할당되는 default, 쿠버네티스 시스템에서 사용되는 kube-system, 온프레미스에서 쿠버네티스를 사용할 경우 외부에서 쿠버네티스 클러스터 내부로 접속하게 도와주는 컨테이너들이 속해있는 metallb-system이 있다.

volume

pod가 생성될 때 pod에서 사용할 수 있는 디렉터리를 제공한다. pod는 영속되는 개념이 아니라 제공되는 디렉터리도 임시로 사용된다. pod가 사라지더라도 저장과 보존이 가능한 디렉터리를 volume을 통해 생성하고 사용할 수 있다.

service

pod는 cluster내에서 유동적이기 때문에 접속 정보가 고정일 수가 없다. 따라서 pod 접속을 안정적으로 유지하도록 서비스를 통해 내/외부로 연결된다. pod가 새로 생성될때 새로운 ip를 기존에 제공하던 기능과 연결해준다. 쿠버네티스 외부에서 내부 상태가 어떻게 변하든 신경쓰지 않고 연결하는 것이 서비스다. 로드밸런서, 게이트웨이와 비슷한 역할을 한다.

디플로이먼트

기본 오브젝트만으로는 한계가 있다. 효율적으로 작동하도록 기능들을 조합하고 추가한 것이 디플로이먼트다. 이 외에도 데몬셋, 컨피그맵, 레플리카셋, PV, PVC, 스테이트풀셋, 등이 있다.

디플로이먼트 오브젝트는 파드 기반이며 레플리카셋 오브젝트를 합쳐 놓은 형태다.

api서버와 컨트롤러 매니저는 단순히 파드가 생성되는 것을 감시하는 것이 아닌 디플로이먼트 처럼 레플리카셋을 포함하는 오브젝트의 생성을 감지한다.

레플리카셋

많은 사용자를 대상으로하는 웹 서비스를 하려면 다수의 파드가 필요한데 이를 하나씩 생성한다면 매우 비효율 적일것이다. 쿠버네티스에서는 다수의 파드를 만드는 레플리카셋 오브젝트를 제공한다. 파드3개를 만든다고 레플리카셋에 선언하면 컨트롤러 매니저와 스케줄러가 워커 노드에 파드 3개를 만들도록 선언한다.

Deployments

kubectl create deployment 와 같은 명령어로 디플로이먼트 오브젝트를 생성하면서 레플리카셋 설정만큼의 pod가 생성된다. 혹은 kubectl apply로 미리 정의한 deployment에 대한 정보를 기입한 yaml파일로 오브젝트를 실행시키면 된다.