kubectl run nginx-pod --image=nginx
kubectl create deployment nginx-pod --image=nginx
run으로 생성된 Pod를 초코파이 한 개라고 한다면 create deployment를 통해 생성된 Pod는 초코파이 상자에 들어있는 초코파이 한 개이다.
run으로 파드를 생성하면 단일 파드 1개만 생성되고 관리된다. crate deployment로 파드를 생성하면 Deployment라는 관리 그룹 내에서 파드가 생성된다.
파드와 디플로이먼트는 스펙(spec)과 상태(status) 등의 값을 가지고 있다. 이러한 값을 가지고 있는 파드와 디플로이먼트를 개별 속성을 포함해 부르는 단위를 오브젝트라고 한다.
pod
쿠버네티스에서 실행되는 최소 단위, 즉 웹 서비스를 구동하는 데 필요한 최소 단위. 독립적인 공간과 사용 가능한 ip를 가지고 있다. 하나의 파드는 1개 이상의 컨테이너를 갖고 있기 때문에 여러 기능을 묶어 하나의 목적으로 사용할 수도 있지만 범용으로 사용할 때는 대부분 1개의 파드에 1개의 컨테이너를 적용한다.
네임스페이스(namespace)
쿠버네티스 클러스터에서 사용되는 리소스들을 구분해 관리하는 그룹이다. 특별히 지정하지 않으면 기본으로 할당되는 default, 쿠버네티스 시스템에서 사용되는 kube-system, 온프레미스 쿠버네티스를 사용할 경우 외부에서 쿠버네티스 클러스터 내부로 접속하게 도와주는 컨테이너들이 속해 있는 metallb-system 등이 있다.
볼륨(volume)
파드가 생성될 때 파드에서 사용할 수 있는 디렉터리를 제공한다. 기본적으로 파드는 영속되는 개념이 아니라 제공되는 디렉터리도 임시로 사용한다. 하지만 파드가 사라지더라도 저장과 보존이 가능한 디렉터리 볼륨 오브젝트를 통해 생성하고 사용할 수 있다.
서비스(Service)
파드는 클러스터 내에서 유동적이기 때문에 접속 정보가 고정일 수 없다. 따라서 파드 접속을 안정적으로 유지하도록 서비스를 통해 내/외부로 연결된다. 그래서 서비스는 새로 파드가 생성될 때 부여되는 새로운 ip를 기존에 제공하던 기능과 연결해 준다. 쿠버네티스 외부에서 쿠버네티스 내부로 접속할 때 내부가 어떤 구조로 돼 있는지, 파드가 살았는지 죽었는지 신경 쓰지 않아도 이를 논리적으로 연결하는 것이 서비스다.
기본 오브젝트만으로도 쿠버네티스를 사용할 수 있지만 한계가 있기 때문에 이를 좀 더 효율적으로 작동하도록 기능들을 조합하고 추가해 구현한 것이 드플로이먼트이다.
이외에도 데몬셋, 컨피그맵, 레플리카셋, pv, pvc, 스테이트풀셋, 등이 있다.
쿠버네티스에서 가장 많이 쓰이는 디플로이먼트 오브젝트는 파드에 기반을 두고 있으며, 레플리카셋 오브젝트를 합쳐 놓은 형태이다.