쿠버네티스의 핵심은
상태
이며 쿠버네티스를 사용하기 위해 어떤상태
가 있고 어떻게상태
를 선언하는지를 알아야함
쿠버네티스는
상태
를 관리하기 위한 대상을오브젝트
로 정의
오브젝트 종류
Pod
- 쿠버네티스에서 배포할 수 있는 가장 작은 단위
- 한 개 이상의 컨테이너와 스토리지, 네트워크 속성을 가짐
- Pod에 속한 컨테이너는 스토리지와 네트워크를 서로 공유함
- 서로 localhost로 접근 가능
Replicaset
- Pod를 여러 개 (한 개 이상) 복제하여 관리하는 오브젝트
- Pod를 생성하고 개수 유지를 위해 반드시 Replicaset을 사용해야함
- 복제할 개수, 개수를 체크할 라벨 선택자, 생성할 Pod의 설정값등을 가지고 있음
- 직접적으로 Replicaset을 사용하기보단 Deployment등 다른 오브젝트에 의해서 사용되는 경우가 많음
Service
- 네트워크와 관련된 오브젝트
- Pod를 외부 네트워크와 연결
- 여러 개의 Pod를 바라보는 내부 로드 밸런서를 생성 시 사용
- 내부 DNS에 서비스 이름을 도메인으로 등록하기 때문에 서비스 디스커버리 역할도 함
- Endpoints 리소스
- Service와 Pod는 직접 연결되어 있는 구조가 아니라 실제로는 그 사이에 Endpoint 리소스가 위치해서 관리를 함
kubectl describe
명령을 통해 service 하위에 Endpoints라는 항목이 service와 연결된 Pod들의 IP와 Port를 리스트 형태로 가지고 있음- kubernetes는 service에 요청이 들어오면 이 Endpoint 중 하나로 리다이렉트함
- service와 endpoint 연결 관리는 proxy 모듈에서 수행
- EndpointSlice 리소스
- 초창기 설계보다 쿠버네티스 클러스터에서 더 많은 수의 파드로 더 많은 트래픽을 전송하는 방향으로 성장하게 됨
- 그에 따라 Endpoints 리소스가 처리할 수 있는 한계에 도달
- 서비스에 연결된 모든 네트워크 Endpoint가 한 Endpoint 리소스에 연결되다 보니 Endpoint 변경 시 성능에 큰 영향을 미치게 됨
- EndpointSlice는 기존의 Endpoint를 포함하는 형태로 한 단계 더 추상화된 리소스
Volum