최근 업데이트일 2024-11-01
컨테이너 이미지로부터 실제로 컨테이너를 생성하고 실행하는 컨테이너 런타임이 Docker에서 containerd로 바뀌었기 때문에 이를 유의해야 한다. 실습 영상에서는 Docker 기준으로 설명이 이루어진다.
컨테이너 동작 Flow
- 개발자가 이미지를 어떤 hub에 docker push한다.
- hub에서 가져온 이미지를 kubectl로 deployment를 create한다.
- Master node의 API가 요청을 받아서 scheduler에 전달하면 어떤 node에 생성할지 결정한다.
- 결정된 node의 kubelet에 전달하면 docker daemon이 hub에서 container를 확인해서 실행한다.
- 쿠버네티스가 Pod 단위로 관리한다.
쿠버네티스 아키텍쳐
- control plane(=master node)
- master node의 API가 kubectl 요청을 받아서 문법 및 권한 검사
- etcd는 저장소로 key:value 타입으로 worker node의 상태 정보를 저장한다.
- 각 worker node의 상태 정보는 각 kubelet(daemon)이 cAdvisor라는 컨테이너 모니터링 툴로 저장 중
- API가 etcd 정보를 받아서 schduler에 전달하면 schduler가 node 선택 후 API가 이를 해당 kubelet에 알림
- kubelet이 docker 명령어 요청하면 docker가 hub에서 가져와서 실행
- 필요 container가 다운되면 controller가 이를 알아채고 API에게 요청보내서 다시 동작
- coreDNS는 기본 설치, container간 통신을 위한 CNI는 필요에 따라 설치 → ※ 이제는 필수
- worker node
- kubelet
- kube-proxy: 네트워크 담당
- container runtime: docker (또는 containerd)
- add-on
- 네트워크 애드온: CNI
- dns 애드온: coreDNS
- 대시보드 애드온(기본 설치 X): 웹 UI로 쿠버네티스 관리
- 컨테이너 자원 모니터링: cAdvisor
- 클러스터 로깅 (기본 설치 X): 컨테이너 로그, k8s 운영 로그 수집해서 중앙화
- e.g. ELK(ElasticSearch, Logstash, Kibana), EFK(ElasticSearch, Fluentd, Kibana), DataDog