Kubernetes
상에서 배포되어있는 Pod
나 Deployment
는 스펙과 상태 등의 값을 가지고 있습니다.
이런 값을 가지고 있는 Pod
와 Deployment
를 개별 속성을 포함해 부르는 단위를 Object
라고 합니다.
Kubernetes
에서 제공하는 기본 Object
는 4가지가 존재합니다.
Pod
Pod
는 Kubernetes
에서 실행되는 최소 단위입니다.
위의 육각형은 하나의 Node
이고 API 서버와의 통신을 위한 kubelet
과 컨테이너 실행을 위한 Docker
런타임이 동작하고 있습니다.
Pod
은 독립정인 공간과 사용 가능한 IP를 가지고 있고, 하나의 Pod
는 반드시 하나 이상의 컨테이너를 가지고 있습니다.
Namespace
는 Kubernetes
클러스터에서 사용되는 리소스들을 구분해 관리하는 그룹입니다.
Pod
, Deployment
등을 배포할 때 Namespace
를 설정해주지 않으면 default라는 이름의 Namespace
에 속하게 됩니다.
실제 서비스용, 개발용, 테스트용 등 동일 클러스터에서 Namespace
를 통해 용도를 구분하여 용도별로 격리된 컨테이너를 실행시킬 수 있습니다.
Pod
가 생성될 때 Pod
에서 사용할 수 있는 디렉토리를 제공합니다.
기본적으로 Docker
와 동일하게 Pod
의 디렉토리는 영속되는 개념이 아닙니다.
하지만, Pod
가 사라지더라도 데이터를 영속적으로 보존할 수 있도록 볼륨을 설정해 줄 수 있습니다.
볼륨은 Worker
Node의 특정 디렉토리를 설정하거나,
AWS의
EBS`를 활용하는 등 여러가지 방법을 통해 선언할 수 있습니다.
Kubernetes
관리자는 "어떤 서비스를 제공하는 몇개의 Pod
을 배포하라"는 Deployment
등을 정의해 어플리케이션을 배포합니다.
이때 관리자는 어떤 Worker Node
에 어떤 어플리케이션이 들어있는 Pod
이 배포되어 있는지 알지못합니다.
또한, Pod
에 문제가 생길 경우 Kubernetes
는 해당 Pod
을 종료하고 새로운 Pod
을 생성하기 때문에 Pod
의 접속정보는 끈임없이 변화합니다.
이때, 외부에 노출되어야 하는 서비스의 경우 변화하는 접속정보로 인해 서비스 제공에 어려움을 겪을 수 있는데 이를 방지하기 위해 고정된 외부와의 연결 통로를 제공하는 것이 서비스입니다.
우리는 기본 Object
들만을 이용해도 Kubernetes
를 사용할 수 있습니다.
하지만, 말 그대로 기본적인 기능만을 제공하기 때문에 어느정도 한계점이 있습니다.
이를 해결하기 위해 좀 더 효율적으로 작동하도록 기능들을 조합하고 추가해 구현한 것이 Deployment
입니다.
이런 Deployment
외에도 DaemonSet
, ConfigMap
, ReplicaSet
, PersistentVolume
, PersistentVolumeClaimm
등 다양한 Object
들이 존재하며, 앞으로도 필요에 의해 더욱 많은 Object
들이 추가될 것입니다.