-
쿠버네티스 클러스터와 컴포넌트Kubernetes - 기초 2022. 8. 24. 08:24
Kubernetes를 사용하려면 제일 먼저 클러스터를 구성해야합니다.
Kubernetes Docs에서는 "클러스터는 컨테이너화된 애플리케이션을 실행하는 노드라고 하는 워커 머신의 집합. 모든 클러스터는 한 개의 워커 노드를 가진다."로 설명하고 있습니다.
Kubernetes Cluster 구조
출처 : https://kubernetes.io/ko/docs/concepts/overview/components 위의 그림과 같이 Kubernetes cluster는 하드웨어 수준에서 많은 노드로 구성됩니다.
Master node(Control Plane)과 Worker node로 나뉘고, 다양한 component를 통해 동작합니다.
Master node(Control plane)와 Worker node
Master node와 Woker node의 역할과 각 component에 대해 간단하게 알아보자
(cloud controller manager는 생략합니다)
kube-system을 통해 어떤 component로 구성되어 있는지 확인하고 kube-apiserver, etcd, kube-controller-manager,kube-scheduler, kube-proxy와 kubelet, container runtime에 대해 알아보자
(add-on component는 생략)
$ kubectl get pod -n kube-system -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES coredns-64897985d-kbd59 1/1 Running 12 (42s ago) 9d 172.17.0.3 minikube <none> <none> etcd-minikube 1/1 Running 138 (31s ago) 9d 192.168.49.2 minikube <none> <none> kindnet-n5xzs 1/1 Running 9 (36s ago) 19h 192.168.49.2 minikube <none> <none> kube-apiserver-minikube 1/1 Running 138 (37s ago) 9d 192.168.49.2 minikube <none> <none> kube-controller-manager-minikube 1/1 Running 138 (31s ago) 9d 192.168.49.2 minikube <none> <none> kube-proxy-rch8b 1/1 Running 12 (31s ago) 9d 192.168.49.2 minikube <none> <none> kube-scheduler-minikube 1/1 Running 138 (31s ago) 9d 192.168.49.2 minikube <none> <none> storage-provisioner 1/1 Running 17 (35s ago) 9d 192.168.49.2 minikube <none> <none>Mater node (Control plane)
클러스터를 관리하는 중요한 역할을 하기 때문에 High availability를 보장해야한다.
클러스터의 상태를 유지/제어 하지만 애플리케이션을 직접적으로 실행하진 않는다.
control plane의 component에 대해 알아보자
kube-apiserver
- kubernetes의 핵심 역할. 쿠버네티스 시스템은 apiserver만을 통해 통신 (컴포넌트는 서로 직접 통신하지 않는다)
- etcd와 통신하는 유일한 컴포넌트
- 구체적인 역할
- 클러이언트 인증
- 리소스 검증 및 저장 (kubelet 명령어 실행 시 문법 검증 등)
- Admission Controllers 를 통해 요청 받은 리소스를 확인/수정
kube-controller-manager
- apiserver에서 받은 요청을 처리하는 역할을 한다.
- 다양한 컨트롤러가 존재하고 컨트롤러는 API에 받아진 요청을 처리한다
- workload controller : https://kubernetes.io/ko/docs/concepts/workloads/controllers/
- 복제 컨트롤러, 엔드포인트 컨트롤러, 네임스페이스 컨트롤러, 노드 컨트롤러 및 서비스 계정 컨트롤러 등
kube-scheduler
- Pod를 어느 노드에 배치할지 결정하는 역할을 한다.
- 노드의 상태를 확인하고 적절한 노드를 찾아 배치한다.
- 여러 pods를 배치하는 경우 round-robin 분산한다.
etcd
- 클러스터의 모든 데이터를 저장하는 key-value 저장소
- etcd의 데이터를 백업하는 계획은 필수
- etcd를 잘 백업하면 장애가 발생하더라도 클러스터 복구 가능
Worker node
컨테이너화 된 애플리케이션을 실행하는 시스템입니다.
pod을 어느 노드에 실행할지 선택하지 않는다면 kube-scheduler를 통해 적정한 worker node에 배치됩니다.
kubelet
- 클러스터에 각 노드에서 실행되는 에이전트
- 다양한 PodSpec(yaml, json)으로 동작하게 하는 역할
- kubelet은 쿠버네티스를 통해 생성되지 않은 관리 하지 않음
kube-proxy
- 각 노드마다 실행되는 network proxy
- UDP와 TCP를 프록시한다
- 쿠버네티스의 network 동작을 관리
- LB를 제공하고 서비스에 접근하는 데에만 사용된다
- 세 가지 프록시 모드 설명
Container Runtime
OCI와 CRI에 대한 포스트 2022.08.23 - [Kubernetes - 기초] - OCI와 CRI 도 같이 확인하자.
- 컨테이너 런타임은 컨테이너 실행을 담당하는 소프트웨어이다.
- 쿠버네티스는 containerd, CRI-O와 같은 컨테이너 런타임 및 모든 CRI 구현체를 지원한다
이상.
'Kubernetes - 기초' 카테고리의 다른 글
OCI와 CRI (0) 2022.08.23 로컬 kubernetes 환경 구성 + Cheatsheet 적용 (with. minikube, kubectl) (0) 2022.08.22