728x90
반응형
- 기본구성
마스터, 노드 서버로 구성되어 있으며 마스터 서버는 1대로도 가능하나 보통 고가용성을 위해 서버 3대를 구성한다. 실제 클러스터를 관리하는 리더 마스터 1대에 나머지 2대는 대기하고 있으며 리더 마스터 에 장애가 발생할 경우 다른 2대 중 1대가 리더 마스터가 되며 좀 더 안정적으로 운영하려면 마스터 서버를 5대까지도 구성할 수 있는데 홀수로 구성을 한다.
- 주요 컴포턴트
(1) Master
- etcd : coreos에서 개발한 고가용성을 제공하는 키값 저장소이며 쿠버네티으세어 필요한 모든 데이터를 저장하는 데이터 베이스 역할, 서버 하나당 프로세스 1개만 사용하며 보통 ectd 자체를 클러스터링 한 후 여러개 마스터 서버에 분산 실행하여 안정성을 보장함
- kube-apiserver : 클러스터의 api 컴포넌트로 요청이 유효한지 검증한다. 쿠버네티스에 보내오는 모든 요청은 kube-apiserver를 이용해 다른 컴포넌트로 전달하며 수평적으로 확장 하도록 설계했으므로 여러 대에 여러 개 kube-apiserver를 실행해 사용할 수 있음.
- kube-scheduler : 현재 클러스터 안에서 자원 할당이 가능한 노드 중 최적의 노드를 선택해 새롭게 만든 pod를 실행하도록 함, 여기에서의 조건에는 하드웨어 요구사항, 그룹으로 존재해야 하는 pod들을 같은 node에 실행하는 affinity, 반대로 다양한 노드에 분산해서 실행하는 anti-affinity, 특정 데이터가 있는 노드에 할당 등이 있음
- kube-controller-manager : 모든 컨트롤러는 바이너리 파일 하나로 컴파일해 단일 프로세스로 실행되며 pod들을 관리하는 역할
- cloud-controller-manasger : 쿠버네티스의 컨트롤러들을 클라우드 서비스와 연결해 관리하며 관련 소스 코드는 각 클라우드 서비스에서 직접 관리함
- node controller : 서비스 안에서 노드를 관리
- route controller : 서비스 안의 네트워크 라우팅을 관리
- service controller : 서비스에서 제공하는 로드밸런서를 생성, 갱신, 삭제
- volume controller : 서비스에서 생성한 볼륨을 노드에 연결하거나 마운트 등의 역할
(2) Node
- kubelet : 클러스터 안 모든 노드에서 실행되는 에이전트, pod 컨테이너 실행을 직접 관리(헬스체크까지), 단 쿠버네티스가 만드리 않은 컨테이너는 관리하지 않음
- kube-proxy : 클러스터 내 별도의 가상 네트워크를 설정 및 관리, 호스트의 네트워크 규칙을 관리하거나 연결하도록 전달할 수 있음
- container runtime : 실제 컨테이너를 실행시키며 대표적으로 docker, containerd, runc 등이 있음, 1.10 버전 부터 docker가 없어도 기본 런타임으로 containerd를 사용할 수 있음
- Add-on
클러스터 내에서 필요한 기능을 실행하는 pod
- networking add-on : 클러스터 내 가상 네트워크를 구성해서 사용할 때 kube-proxy 이외에 에드온을 사용, 클라우드 서비스 업체에서는 기본적으로 탑제하였으나 직접 구성한 쿠버네티스는 별도 애드온 설치 필요
- dns add-on : 주로 kube-dns, cofedns가 있으며 쿠버네티스 내 실행된 컨테이너들은 자동으로 dns 서버에 등록됨
- dashboard add-on : 쿠버네티스는 kubectl이라는 cli를 많이 사용하지만 웹 UI로 쿠버네티스를 사용할 때 필요한 add-on임
- container resource monitoring : 실행 중인 컨테이너의 상태를 모니터링, 데이터들을 시계열 형식으로 저장하여 볼 수 있으며 kubelet 안에 포함된 cAdvisor라는 모니터링 도구를 사용
- cluster logging : 개별 컨테이너의 로그와 구성 요소의 로그들을 중앙화하여 로그 수집 시스템에 모아서 볼 수 있는 add-on으로 클라우드 서비스업체에서 제공하는 경우가 아닌 직접 구성한 쿠버네티스에서는 별도로 설치 필요 (ELK, EFK 등)
- Object and Controller
- object : pod, service, volume, namespace 등
- controller : replicaset, deployment, statefulset, daemonset, job 등
(1) Namespace
클러스터 하나를 여러 개 논리적인 단위로 나눠서 사용할 수 있게 함, 용도에 따라 실행해야 하는 앱을 구분하거나 별도의 쿼터를 설정하여 특정 사용량을 제한할 수 도 있음.
## 기본적으로 생성되는 namespaces
$ kubectl get namespaces
NAME STATUS AGE
default Active 6d21h
kube-node-lease Active 6d21h
kube-public Active 6d21h
kube-system Active 6d21h
- default : 가장 기본의 namespace, 별도의 namespace를 지정하지 않으면 선택됨
- kube-system : 쿠버네티스 시스템에서 관리, 관리용 pod 또는 설정이 있음
- kube-public : 클러스터 내 모든 사용자가 읽을 수 있음( 클러스터 사용량 같은 정보)
- kube-node-lease : 각 노드의 임대 오브젝트들을 관리하며 1.13 버전 이후 알파 기능으로 추가
728x90
반응형
'공부 > kubernetes' 카테고리의 다른 글
kubectl 컨테이너 실행 (0) | 2023.02.27 |
---|---|
Ubuntu 20.04 kubernetes kubectl 기본 사용(2) (2) | 2023.02.27 |
default namespace 변경하는 법 (0) | 2023.02.09 |
kubernetes kubectl 기본 사용(1) (0) | 2023.02.08 |
Ubuntu 20.04 kubernetes install (0) | 2023.02.03 |
댓글