1.kubernetes object란?
kubernetes의 기본 오브젝트는 kubernetes에 의해서 배포 및 관리되는 가장 기본적인 오브젝트로, Pod, Service, Volume, Namesapce 4가지가 있다.

Pod는 쿠버네티스에서 컨테이너의 기본 단위로, 가장 기본적인 배포 단위이다.
Pod는 1개 이상의 컨테이너로 구성된 컨테이너의 집합이다.

pod가 생성될 때 컨테이너가 실행되면서 로컬 디스크를 생성하는데, 이 로컬 디스크의 경우 컨테이너가 재실행되거나 종료되면 로컬 디스크안에 있는 파일도 같이 손실 된다는 단점이 있다.
파일을 영구적으로 저장하는 스토리지가 필요하게 되었고, 쿠버네티스는 이를 위해 영구적인 스토리지를 제공하는데 이를 volume이라고 한다.
볼륨은 pod가 실행될 때 컨테이너에 마운트되어 사용되며 쉽게 컨테이너의 외장디스크라고 생각하면 된다.
볼륨은 NFS, Cinder, CephFS등과 같은 네트워크 스토리지부터 AWS EBS(Elastic Block Store), Google PD(Persistent Disk), Azure Disk Storage등과 같은 클라우드 스토리지 까지 다양한 유형의 볼륨들을 지원하고 있다. 유형에 따라 볼륨이 Pod내부에 존재할 수도 있고 Pod외부에 존재할 수도 있다.

클러스터 내부에서 실행되는 pod들은 언제든지 삭제됐다 생성될 수 있는 반 영속적인 특성을 지니고 있는데 pod가 생성될 때 마다 새로운 내부 IP를 할당하게 되므로, 클러스터 내/외부와 통신을 계속 유지하기 어렵다.
이를위해 쿠버네티스에서는 Service라는 기능을 제공하는데 이는 라벨링을 통해 같은 라벨을 가진 pod를 묶어 단일 엔드포인트(ClusterIP, NodePort, LoadBalancer, ExternalName)를 제공해주는 기능을 한다. Service는 클러스터 내부에서 고정적인 IP를 갖고 있으며, pod가 변경되어도 서비스의 IP는 변하지 않기 때문에 클러스터 내/외부와의 통신을 계속 유지할 수 있다.
또한 Service는 pod간의 로드밸런싱을 지원하고, 멀티 포트도 지원한다.

라벨은 쿠버네티스의 리소스를 선택하는데 사용된다.
모든 리소스는 라벨을 가질 수 있고, 라벨에 따라서 특정 라벨을 가지고 있는 리소스만 선택할 수도 있다.
라벨로 선택된 리소스는 service에 연결하거나 네트워크 접근 권한을 부여하는 등 다양하게 사용할 수 있다.
라벨은 Key:Value형태로 정의할 수 있으며, 하나의 리소스에 여러개의 라벨을 동시에 적용할 수도 있다.
Namespace

Namespace는 쿠버네티스 클러스터 내의 리소스들을 논리적으로 구분할 수 있게 해주는 하나의 단위이다.
위의 예시처럼 모니터링을 위한 리소스는 monitoring이라는 namespace에서 생성할 수 있고, 테스트를 위한 리소스들은 test라는 namespace에서 생성할 수 있다.
namespace는 논리적으로 구분해놓은 것이고 물리적으로 구분해놓은것이 아니기 때문에 다른 namespace간의 pod라도 통신은 가능하다.