kok202
쿠버네티스 입문 정리 - 00 - 아키텍쳐

2020. 4. 3. 22:35[정리] 기능별 개념 정리/Kubernetes

다음 책을 읽고 정리합니다. : http://www.yes24.com/Product/Goods/85578606

샘플 코드는 해당 깃허브 레포를 참고합니다. : https://github.com/arisu1000/kubernetes-book-sample

 

쿠버네티스 입문

현업의 운영 경험을 바탕으로 엄선한 쿠버네티스 입문 A~Z현재 다양한 인프라 구축의 핵심 기술은 컨테이너이다. 운영체제, 데이터베이스, 웹 서버 등 인프라 구축에 필요한 컨테이너 이미지 각각을 조합해 인프라 환경을 손쉽게 설정할 수 있다. 그런데 이러한 컨테이너 각각을 사용자가 수동으로 관리하려면 적지 않은 수고를 들여야 한다.쿠...

www.yes24.com

 

 

 

리눅스의 격리 환경

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: