📌 쿠버네티스란?
컨테이너 오케스트레이션
컨테이너의 전반적인 라이프사이클을 관리해주는 플랫폼.
데이터 센터(클러스터) 운영체제
데이터 센터(클러스터) : 여러 컴퓨터의 집합
운영체제 : 프로세스 스케줄링, 자원 관리, 인터페이스
=> 쿠버네티스는 여러 컴퓨터의 집합으로 이뤄진 거대한 시스템을 제어 가능하도록, 인터페이스와 기능들을 제공한다!
=> 쿠버네티스라는 운영체제를 사용하여, 클러스터 시스템을 제어한다!
=> 즉, 서버(노드)
하나하나를 직접 제어하지 않고, 쿠버네티스를 통해 한꺼번에 제어 가능!
📌 기본 개념
Desired State(바라는 상태)
- 사용자는 원하는 애플리케이션 배포 상태(바라는 상태)를 쿠버네티스에게 알려주면, 알아서 업데이트 해줌
Controller(컨트롤러)
- 바라는 상태로 바꿔주는 것을, 컨트롤러가 담당
- control-loop 라는 루프를 돌며 특정 리소스를 지속적으로 모니터링
Resource(리소스)
- 쿠버네티스는 모든게 리소스로 표현된다.
- pod, ReplicaSet, Deployment등
- pod는 하나 이상의 컨테이너를 갖는 쿠버네티스의 최소 실행 단위.
Declarative Commnand(선언형 커맨드)
- 쿠버네티스는 선언형 커맨드를 지원한다
- 선언형 커맨드 -> 사용자가 직접 상태를 바꾸지 않고,
바라는 상태
를 선언적으로 기술하여, 명령을 내리는 방법(<-> 명령형 커맨드), 예를 들면 html
- YAML형식을 이용해 선언형 명령을 내린다. ->
YAML 정의서
-> 아래는 YAML형식의 리소스(pod) 예시
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: nginx
image: nginx
Namespace(네임스페이스)
-
네임스페이스로, 클러스터 환경을 논리적으로 분리
-
네임스페이스마다, 서로 다른 권한, 네트워크 정책 등 설정 가능
-
쿠버네티스는 네임스페이스 레벨 리소스
, 클러스터 레벨 리소스
로 분류 가능
-
네임스페이스 레벨 리소스
- 특정 네임스페이스 안에 속하여 존재하는 리소스
ex) Pod, Deployment, Service
-
클러스터 레벨 리소스
- 네임스페이스 영역에 상관 없이 클러스터 레벨에서 존재하는 리소스
ex) Node, PersistentVolume, StorageClass
Label & Selector (라벨 & 셀렉터)
- 특정 리소스에 명령을 전달하거나, 정보를 확인하고 싶을 때, 라벨링 시스템 이용
- 리소스에 key - value 형식의
라벨
을 붙히고,
- 리소스를 찾기 위해
셀렉터
가 특정 key - value를 가진 리소스를 뽑아냄. ex) dictionary
Service Discovery (서비스 탐색)
- 클러스터 내에서 통신하기 위해, 서비스 끝점이 필요함.
- 즉, 다른 컨테이너(pod)와 통신하기 위해 끝점(Endpoint)의 접속 정보를 알아야하며, 이를 탐색하는 기능
Service
라는 리소스를 이용해 서비스 탐색 기능 제공
설정 관리
- 컨테이너를 실행할때 필요한 설정값, 민감 정보를, 쿠버네티스 플랫폼 레벨에서 관리할 수 있게 함.
ConfigMap
, Secret
리소스를 통해 컨테이너의 설정을 관리
📌 아키텍처

이미지 출처
- 모든 서버는
마스터
, 워커(노드)
로 구분됨.
마스터
: 쿠버네티스를 운영하기 위한 필수적인 핵심 컴포넌트가 존재
마스터
: 단일 서버로 구성할 수 있으며, 여러 서버를 묶어 클러스터 마스터로도 구축 가능
워커
: 단순히 컨테이너 환경으로 사용됨.
워커
마다 특별한 역할이 없기때문에, 마스터
가 죽지 않는 이상, 특정 워커가 수행한 일을 다른 워커가 대신 수행 가능.
마스터
- kube-apiserver(API 서버)
- 마스터로 전달되는 모든 요청을 받는 REST API 서버
- 마스터와 통신한다 === API 서버와 통신한다!
- etcd(저장소)
- 클러스터 내 모든 메타 정보를 저장하는 저장소(DB)
- kube-scheduler(컨테이너 스케줄러)
- 적절하게 컨테이너를
워커
노드에 배치하는 스케줄러
- kube-controller-manager(컨트롤러 집합)
- 현재 상태와
바라는 상태
를 지속적으로 확인하며, 특정 이벤트에 따라 특정 동작을 수행하는 컨트롤러
- 리소스 별로 개별적인 리소스 컨트롤러가 존재하는데, 이를 합친게 kube-controller-manager
- cloud-controller-manager(클라우드 컨트롤러)
- 클라우드 플랫폼(AWS, Azure)에 특화된 리소스를 제어하는 클라우드 컨트롤러
노드(워커)
- kubelet (노드 관리자)
- 마스터로부터 명령을 받아, 컨테이너의 라이프 사이클 관리
- 컨테이너가 정상적으로 동작하는지 지속적으로 모니터링.
- 주기적으로 마스터 노드의 API 서버와 통신.
- kube-proxy (노드 관리자)
- conatiner runtime (노드 관리자)
📌 장점
- 실행환경 고립화
- 리소스 관리
- 스케줄링
- 서버 개수 증가 시, 어떤 서버에 메모리 자원이 충분한지 등, 직접 프로세스를 스케줄링 해야함
- => 쿠버네티스 내장 스케줄러가 최적의 노드를 찾아, 컨테이너 배치!
- 프로세스 관리
- 통합 설정 관리
- 손쉬운 장애 대응
- 각 노드들은 특별한 역할을 갖지 않으므로, 새로운 노드로 이주하는 작업이 매우 간단
- 자동 확장 기능
- 하이브리드 클라우드 운영
- 클라우드 플랫폼 뿐만 아니라, 온프레미스 환경에서도 구축 가능.
- 자가 치유
- 컨테이너에 문제가 생겨 죽더라도,
바라는 상태
가 달라진 것을 확인하고, 컨테이너 다시 실행
- 데이터 스토리지 관리
- 배포 자동화
- 사람이 직접 하는게 아닌, 자동으로 적절한 노드를 선택하여 컨테이너 배치
쿠버네티스.. 짱이다!
'핵심만 콕 쿠버네티스' 도서 참고했습니다
역시 쿠버네티스 짱!