CKA 대비 K8S 개념 정리
Pod, Node, Cluster
Kubernetes에서 Pod, Node, Cluster는 서로 계층적인 관계를 가지며, 각각의 역할이 다릅니다.
1. Pod, Node, Cluster의 개념
📌 Pod
- Kubernetes에서 배포되는 최소 실행 단위
- 하나 이상의 컨테이너로 구성될 수 있음
- 같은 Pod 내의 컨테이너들은 같은 네트워크 네임스페이스(IP 공유) 사용
- 같은 Pod 내 컨테이너들은 localhost 통신 가능
📌 Node
- Pod가 실행되는 물리적/가상 서버
- Master Node(제어 노드) 와 Worker Node(작업 노드) 로 나뉨
- 각 Node는 Kubelet, Kube Proxy, Container Runtime(Docker, containerd 등) 을 실행
📌 Cluster
- 여러 개의 Node들이 모여서 구성된 하나의 Kubernetes 시스템
- Master Node 가 전체 클러스터를 관리하고, Worker Node 들이 실제 작업을 수행
- 클러스터 내부에서 Pod들은 스케줄링되어 Node에 배치됨
2. Pod, Node, Cluster의 관계
🔹 Cluster → 여러 Node로 구성
- 하나의 Cluster는 여러 개의 Node(물리 서버 또는 가상 머신)로 이루어짐.
🔹 Node → 여러 Pod를 포함
- 각 Node는 여러 개의 Pod를 실행할 수 있음.
- Node의 자원(CPU, 메모리 등)이 한계에 도달하면 더 이상 Pod를 배포할 수 없음.
🔹 Pod → 하나 이상의 컨테이너 포함
- 하나의 Pod 안에는 여러 개의 컨테이너가 존재 가능함.
- 같은 Pod 내 컨테이너들은 localhost로 통신 가능하지만, 다른 Pod와 통신하려면 Cluster 내부 네트워크를 사용해야 함.
3. 구성 예시
아래는 3개의 Worker Node를 가진 Kubernetes Cluster 예시입니다.
Cluster
├── Node 1
│ ├── Pod A (nginx 컨테이너, redis 컨테이너)
│ ├── Pod B (mysql 컨테이너)
│
├── Node 2
│ ├── Pod C (backend 컨테이너)
│ ├── Pod D (frontend 컨테이너)
│
├── Node 3
├── Pod E (monitoring 컨테이너)
├── Pod F (logging 컨테이너)
Node 1
에는Pod A
,Pod B
가 실행 중Pod A
는nginx
,redis
두 개의 컨테이너 포함Pod B
는mysql
단일 컨테이너 포함Node 2
,Node 3
에도 여러 개의 Pod가 배치됨
4. 추가 개념
✅ Pod는 Node에 배치되지만 특정 Node에 고정되지 않음
- Pod가 실행 중인 Node가 다운되면, Kubernetes는 새로운 Node에서 해당 Pod를 다시 생성
✅ Cluster는 오토스케일링 가능
- Pod가 증가하면 새로운 Node를 추가할 수도 있음
- 반대로 불필요한 Node는 제거될 수 있음
✅ Pod 간 통신은 Service를 통해 관리됨
- Kubernetes 내부 네트워크를 활용하여 Node 간 Pod 통신 가능
- 외부에서 접근하려면 LoadBalancer 또는 Ingress 설정이 필요
🔹 정리
- Cluster → 여러 개의 Node로 구성
- Node → 여러 개의 Pod 실행
- Pod → 하나 이상의 컨테이너 포함
- Kubernetes는 Pod를 자동으로 스케줄링하며, 필요 시 다른 Node로 이동 가능
이해를 돕기 위해 간단한 비유를 하자면,
- Cluster = 한 개의 회사
- Node = 여러 개의 부서(개발팀, 마케팅팀 등)
- Pod = 각 팀 내에서 수행하는 프로젝트
Kubernetes는 이러한 구조를 통해 효율적으로 애플리케이션을 관리합니다. 🚀
etcd
클러스터 변경 등 cubectl 을 실행할 때 필요한 정보를 얻는 데이터베이스
- etcdctl
ETCD 서버와 통신을 하기 위해 etcdctl 명령어를 사용함 - kube-apiserver
kubectl 커맨드 사용 -> kube-apiserver 명령 전달 -> etcd 클러스터에서 데이터 조회
kube-apiserver 가 etcd 와 직접적으로 통신하는 유일한 컴포넌트
etcdctl version
확인
./etcdctl --version
API version 을 확인해야 함
version 2 로 설정되어 있을 수 있음
version2와 version3 은 커맨드 명령어가 다름
설정
export ETCDCTL_API=3
환경변수를 설정해줘야 함
port
기본적으로 2379
Kube-Scheduler
어떤 Pod가 어떤 Node에 들어갈지를 결정
결정만 한다. 실제로 배치하는 것은 kubelet
CPU 사용량, 메모리 리소스, ... 등의 기준을 비교하여 가장 알맞은 노드를 선정함
Kubeadm
Kubelet
각 노드의 선장과 같은 역할
- Register Node
- Create PODs
- Monitor Node & Pods
Kubeadm 은 자동으로 kubelet 을 배포하지 않는다
kube-proxy
클러스터의 각 노드에서 실행되는 프로세스
클러스터 안에서 각 pod 는 서로 통신할 수 있음
각 노드는 Service 를 사용하여 서로 통신이 가능함
kube-proxy 는 ip table 을 가지고 각 서비스와 pod ip 를 연결함으로써 네트워킹이 가능하게 함
ReplicaSet
특정 수의 포드가 항상 실행되도록 함
로드밸런싱, 스케일링
Deployment
인스턴스를 매끄럽게 업데이트해줌
- 업데이트, 변경취소, 일시정지 등
ReplicaSet 상위에 존재함
Services
k8s 내 프로세스 혹은 외부와 네트워크 통신을 가능하게 함
- Target port : pod 가 노출하는 port
- (service) port : service 의 port
ClusterIP
pod 는 각각 ip 가 있지만 정적이지 않고 계속 바뀜
접근하는 ip를 계속 바꿔주는 일 없이 통신하기 위해
클러스터 내부에서만 접근 가능한 가상 IP를 할당한 것
NodePort
클러스터의 각 노드의 포트를 열어 외부에서 접근이 가능하도록 함
- 외부 접근: NodeIP:NodePort를 통해 가능 (<노드IP>:<노드포트>).
- 포트 범위: 30000–32767
LoadBalancer
클라우드 환경에서 외부 로드 밸런서를 자동으로 생성하여 트래픽을 분산함
각 Node Ip 로 접근하는 것이 아닌 단일 주소를 필요로 함