쿠버네티스에서 새로운 Pod을 만들기 위한 과정 (시퀀스 다이어그램)
1. Master Node의 kube-apiserver에 Pod 생성을 요청
2. kube-apiserver는 etcd에 새로운 상태를 저장
3. kube-apiserver가 etcd의 상태 변경을 확인하여, kube-controller-manager에게 새로운 Pod 생성을 요청
4. kube-controller-manager는 새로운 Pod를 생성(no assign)을 kube-apiserver에 전달하고, 이를 전달받은 kube-apiserver는 etcd에 저장
5. kube-scheduler는 kube-apiserver에 의해 Pod(no assign)가 확인되면, 조건에 맞는 Worker Node를 찾고 해당 Pod를 할당하기 위해 우선, kube-apiserver는 etcd에 업데이트
6. 모든 Worker Node의 kubelet은 자신의 Node에 할당되었지만, 생성되지 않은 Pod가 있는지 체크하고 있다면 Pod를 생성
7. 해당 Worker Node의 kubelet은 Pod의 상태를 주기적으로 API Server에 전달
흐름을 보면 각각의 컴포넌트들이 서로 개별적으로 통신하지 않고, API Server를 통해서 통신하는 것을 알 수 있다.
또한 컴포넌트들은 각기 현재 상태를 체크하고 독립적으로 동작하게 된다.
각 모듈이 하는 일
Kubectl
- ReplicaSet 명세를 yml파일로 정의하고 kubectl 도구를 이용하여 API Server에 명령을 전달
- API Server는 새로운 ReplicaSet Object를 etcd에 저장
Kube Controller
- Kube Controller에 포함된 ReplicaSet Controller가 ReplicaSet을 감시하다가 ReplicaSet에 정의된 Label Selector 조건을 만족하는 Pod이 존재하는지 체크
- 해당하는 Label의 Pod이 없으면 ReplicaSet의 Pod 템플릿을 보고 새로운 Pod(no assign)을 생성. 생성은 역시 API Server에 전달하고 API Server는 etcd에 저장
Scheduler
- Scheduler는 할당되지 않은(no assign) Pod이 있는지 체크
- 할당되지 않은 Pod이 있으면 조건에 맞는 Node를 찾아 해당 Pod을 할당
Kubelet
- Kubelet은 자신의 Node에 할당되었지만 아직 생성되지 않은 Pod이 있는지 체크
- 생성되지 않은 Pod이 있으면 명세를 보고 Pod을 생성
- Pod의 상태를 주기적으로 API Server에 전달
쿠버네티스 서비스 배포 방법
쿠버네티스 배포에 필요한 핵심 리소스는 Deployment, ReplicaSet, Service, Ingress 이다.
- Service: pod 여러개를 하나의 서비스 IP(고정 IP)에 할당
- Ingress: 애플리케이션 단의 네트워크 설정을 담당, 도메인 기반 라우팅, TLS 종료 등을 담당
- Replicaset: Pod을 복제하여 가용성을 높이는 역할
- Deployment: 배포를 위한 기능을 제공, 롤링 업데이트시 조정되는 Pod의 개수를 설정할 수 있고 배포 히스토리를 통해 롤백도 가능
쿠버네티스 기반 컨테이너 애플리케이션의 서비스 배포 형태
1) 사용자로부터 요청이 오면 Ingress는 요청 DNS(URL)에 해당하는 IP와 연결
2) Ingress로부터 트래픽을 전달받은 Service는 레이블 셀렉터로 연결되어있는 Pod에 요청을 전송
3) Pod은 Deployment의 ReplicaSet에 포함되어있어, replicas의 개수만큼 Pod를 유지함으로써 가용성과 안정성을 보장받으며 안정적인 서비스가 제공될 수 있도록 설정
🔗참고
'DevOps > Kubernetes' 카테고리의 다른 글
[Kubernetes] kubeadm을 사용한 K8s 설치 및 K8s 클러스터 생성 (0) | 2022.05.16 |
---|---|
[Kubernetes] Kubernetes(쿠버네티스)란 ?! (0) | 2022.05.16 |
[Kubernetes] Object - Volume이란 (3) (0) | 2022.03.28 |
[Kubernetes] Object - Volume이란 (2) (0) | 2022.03.28 |
[Kubernetes] Object - Volume이란 (1) (0) | 2022.03.28 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!