[쿠버네티스 2] 구성/설계 architecture

yesterdaykite·2021년 2월 5일
0

kubernetes

목록 보기
2/3

유튜브 : 초보를 위한 쿠버네티스 안내서 를 보고 공부한 내용을 정리했습니다.

시작 전 간단 용어 정리

용어|발음
---|---
master|마스터
node|노드
k8s|쿠저네티스
kubectl|큐브컨트롤
etcd|엣지디
pod|팟
istio|이스티오
helm|헬름
knative|케이네이티브

쿠버네티스 아키텍쳐

컨테이너 하나 띄워죠 -> master(API server)-> 컨테이너 하나 제작해서 띄우기
-> etcd
-> scheduler
-> controller

Master - API server 가 하는 일

상태를 바꾸거나 조회
etcd와 유일하게 통신하는 모듈
REST API 형태로 제공
권한을 체크하여 적절한 권한이 없을 경우 요청을 차단
관리자 요청뿐만 아니라 다양한 내부 모듈과 통신
수평으로 확장되도록 디자인

Master - Scheduler

새로 생성된 pod를 감지하고 실행할 노드를 선택 (어떤 노드에 어떤 컨테이너를?)
노드의 현재 상태와 Pod의 요구 사항을 체크

Master- etcd가 하는 일

모든 상태, 요청, 데이터를 저장
분산 시스템으로 구성하여 안전성을 높임(고가용성)
가볍고 빠르면서 정확하게 설계(일관성)
key(directory)-value 형태로 데이터 저장
TTL(time to live), watch 같은 부가 기능 제공
백업은 필수!

Master - Controller가 하는 일

논리적으로 많은 컨트롤러가 존재 (복제, 노드, 엔드포인트 컨트롤러 등등)
끊임없이 loop로 상태를 체크하고 원하는 상태를 유지
복잡성을 낮추기 위해 하나의 프로세스로 실행

controller 가 하는 루프

observe current state == desired state
⬇️
diff if(current state!= desired state)
⬇️
act current state → desired state

흐름 최종 정리

controller -> api server : "정보 조회 해주세요!"
api server-> etcd : "정보 조회 권한 체크 후 권한 판단되면 정보조회해서 etcd에 알려줌"
etcd -> api server->controller : "원하는 상태를 변경됨을 저장하고 변경됨을 알려줌"
controller : "리소스 변경"
apiserver <-> controller : "변경 됐다고 전달하고 정보 갱신 권한 체크"
controller -> etcd : "권한 있다고 확인되면 etcd 에 저장"
_apiserver의 열일

Node

Node - kubelet "컨테이너 관리 확실하게!"

각 노드에서 실행
pod을 실행/중지하고 상태를 체크
CRI (container runtime interface)

Node - proxy "내/외부 통신 설정하기"

네트워크 프록시와 부하 분산 역할
성능사의 이유로 별도의 프록시 프로그램 대신 Iptables 혹은 IPVS를 사용 (설정만 관리)

profile
~힘법사 탈출기~

0개의 댓글