쿠버네티스란?
- 컨테이너 오케스트레이션을 위한 솔루션
- 오케스트레이션 : 복잡한 단계를 관리하고 요소들의 유기적인 관계를 미리 정의해 손쉽게 사용하도록 서비스를 제공하는 것
- 쿠버네티스 구성 방법
- CSP의 관리형 쿠버네티스
- EKS (Amazon), GKS (GCP), NKS (NCP) 등
- 플랫폼에서 제공하는 설치형 쿠버네티스
- Rancher (수세) , Openshitf (레드헷)
- 쿠버네티스를 자동으로 구성해주는 솔루션 사용
- kubeadm (주로 사용), kops, KRIB, kubespray
- 각 솔루션 비교
- CSP의 관리형 쿠버네티스
⭐ 쿠버네티스 구성 요소 ⭐
- 마스터 노드
kubectl
: k8s cluster에 명령을 내리는 역할, 주로 API server와 통신함API server
: cluster 중심 역할을 하는 통로ETCD
: 구성 요소들의 상태 값이 모두 저장되는 분산 저장소- etcd 외의 다른 구성요소는 상태값을 관리하지 X, etcd 정보만 백업되어 있으면 긴급한 장애 상황에 클러스터 복구가 가능함
Controller Manager
: 클러스터의 오브젝트 상태를 관리- ex) 워커 노드 통신이 되지 않는 경우, 상태 체크와 복구가 컨트롤러 매니저에 속한 노드 컨트롤러에서 이루어짐
- ex) ReplicaSet에 요청받은 pod의 개수대로 pod를 생성함
Scheduler
: 노드의 상태와 자원, 레이블, 요구 조건 등을 고려해 pod를 어떤 워커노드에 생성할 것인지를 결정하고 할당함
- 워커노드
kubelet
: pod의 구성 내용(PodSpec)을 받아서 컨테이너 런타임으로 전달, pod 안의 컨테이너들이 정상 동작하는지 모니터링함container runtime
: pod를 이루는 컨테이너의 실행을 담당- pod 안에서 다양한 종류의 컨테이너가 문제 없이 작동하게 만드는 표준 인터페이스
POD
: 한 개 이상의 컨테이너로, 단일 목적의 일을 하기 위해 모인 단위
CNI (Container Network Interface)
: 컨테이너 네트워크의 안정성과 확장성을 보장하기 위해 개발됨- Calico, Flannel 등 다양한 네트워크 플러그인이 있음
- k8s 클러스터의 통신을 위해서 네트워크 플러그인을 선택하여 구성해야 함
- NCP의 경우 Calico를 기반으로 L3 기반의 컨테이너 네트워크를 구성함
- Calico, Flannel 등 다양한 네트워크 플러그인이 있음
CoreDNS
: cluster 내에서 도메인을 이용해 통신하는 데 사용kube-proxy
: cluster는 pod가 위치한 node에 있는 kube-proxy를 통해 pod가 통신할 수 있는 네트워크를 설정함
항목 | Master Node | Worker Node |
---|---|---|
역할 | 클러스터 상태 관리 및 제어 | 컨테이너(Pod) 실행 담당 |
주요 구성 | kube-apiserver, etcd, scheduler 등 | kubelet, kube-proxy, container runtime |
실행 대상 | 컨트롤 컴포넌트 | 실제 애플리케이션 Pod |
- ⭐ k8s의 특징
- 쿠버네티스는 선언적(declarative) 시스템 구조를 가지고 있음
- 각 요소가 추구하는 상태(desired status)를 선언하면 현재 상태(current status)와 맞는지 점검하고, 이를 맞추려고 함
- 추구하는 상태를 API server에 선언하면, 다른 요소들이 API 서버에 와서 현재 상태와 비교하고 그에 맞게 상태를 변경하려고 함
- API server는 현재 상태 값을 가지고 있으므로, 이를 보존하기 위해 ETCD가 필요한 것
- 쿠버네티스는 선언적(declarative) 시스템 구조를 가지고 있음
- 그림으로 알아보기
쿠버네티스 구성 요소간의 통신 단계 pod의 생명주기 (pod 생성, 수정, 삭제의 과정)
⭐ 쿠버네티스 오브젝트 ⭐
- Spec과 Status 등의 개별 속성을 포함해 부르는 단위를 오브젝트(Object)라고 함
- 오브젝트 스펙은 대부분 yaml 로 작성하여 관리함
- 기본 오브젝트
Pod
: 쿠버네티스에서 실행되는 최소 단위- 독립적인 공간과 사용 가능한 IP를 가지고 있음
Namespace
: cluster에서 사용되는 리소스들을 구분해 관리하는 그룹- default : namespace를 지정하지 않으면 기본으로 할당되는 그룹
- kube-system : 쿠버네티스 시스템에서 사용
Volume
: pod가 생성될 때, pod에서 사용할 수 있는 디렉터리를 제공- pod가 언제든지 삭제될 수 있으므로 디렉터리도 임시로 사용하지만, pod가 사라지더라도 영구적인 디렉터리를 volume을 통해 생성할 수 있음
Service
: pod 가 새롭게 생성될 때 부여되는 새로운 IP를 기존 제공하던 기능과 연결하여 pod 접속을 내/외부로 안정적으로 유지하도록 함
Deployment
: 기본 오브젝트를 조금 더 효율적으로 동작할 수 있도록 기능을 조합하여 구현한 것- pod에 기반을 두고 있으며 ReplicaSet을 합쳐 놓은 형태
- 이외에도 다양한 오브젝트들이 존재함
ReplicaSet
: 지정된 수의 pod 복제본이 항상 실행 상태로 유지하는 데 사용됨DaemonSet
: deployment의 replicas가 node 수 만큼 정해져 있으며, node 하나 당 pod 한 개만 생성함- node를 관리하는 pod일 경우, DaemonSet으로 만드는 것이 효율적임
StatefulSet
: 각 pod가 순서대로 생성되어 고정된 이름, 볼륨, 설정 등을 유지할 수 있음- 효율성 면에서 좋은 구조는 아니지만, 마스터-슬레이브 구조 시스템에서는 요구 사항에 맞춰 필요한 경우가 있음
PV, PVC
: pod에서 생성한 내용을 기록하거나 모든 pod가 동일한 설정 값을 유지하기 위해 공유 가능한 볼륨이 필요한 경우가 있음- PV(PersistentVolume, 지속적으로 사용 가능한 볼륨) : 볼륨을 사용할 수 있게 준비
- PVC(PersistentVolumeClaim, 지속적으로 사용 가능한 볼륨 요청) : 준비된 볼륨에서 일정 공간을 할당받아 사용
PV와 PVC의 관계도
ConfigMap
: 설정을 목적으로 사용하는 오브젝트
728x90
'Study > Kubernetes' 카테고리의 다른 글
[실습2] Minikube 사용해보기 (1) | 2025.06.25 |
---|---|
[실습1] WSL에 Docker 및 Minikube 설치 (0) | 2025.06.23 |
[TIP] 쿠버네티스 컴포넌트와 오브젝트 : 용어부터 알고가자! (1) | 2024.11.25 |
[이론] K8S란? 왜 사용하는 걸까? (0) | 2024.11.18 |
[Roadmap] 쿠버네티스 제대로 알아보자 (0) | 2024.11.14 |
댓글