티스토리 뷰
쿠버네티스?
쿠버네티스(Kubernetes)는 컨테이너화 된 애플리케이션의 대규모 배포,
스케일링 및 관리를 간편하게 만들어주는 오픈 소스 기반 컨테이너 오케스트레이션(Container Orchestration) 도구
다.
- 쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼이다.
- 쿠버네티스는 선언적 구성과 자동화를 모두 용이하게 해준다.
- 쿠버네티스는 크고, 빠르게 성장하는 생태계를 가지고 있다.
- 쿠버네티스 서비스, 기술 지원 및 도구는 어디서나 쉽게 이용할 수 있다.
오케스트레이션이란?
"컨테이너화 된 애플리케이션에 대한 자동화된 설정, 관리 및 제어 체계"
마이크로서비스 아키텍처(MSA; Microservice Architecture)에서는 프로젝트에 포함된 세부 기능들이 작은 서비스 단위로 분리되어 구축되며
이 각각의 서비스를 구현할 때 컨테이너 기술이 이용된다.
대규모의 상용 프로젝트 환경에서 수많은 컨테이너를 이런 식으로 제어하는 것은 불가능하며
동시에 수백, 수천 개의 컨테이너를 배포하고 관리해야 하는 상황이라면 4가지 이슈
에 대한 해답을 반드시 찾아야 한다.
4가지 이슈
- 배포 관리 : 어떤 컨테이너를 어느 호스트에 배치하여 구동시킬 것인가? 각 호스트가 가진 한정된 리소스에 맞춰 어떻게 최적의 스케줄링을 구현할 것인가? 어떻게 하면 이러한 배포 상태를 최소한의 노력으로 유지 관리할 수 있을 것인가?
- 제어 및 모니터링 : 구동 중인 각 컨테이너들의 상태를 어떻게 추적하고 관리할 것인가?
- 스케일링 : 수시로 변화하는 운영 상황과 사용량 규모에 어떻게 대응할 것인가?
- 네트워킹 : 이렇게 운영되는 인스턴스 및 컨테이너들을 어떻게 상호 연결할 것인가?
위 4가지 이슈를 해결하기 위해 말들어진 개념이 컨테이너 오케스르레이션
이다.
쿠버네티스 핵심 설계 사상
선언적 구성 기반의 배포 환경
쿠버네티스는 원하는 상태(Desired state)와 현재의 상태(Current state)가 상호 일치하는지를 지속적으로 체크하고 업데이트한다.
따라서 내게 필요한 요소에 대해 원하는 상태를 설정하는 것만으로도 호스트의 리소스 현황에 맞춰 최적의 배치로 배포되거나 변경되며
만약 특정 요소에 문제가 생겼을 경우, 쿠버네티스는 해당 요소가 원하는 상태로 다시 복구될 수 있도록 필요한 조치를 자동으로 취한다.
기능단위의 분산
쿠버네티스에서는 각각의 기능들이 개별적인 구성 요소로서 독립적으로 분산되어 있다.
실제로 Node, ReplicaSet, Deployment, Namespace 등 클러스터를 구성하는 주요 요소들이 모두 Controller 로서 구성되어 있으며,
이들은 Kube Controller Manager 안에 패키징 되어 있다.
클러스타 단위 중앙 제어
쿠버네티스에서는 전체 물리 리소스를 클러스터 단위로 추상화하여 관리한다.
클러스터 내부에는 클러스터의 구성 요소들에 대해 제어 권한을 가진 Control Plane 역할의 Master Node를 두게 되며,
관리자는 이 마스터 노드를 이용하여 클러스터 전체를 제어한다.
동적 그룹화
쿠버네티스의 구성 요소들에는 쿼리 가능한 Label과 메타데이터용 (Annotation에 임의로 키-값 쌍을 삽입할 수 있다.
관리자는 selector를 이용해서 레이블 기준으로 구성 요소들을 유연하게 관리할 수 있고,
어노테이션에 기재된 내용을 참고하여 해당 요소의 특징적인 내역을 추적할 수 있다.
API 기반 상호작용
쿠버네티스의 구성 요소들은 오직 Kubernetes API server를 통해서만 상호 접근이 가능한 구조를 가진다.
마스터 노드에서 kubectl
을 거쳐 실행되는 모든 명령은 이 API 서버를 거쳐 수행되며, Control Plane에 포함된 클러스터
제어 요소나 Worker Node에 포함된 kubelet, 프록시 역시 API 서버를 항상 바라보게 되어 있다.
도커와 쿠버네티스의 차이
도커는 하나의 image를 컨테이너에 띄우지만
쿠버네티스는 컨테이너를 동적으로 여러개릐 컨테이너로 필요한 만큼 생성하거나 분리하여 MS 운영하는 도구이다.
Reference
'Docker 🐋' 카테고리의 다른 글
Docker network (0) | 2022.06.19 |
---|---|
Docker Logging - elk (0) | 2022.06.18 |
컴포넌트에서의 build 와 image의 차이 (0) | 2022.06.16 |
Docker - DinD DooD (1) | 2022.06.15 |
Docker - Volume and Mount (0) | 2022.06.14 |
- Total
- Today
- Yesterday
- 매트랩
- nginx
- Matlab
- docker
- spring-cloud
- CS
- 자격증
- 릿코드
- 디자인패턴
- springboot
- kakao
- 프로그래머스
- Solid
- C언어
- 면접
- 스프링
- 백준
- OOP
- Algorithm
- 자바
- ajax
- interview
- 그래프
- 수학
- security
- java
- JPA
- 알고리즘
- Spring
- 스프링부트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |