초보를 위한 쿠버네티스 안내서를 수강하며 정리한 내용입니다.
Pod
- 쿠버네티스에서 컨테이너를 관리하는 가장 작은 배포 단위
- 쿠버네티스는 컨테이너를 직접 관리하지 않고 Pod로 감싸서 관리
- 컨테이너를 배포하는 것이 아니라 Pod를 배포
- Pod마다 IP 주소를 부여 받음, IP 주소를 통해서 내부적으로 통신할 수 있음
- Pod 안에 컨테이너가 하나 이상 존재
- Pod 안에 있는 컨테이너끼리 폴더를 공유할 수 있음
- Pod 안에 있는 컨테이너끼리 포트를 localhost로 공유할 수 있음
ReplicaSet
- 여러 개의 Pod를 관리
- 새로운 Pod는 Template을 참고하여 생성
Deployment
- 배포 버전 관리
- 내부적으로 ReplicaSet을 이용
- 무중단으로 배포 버전을 바꿀 때 기존의 ReplicaSet과 다른 새로운 ReplicaSet을 만듦
Service
ClusterIP
- 클러스터 내부에서 사용하는 프록시, 외부에서는 접근 불가
- Pod에 로드 밸런싱
- Pod는 동적이지만 Service는 고유한 IP를 가짐
- Pod가 사라지고 새로 생성되면서 Pod의 IP도 언제든 사라지고 바뀌게 됨, 요청을 Pod로 바로 보내지 않고 Service에 요청을 보내면 Pod에 전달됨
- 클러스터 내부에서 Service 연결은 DNS를 이용
NodePort
- Node에 노출되어 외부에서 접근 가능한 Service
- Node에 포트가 생기고 이를 통해 접속하면 해당 요청이 ClusterIP를 거쳐 Pod로 전달됨
- 모든 Node에 동일한 포트로 생성됨, 어느 노드로 요청을 보내도 알맞은 ClusterIP를 찾아 요청을 전달
LoadBalancer
- 도메인이 연결된 특정 노드가 중단됐을 때를 대비하여 NodePort 앞에 LoadBalancer를 둠
- LoadBalancer로 보낸 요청은 NodePort와 ClusterIP를 거쳐 Pod로 전달됨
Ingress
- 도메인 또는 경로별 라우팅
- 도메인 이름과 도메인 뒤에 붙는 경로에 따라서 내부에 있는 ClusterIP에 연결할 수 있음
일반적인 구성
- Deployment를 생성하면 Deployment가 ReplicaSet을 자동으로 생성하고 ReplicaSet이 자동으로 Pod를 생성
- 외부에 노출하기 위해 ClusterIP와 Ingress 생성, Ingress를 만들면 NodePort와 LoadBalancer가 자동으로 생성됨
- 클라이언트는 도메인으로 접속하면 LoadBalancer, NodePort, ClusterIP를 거쳐서 Pod에 연결됨
그 외 기본 오브젝트
- Volume: 스토리지
- Namespace: 논리적인 리소스 구분
- ConfigMap / Secret: 설정
- ServiceAccount: 권한 계정
- Role / ClusterRole: 권한 설정