일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- javascript
- cache
- Java
- ES6
- 자바스크립트
- Machine Learning
- bean
- 구버전
- 리액트
- data structure
- 캐시
- kotlin
- 자료구조
- C++
- 테스트 커버리지
- 어노테이션
- 스프링
- spring boot
- AWS
- jQuery
- log4j2
- spring
- 하이브리드앱
- 제이쿼리
- 스프링 부트
- react
- Deep Learning
- JPA
- Test Coverage
- annotation
- Today
- Total
박서희연구소
[Kubernetes] Kubernetes Cluster Architecture(쿠버네티스 클러스터 아키텍쳐) 본문
[Kubernetes] Kubernetes Cluster Architecture(쿠버네티스 클러스터 아키텍쳐)
SEOHUI PARK 2024. 6. 19. 00:46Kubernetes란?
Kubernetes는 Application의 많은 Instance를 Container의 형태로 자동화된 방식으로 쉽게 deploy하고, host하며 Application 내의 다른 서비스들끼리 소통 할 수 있도록 도와준다.
Kubernetes Cluster
Kubernetes Cluster는 Node의 Set으로 구성되어 있다. 물리적이거나, 가상의 형태일 수 있고, 온프레미스 또는 클라우드 상에 있을 수 있고, Containter의 형태로 Application을 host한다.
Cluster 안에는 Worker Node가 존재하는데 이는 선박으로 비유할 수 있으며, 아래와 같은 역할을 수행한다.
- Container 적재 가능
하지만 누군가는 선박에 Container를 어떻게 적재할지 계획하고, 적재해주어야 하며, 위치를 모니터링하고 추적하며 적재 전 과정 등을 관리해야 하기에 이런 역할을 해줄 제어선이 필요하다.
제어선은 Kubernetes Cluster의 Master Node로 비유할 수 있다.
Master Node는 아래와 같은 역할을 수행한다.
- Kubernetes Cluster를 관리
- 다른 Node에 대한 정보를 저장
- 어떤 Container가 어디로 갈 것인지 계획
- Node와 Container를 모니터링
많은 어떤 선박에서 언제, 어떤 Container가 매일 적재되고 하역을 한다면, 이러한 정보를 유지해야할 것이다.
이러한 정보는 ETCD라 불리는 고가용성의 Key-Value DB에 저장된다.
선박이 도착할 때, 크레인을 사용해 Container를 적재할 것이다.
크레인은 Container의 사이즈, 용량, 이미 탑재된 Container의 수, 선박의 목적지, 어떤 형태의 Container를 실을 수 있는지 등의 정보를 식별해야 한다.
이런 역할을 Kube-Scheduler가 한다.
Kube-Scheduler의 역할
- Container 리소스 요구사항, Worker Node의 용량 또는 제약 조건과 같은 기타 정책을 기반으로 Container를 배치할 적절한 Node 식별
Container가 손상되거나 파괴되는 상황이 있을 수 있는데 이런 상황에 새로운 Container를 만들 수 있도록 처리가 필요할 것이다.
이런 역할에 도움을 주는 친구들이 Controller-Manager, Node-Controller, Replication-Controller 이다.
Controller-Manager, Node-Controller, Replication-Controller 의 역할
- Cluster에서 새로운 Node를 온보딩하며, Node를 사용 할 수 없게 되거나, 파괴된 상황을 처리
- Replication Group에서 항상 원하는 수의 Container가 실행되도록 보장
하지만 어떻게 위의 녀석들과 소통을 하고 관리할 수 있을까?
Kube API Server가 있다. Kubernete의 주요 관리 컴포넌트이다.
Kube API Server의 역할
- Cluster 내의 모든 operation을 위한 오케스트레이션
- 외부의 사용자가 Cluster에 대한 작업 요청을 위한 Kubernetes API 역할
- Cluster의 상태를 모니터링하고 필요에 따라 변경하기 위한, 다양한 Controller와 서버와 통신하기 위한 Worker Node에 노출
근데, Container란 녀석을 실행하기 위해선 어떻게 해야할까?
이 녀석을 실행하기 위해서는 Container Runtime Engine이 필요하다.
대중적으로 Docker가 있다. 따라서 우리는 Docker가 필요하거나 이와 동등한 무엇인가가 필요하다.
Kubernetes는 ContainerD, Rocket과 같은 다른 Runtime Engine을 지원한다.
다음은 선박의 Container의 상태와 선박의 상태에 대해 보고서를 Master에게 전송해줄 캡틴이 필요하다.
그 역할을 해주는 것이 Kubelet이란 녀석인데, Cluster의 각 Node에서 실행되는 에이전트이다.
Kubelet의 역할
- Kube API Server로 부터 지침을 듣고 필요에 따라 Node에 Container를 deploy 하거나 파괴함
Kubelet은 선박의 Container 관리를 하는 캡틴에 가깝지만, Worker Node에서 실행되는 Application은 서로 통신이 가능해야 한다.
Web 서버가 다른 노드의 DB 서버에 어떻게 도달할 수 있을까?
이는 Kube Proxy Service 라고 알려진 또 다른 Worker Node에서 실행되는 또 다른 Component에 의해, Worker Node 사이의 통신을 가능하게 한다.
Kube Proxy Service의 역할
- Worker Node에서 실행중인 Container에 서로 연결될 수 있도록, 필요한 규칙이 있는지 확인
요약하면, 우리는 Master와 Worker Node가 있고, Master는 ETCD Cluster를 갖고 있으며, Cluster에 대한 정보를 저장한다.
Kube Scheduler는 Node의 Container 또는 Appliaction의 scheduling을 책임진다.
- 끝 -