쿠버네티스란?
쿠버네티스가 왜 필요한가
배포해야할 마이크로서비스가 많아 지면?
수많은 마이크로서비스를 여러 서버에 효율적으로 배치하는 것은 어렵다
도커를 이용한 애플리케이션 배포
- 개발 서버에서 개발 후 이미지 build
- 도커 이미지 레지스트리 서버에 push
- 운영 서버에서 pull 후 실행
쿠버네티스 기능들
-
자동화된 빈 패킹(bin packing)
컨테이너화된 작업을 실행하는 데 사용할 수 있는 쿠버네티스 클러스터 노드를 제공한다. 각컨테이너가필요로하는CPU와메모리(RAM)를 쿠버네티스에게 지시한다. 쿠버네티스는 컨테이너를 노드에 맞추어서 소스를 가장 잘 사용할 수 있도록 해준다.
-
자동화된 복구(self-healing)
쿠버네티스는 실패한 컨테이너를 다시 시작하고, 컨테이너를 교체한다. ‘사용자 정의 상태 검사’에 응답하지 않는 컨테이너를 죽인다. 서비스 준비가 끝날 때까지 일련의 과정을 클라이언트에 보여주지 않는다.
-
자동화된 롤아웃과 롤백
쿠버네티스를 사용하여 배포된 컨테이너의 원하는 상태를 서술할 수 있다. 현재 상태를 원하는 상태로 설정한 속도에 따라 변경할 수 있다. 쿠버네티스를 자동화해서 배포용 새 컨테이너를 만들고, 기존 컨테이너를 제거하고, 모든 리소스를 새 컨테이너에 적용할 수 있다.
데이터 일관성을 위한 낙관적 동시성 제어(resourceVersion)
- 리소스 버전을 통하여 제어
- 사용자1과 사용자2가 v1을 조회
- 사용자1이 v1을 수정하여 v1.1로 저장하면
- 사용자2는 v1상태에서 수정한 내용을 반영할 수 없다.
kubernetes 개념
- 공유 영구 저장소에 직접 접근 불가
- 더 높은 수준의 추상화를 위해 REST API를 통해서만 접근 가능
-
주요 설계목표는 컨테이너로 향상된 리소스 활용의 이점을 누리면서도 복잡한 분산시스템을 쉽게 배포하고 관리할 수 있게 만드는 것이었다
- 여러 개의 컨테이너화된 애플리케이션을 여러 서버(쿠버네티스 클러스터)에 자동으로 배포, 스케일링 및 관리해 주는 오픈소스 시스템
클러스터
- 여러 개의 서버를 하나로 묶은 집합, 하나의 서버처럼 동작
-
서버를 추상화
- 애플리케이션 컨테이너를 배포하기 위한 서버 집합
- server(node) server(node) server(node) 를 하나의 집합으로
Master 노드의Control Plane(제어판)
클러스터의 상태를 저장하고 관리하는 서버
- etcd (key-value data store) 영구저장소 클러스터에 배포된 애플리케이션 실행 정보를 저장
- API Server 클러스터 상태 조회, 변경을 위한 API 인터페이스 제공
- Scheduler
- Controller Managers
Worker 노드
컨테이너 실행을 담당
- Kubelet, Container Runtime (Docker, …)
- kube-proxy
‘쿠버네티스에 애플리케이션 컨테이너를 배포한다’ 란?
쿠버네티스 오브젝트 Manifest 파일을 작성해서 마스터 노드에있는 API Server에게 요청을 보내는 행위
- Manifest 파일이란?
- 쿠버네티스 오브젝트를 생성하기 위한 필수 정보
- “일을 시키기 위한 지시서”