2020. 4. 3. 22:35ㆍ[정리] 기능별 개념 정리/Kubernetes
다음 책을 읽고 정리합니다. : http://www.yes24.com/Product/Goods/85578606
샘플 코드는 해당 깃허브 레포를 참고합니다. : https://github.com/arisu1000/kubernetes-book-sample
리눅스의 격리 환경
cgroup : 프로세스 별로 자원을 격리할 수 있다.
chroot : 디렉토리 별로 자원을 격리할 수 있다.
기타
컨테이너를 이용하면 개발 환경과 운영 환경의 차이 때문에 일어나는 장애를 막을 수 있다.
컨테이너 오케스트레이션 시스템은 컨테이너의 부족한 부분을 채워주는 역할이다.
쿠버네티스의 영문표기는 kubernetes 고 k 와 s 사이의 글자 개수가 8개이므로 k8s 라고 표기하기도 한다.
쿠버네티스의 특징
선언적 API
- 컨테이너가 어떤 상태이길 원하는지 기술하면 쿠버네티스가 지속적으로 컨테이너의 상태를 맞추기 위해 확인한다.
- 선언적 API 의 단점으로는 앱 재시작과 같은 단순한 작업을 할 수 없다는 점이 있다.
kubectl 명령어 포맷
kubectl [command] [TYPE] [NAME] [flags]
command : create, get, delete, edit ...
TYPE : pod, service, ingress ...
NAME : 자원의 이름
flags : 부가 옵션
-h 또는 --help : 개발 명령어의 도움말 출력
-v : 개발 명령어 실행 로그을 출력
노드
마스터 노드 : 노드들의 상태를 관리하고 제어한다.
워커 노드 : 마스터 노드의 명령을 받아 사용자가 선언한 파드와 잡을 실행한다.
마스터 노드
마스터 노드는 홀수로 구성한다.
마스터 노드를 1대만 설치할 수 도 있지만 고가용성을 위해 3대 또는 5대를 구성하기도한다.
마스터 노드 내부의 통신 아키텍쳐
관리용 컴포넌트 | 특징 |
kublet | kube-apiserver 와 통신하면서 파드의 생성, 관리, 삭제를 담당한다 |
kube-apiserver | 쿠버네티스 클러스터의 API를 사용할 수 있게 해준다. 요청의 유효성을 검증하고 API 스펙을 검증한다. 모든 통신의 중심이된다. 특히 etcd 에는 이 컴포넌트만 접근이 가능하다. |
kube-scheduler | 현재 클러스터 안에서 자원 할당이 가능한 노드를 선택해 파드를 실행 시켜주는 역할을 한다. |
kube-controller-manager | 컨트롤러 각각을 실행 시키는 역할을 한다. |
cloud-controller-manager | 쿠버네티스의 컨트롤러들을 클라우드 서비스와 연결해 관리할 수 있도록 해준다. |
etcd | key-value 저장소. 쿠버네티스에서 필요한 모든 데이터를 저장하는 DB 역할. 쿠버네티스의 전신인 보그에서는 chubby 라는 분산 저장소를 사용했는데, 오픈소스화가 되면서 chubby 를 대체하려는 용도로 개발되었다. |
관리형 컴포넌트들은 초기에 컨테이너가 아닌 서버 프로세스 형태로 실행됬었었다.
관리형 컴포넌트들은 하이퍼큐브라는 바이너리 파일로 컴파일 되고 실행할 때 옵션을 설정해 각 컴포넌트 역할을 수행한다.
워커 노드
관리용 컴포넌트 | 특징 |
kublet | pod spec 조건이 담긴 설정을 받아 pod 의 실행, 헬스 체크등을 직접 관리한다. |
kube-proxy | 쿠버네티스 안의 가상 네트워크를 관리한다. |
컨테이너 런타임 | 실제로 컨테이너를 실행 시킨다. |
오브젝트와 컨트롤러
오브젝트 : 파드, 서비스, 볼륨, 네임스페이스...
컨트롤러 : 레플리카셋, 디플로이먼트, 스테이트풀셋, 데몬셋, 잡...
쿠버네티스 컨트롤러와 실행 과정
컨트롤러는 논리적으로 개별 프로세스이다. 하지만 하나의 바이너리 파일로 컴파일되고, 단일 프로세스로 실행된다. 이는 복잡도를 낮추기 위해서 이렇게 설계되어있다. 새로운 컨트롤러가 사용되면 컨트롤러에 대응하는 새로운 구조체가 만들어진다. 이것이 kube-controller-manager 가 관리하는 큐에 들어가면서 실행이 되는 식으로 동작한다.
네임스페이스
쿠버네티스 클러스터의 논리적 단위
기본 네임스페이스가 몇개 있다.
default | 기본 네임스페이스 |
docker | 도커에서 만든 네임스페이스 |
kube-system | 쿠버네티스 시스템 을 관리하는 네임스페이스. 관리용 파드나 설정이 존재한다. |
kube-public | 클러스터 안의 모든 사용자가 읽을 수 있는 네임스페이스 (ex. 클러스터 사용량 정보) |
kube-node-lease | 노드의 임대 오브젝들을 관리하는 네임스페이스 |
애드온
kube-system namespace 에 만들어진다.
DNS 에드온 | 클러스터 안에서 동작하는 DNS 서버 |
대시보드 애드온 | 쿠버네티스 웹 UI |
컨테이너 자원 모니터링 애드온 | 컨테이너 상태를 모니터링한다. cAdvisor 라는 내장 모니터링 도구를 사용한다. |
클러스터 로깅 애드온 | 파드를 실행해서 로그 중앙 저장 파드로 로그를 수집하는데 사용한다. |
템플릿
apiVersion: v1
kind: pod
metadata:
spec:
'[정리] 기능별 개념 정리 > Kubernetes' 카테고리의 다른 글
쿠버네티스 입문 - 02 - 컨트롤러 1 - 레플리카셋 (0) | 2020.04.04 |
---|---|
쿠버네티스 입문 정리 - 01 - Pod (0) | 2020.04.03 |
쿠버네티스 helm 저장소 추가 (0) | 2019.06.24 |
쿠버네티스 helm (0) | 2019.06.21 |
쿠버네티스 강의 정리 ( 3강 : Scaling ) (0) | 2019.06.01 |