Kubernetes Object
Kubernetes에서 기본이 되는 Object에 대해 알아보려고 합니다.
Object
- Kubernetes를 구성하는 단위
- 기본적인 구성 단위(Base Object)
- 기본 오브젝트 관리 및 추가적인 기능(Controller)
Base Object
Pod
- 배포 할 수 있는 최소 단위
- 1개 이상의 Container로 구성된 집합
- Pod에는 Unique IP Address 할당
- 같은 Pod 내의 Container는 IP와 Port를 공유 → Localhost를 사용하여 통신 가능
- 같은 Pod 내의 container에는 disk volume 공유 가능
Service
- Pod는 계속하여 임의의 IP를 할당받는데, 외부 사용자가 EndPoint를 계속하여 유지하기가 어렵다.
- Cluster 내부에서 고정적인IP를 할당하여 계속하여 통신을 유지하게 만들어준다.
- NodePort, LoadBalancer, ExternalName, ClusterIP
- Pod간 Loadbalancing, multi port 지원
Label
- pod, deployment, service .. 은 label을 가질 수 있다.
- Kubernetes의 Resource를 선택하는데 활용
- Service에서 특정 Pod만 연결하여 주거나 네트워크 접근 권한을 부여에 사용
- Dictionary(Key:Value) 형태 혹은 하나의 Resource에 여러 Label을 부여 가능
Volume
- Docker Volume과 같은 역할
- 컨테이너가 삭제되어도 운영이 가능한 Stroage(FileSystem)
NameSpace
- Resource들을 논리적으로 구분 할 수 있는 단위
- Namespace로 나누어진 resource들끼리 구분되어 구성
- 하나의 Cluster에서 논리적으로 구분해두었기 때문에 물리적으로 연결이 가능하다.
- Network 정책을 통해 Namespace간의 통신을 막는 것은 가능하지만, 클러스터 분리시키는 것이 바람직하다.
Controller
- Base Object들을 배포,운영을 편리하게 관리하기 위함
ReplicationController
- Pod를 관리해주는 역할
- 지정된 Replica 수보다 Pod가 많다면 줄이고 반대의 경우 Pod 추가하여 원하는(Spec)과 동일하게 한다.
-
Pod가 삭제되거나, 비정상 종료되는 경우 Pod를 자동으로 교체
- Selector
- Label을 기반으로, 지정된 Label의 모든 Pod 관리
- ReplicationController는 eqaulity 기반의 Selector를 사용
==
,≠
만 비교
- Replica
- ReplicationController에 의해 관리되는 Pod 수
RelicaSet
- Replication Controller의 상위 버전
- Replicaset을 사용하는 것이 좋다.
- Selector
- Label을 기반으로, 지정된 Label의 모든 Pod 관리
- ReplicationController와 달리in, notin, exists 연산자 지원
- Rolling-Update
- 사용 불가
- Deployment를 통해 처리해야한다.
Deployement
- Replicaset의 상위 개념
- Pod, Replicaset 배포 관리
- Rollback, 새로운 버전 배포에 특화
- Deployment 단위의 Pod, Replicaset을 관리하여 운영
- 배포 = Rolling Update, Blue/Green, Canary
- Name = Prefix_Name+영문+숫자
StatefuleSet
- Pod의 상태를 유지하여 관리
- Deployment와 달리 Pod가 삭제하고 생성하게 되면, 새로운 가상환경(Container) → 기존 상태 그대로 유지
- Name = Prefix_Name+일련번호
- Pod가 삭제되는 경우 Deployment에 비해 빠르게 작업을 수행하는 것이 불가능
- 상태를 유지하기 위해 다른 Pod에 분산하여 저장
- E.g) 데이터가 유지되어야하는 상태값 저장 시
- Delete, Rolling Update 배포만 지원
DaemonSet
- Pod를 생성 관리
- 전체 노드에서 항상 실행되어야 하는 경우(로그성)
- 모든 노드에 균등하게 생성
Job
- 백업, 배치 작업과 같이 주기적으로 실행되는 일회성 작업에서 사용
CronJob
- Crontab, Airflow, Jenkins와 같이 Job을 주기적으로 실행되는 작업에서 사용