쿠버네티스의 전체 동작 Flow는 아래와 같습니다.
개발자 혹은 운영자가 컨테이너 런타임을 이용하여 컨테이너를 쿠버네티스 플랫폼에 올립니다.
여기서는 컨테이너 런타임의 예로 Docker를 사용합니다.
생성한 컨테이너 이미지를 컨테이너 저장소 (Docker Hub)에 업로드합니다.
쿠버네티스 명령어를 통해 생성한 컨테이너가 실행되도록 요청합니다.
Master 노드(Control-plane)의 REST API Server로 kubectl명령이 전달됩니다.
Worker 노드 중 어느 노드에 파드가 생성되면 좋을지 Scheduler에게 요청합니다.
Scheduler는 노드들의 상태들을 보고 어느 노드가 가장 놓을지 선택합니다.
Scheduler가 Pod를 생성하기 적당한 노드를 찾아 해당 노드의 kubelet에 파드 생성 요청을 합니다.
Pod 생성 요청을 받은 kublet이 Docker 데몬에게 실제 컨테이너의 생성을 요청합니다.
컨테이너 생성 요청을 받은 Docker 데몬이 Docker Hub에서 이미지를 찾아서 이미지를 생성합니다.
이렇게 생성된 컨테이너를 쿠버네티스에서는 'Pod'라는 단위로 관리합니다.
컴포넌트 | 설명 |
---|---|
etcd | key-value 타입의 저장소 (쿠버네티스 마스터 및 노드들의 다양한 상태 정보 저장) |
kube-apiserver | k8s API를 사용하도록 요청을 받고 요청이 유효한지 검사 |
kube-scheduler | 파드를 실행할 노드 선택 |
kube-controller-manager | 파드를 관찰하며 개수를 보장 |
컴포넌트 | 설명 |
---|---|
kubelet | 모든 노드에서 실행되는 k8s 에이전트 (데몬 형태로 동작) |
kube-proxy | k8s의 network 동작을 관리 |
컨테이너 런타임 | 컨테이너를 실행하는 엔진 |
애드온은 클러스터 내부에서 필요한 기능들을 위해 실행되는 Pod입니다.
분류 | 종류 |
---|---|
네트워크 애드온 | CNI - wave, calico, flaneld |
dns 애드온 | CoreDNS |
대시보드 애드온 | 쿠버네티스 웹 UI 대시보드 |
컨테이너 자원 모니터링 | cAdvisor |
클러스터 로깅 | 컨테이너 로그, k8s 운영 로그들을 수집해서 중앙화 (ELK(ElasticSearch, Logstash, Kibana), EFK(ElasticSearch, Fluentd, Kibana), DataDog) |
클러스터 하나를 여러 개의 논리 적인 단위로 사용할 수 있게 해줍니다.
쿠버네티스 클러스터 하나를 여러 팀이나 사용자가 공유하게 됩니다.
용도에 따라 실행해야 하는 앱을 구분할 때 사용할 수 있습니다.
여러 서비스를 운영하고 있거나 같은 서비스여도 여러 환경에서 운영하고 있을 때 namespace를 이용해서 논리적으로 분리하여 관리할 수 있습니다.
사람이 쉽게 읽을 수 있는 데이터 직렬화 양식
HTML, XML과 같은 Markup Language
기본 문법
apiVersion: v1
kind: Pod
metadata:
name: mypod
namespace: orange
spec:
containers:
- image: nginx:1.14 # Scalar 문법
name: nginx
ports: # 배열 문법
- containerPort: 80
- containerPort: 443
출처
https://www.youtube.com/playlist?list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c