Infra/Kubernetes
[쿠버네티스 입문] 4-1. 쿠버네티스 아키텍처
에드박
2023. 1. 5. 01:24
쿠버네티스 클러스터의 전체 구조
kubernetes 주요 컴포넌트 공식 문서 : https://kubernetes.io/docs/concepts/overview/components/
쿠버네티스 클러스터는 크게 두 종류의 서버로 구성
- 마스터 (master)
- etcd, kube-apiserver, kube-scheduler, kube-controller-manager, kubelet, kube-proxy, docker 등의 컴포넌트가 master에서 실행됨
- 마스터는 보통 고가용성을 만족하고자 서버 3대정도 구성해서 운영.
- 실제 클러스터를 관리하는 리더 마스터 1대 / 나머지 2대는 대기
- 리더 마스터에 장애 발생 시, 대기하던 마스터가 리더 역할로 교체함
- 노드 (node)
- kubelet, kube-proxt, docker 등의 컴포넌트가 node에서 실행됨
- 쿠버네티스 초기에는 minion (미니언) 이라고 명명했음
쿠버네티스의 모든 통신은 kube-apiserver 가 중심
kube-apiserver 를 거쳐 다른 컴포넌트가 서로 필요한 정보를 주고받음
(특히 etcd 에는 kube-apiserver만 접근할 수 있음)
- kubelet 이 mater에 있는 도커를 관리
- 도커 안에는 쿠버네티스 관리용 컴포넌트가 들어있음
- etcd 는 컨테이너로 설정할 수 있지만, 별도의 서버 프로세스로 설정될 수 있음
- node 역시 kubelet으로 도커를 관리, 마스터의 kube-apiserver와 통신하면서 파드의 생성, 관리, 삭제를 담당
- 노드의 kube-proxy는 마스터와 다르게 컨테이너가 아니라 서버 프로세스로 실행 가능
마스터용 컴포넌트
etcd, kube-apiserver, kube-scheduler, kube-conrtoller-manager, cloud-controller-manager
- etcd : 코어 OS에서 개발한 고가용성을 제공하는 Key-Value 저장소. 쿠버네티스에서 필요한 모든 데이터를 저장하는 데이터베이스 역할
- etcd는 서버 하나당 프로세스 1개만 사용가능.
- etcd 자체를 클러스터링한 후 여러개 마스터 서버에 분산하여 실행하여 데이터 안정성을 보장하도록 구성하는것이 좋음.
- 더 안정적이려면 etcd의 데이터를 주기적으로 백업할 것
- kube-apiserver : 쿠버네티스 클러스터의 API를 사용할 수 있도록 하는 컴포넌트
- 요청이 유효한지 검증도 담당
- 쿠버네티스에 보내는 모든 요청은 kube-apiserver를 이용해서 다른 컴포넌트로 전달
- kube-apiserver 는 수평적으로 확장 서버 여러대에 여러개의 kube-apiserver 사용 가능
- kube-scheduler : 현재 클러스터 안에서 자원 할당이 가능한 노드 중 알맞은 노드를 선택해서 새롭게 만든 파드를 실행
- kube-controller-manager : 파드들을 관리하는 컨트롤러 각각을 실행하는 컴포넌트
- cloud-controller-manager : 쿠버네티스의 컨트롤러들을 클라우드 서비스와 연결해 관리하는 컴포넌트
- cloud-controller-manager는 다음 네 가지 컨트롤러 컴포넌트를 관리
- 노드 컨트롤러 : 클라우드 서비스 안에서 노드를 관리하는데 사용
- 라우트 컨트롤러 : 각 클라우드 서비스 안의 네트워크 라우팅을 관리하는데 사용
- 서비스 컨트롤러 : 각 클라우드 서비스에서 제공하는 로드밸런서를 생성, 갱신, 삭제하는 데 사용
- 볼륨 컨트롤러 : 클라우드 서비스에서 생성한 볼륨을 노드에 연결하거나 마운트하는 데 사용
노드용 컴포넌트
kubelet, kube-proxy, 컨테이너 런타임
- kubelet : 클러스터 안 모든 노드에서 실행되는 에이전트. 파드 컨테이너들의 실행을 직접 관리
- PodSpecs이라는 조건이 담긴 설정을 전달받아 컨테이너를 실행하고 컨테이너가 정상적으로 실행되는지 헬스 체크 진행
- 단, 노드안에 있는 컨테이너라도 쿠버네티스가 만든 컨테이너가 아니면 관리하지 않음
- kube-proxy : 쿠버네티스는 클러스터 안에 별도의 가상 네트워크의 동작을 관리하는 컴포넌트
- 호스트의 네트워크 규칙을 관리하거나 연결을 전달할 수도 있음
- 컨테이너 런타임 : 실제로 컨테이너를 실행시킴.
- 보통 컨테이너 표준을 정하는 OCI의 런타임 규격을 구현한 컨테이너 런타임이라면 쿠버네티스에서 사용 가능