본문 바로가기
공부/kubernetes

쿠버네티스 클러스터의 구조

by CITTA 2023. 2. 27.
728x90
반응형
  1. 기본구성

마스터, 노드 서버로 구성되어 있으며 마스터 서버는 1대로도 가능하나 보통 고가용성을 위해 서버 3대를 구성한다. 실제 클러스터를 관리하는 리더 마스터 1대에 나머지 2대는 대기하고 있으며 리더 마스터 에 장애가 발생할 경우 다른 2대 중 1대가 리더 마스터가 되며 좀 더 안정적으로 운영하려면 마스터 서버를 5대까지도 구성할 수 있는데 홀수로 구성을 한다.

  1. 주요 컴포턴트

(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를 사용할 수 있음
  1. 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 등)
  1. 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

댓글