pod
- 가장 작은 배포 단위
- pod마다 고유한 IP를 할당
- pod은 여러개의 컨테이너 또는 단일 컨테이너로 이루어질 수 있다.
- host 폴더 공유
- localhost 네트워크 공유
ReplicaSet
- 여러개의 pod을 관리
- replicas : 관리할 pod의 개수를 결정
- 새로운 pod은 pod template을 참고하여 생성
- 새로운 pod을 추가하거나 기존 pod을 제거하여 원하는 수를 유지
Deployment
- 배포 버전을 관리
- ReplicaSet을 이용하여 버전을 관리한다.(ex. 무중단 배포)
다양한 Workload
- Workload란?
쿠버네티스 상에서 작동되는 애플리케이션
- DAEMON SET
모든 노드에 꼭 하나씩만 있기를 바라는 pod을 만들고 싶을 때 사용 (ex. 로그 수집기, 모니터링)
- STATEFUL SETS
순서대로 pod을 실행하고 싶거나 같은 볼륨을 재활용 하고 싶은 경우 사용
- JOB
한번 실행하고 죽는 pod
Service
ClusterIP
- 클러스터 내부에서 사용하는 프록시(로드밸런서)
- pod 업데이트 시 pod이 죽고 새로 뜨게된다. 이 때 pod의 IP는 언제든지 바뀌게 된다. 이러한 이유 때문에 ClusterIP를 사용한다.
- Cluster 내부에서 서비스 연결은 DNS를 이용
NodePort
- ClusterIP는 클러스터 내부에서만 사용할 수 있다. 즉 ClusterIP를 이용하여 외부(브라우저)에서 직접 접근할 수 없다.
- 노드에서 노출되어 외부에서 접근 가능한 서비스
- 모든 노드에 동일한 포트로 생성
- 어느 노드로 이동한던 간에 동일한 클러스터 IP를 찾아가게 된다.
LoadBalancer
- 노드가 여러개 있다고 가정하고 만약 도메인이 하나의 노드에만 연결되어 있는 상태에서 그 하나의 노드가 죽는다면 접속이 불가능해지게 된다.
- 하나의 IP 주소를 외부에 노출
- ex) 만약 연결되 있던 노드가 죽으면 → 연결이 안된다. LoadBalancer를 이용하여 이를 해결하자.
흐름
web browser → LoadBalancer → NodePort → ClusterIP → pod
Ingress
- 도메인 또는 경로별로 라우팅을 해준다.
- 모든 요청에 대하여(??) 전부 NodePort 또는 전부 LoadBalancer로 만들면 자원이 낭비가 된다.
- Nginx와 같은 기존 기술들을 k8s에 맞게 포장하여 사용됨
- Ingress를 사용하게 되는 경우 NodePort와 LoadBalancer가 자동을 따라온다.