유튜브 : 초보를 위한 쿠버네티스 안내서 를 보고 공부한 내용을 정리했습니다.
용어 | 발음 |
---|---|
master | 마스터 |
node | 노드 |
k8s | 쿠저네티스 |
kubectl | 큐브컨트롤 |
etcd | 엣지디 |
pod | 팟 |
istio | 이스티오 |
helm | 헬름 |
knative | 케이네이티브 |
컨테이너 하나 띄워죠 -> master(API server)-> 컨테이너 하나 제작해서 띄우기
-> etcd
-> scheduler
-> controller
상태를 바꾸거나 조회
etcd와 유일하게 통신하는 모듈
REST API 형태로 제공
권한을 체크하여 적절한 권한이 없을 경우 요청을 차단
관리자 요청뿐만 아니라 다양한 내부 모듈과 통신
수평으로 확장되도록 디자인
새로 생성된 pod를 감지하고 실행할 노드를 선택 (어떤 노드에 어떤 컨테이너를?)
노드의 현재 상태와 Pod의 요구 사항을 체크
모든 상태, 요청, 데이터를 저장
분산 시스템으로 구성하여 안전성을 높임(고가용성)
가볍고 빠르면서 정확하게 설계(일관성)
key(directory)-value 형태로 데이터 저장
TTL(time to live), watch 같은 부가 기능 제공
백업은 필수!
논리적으로 많은 컨트롤러가 존재 (복제, 노드, 엔드포인트 컨트롤러 등등)
끊임없이 loop로 상태를 체크하고 원하는 상태를 유지
복잡성을 낮추기 위해 하나의 프로세스로 실행
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의 열일
각 노드에서 실행
pod을 실행/중지하고 상태를 체크
CRI (container runtime interface)
네트워크 프록시와 부하 분산 역할
성능사의 이유로 별도의 프록시 프로그램 대신 Iptables 혹은 IPVS를 사용 (설정만 관리)