클라우드프로그래밍 7주차 — 쿠버네티스 클러스터 구축
컨테이너 오케스트레이터 쿠버네티스의 구조를 정리하고, 컨트롤 플레인·워커 구성요소를 단일 노드 클러스터로 띄워 확인한 7주차 기록.
7주차는 컨테이너 오케스트레이터 쿠버네티스(Kubernetes) 의 구조를 정리하고 클러스터를 구축한다. 강의는 우분투 VM 3대(master/worker)에 kubeadm 으로 멀티노드 클러스터를 만드는 방식이며, 여기서는 같은 구성요소를 갖는 단일 노드 클러스터를 띄워 확인했다.
주차 개요 / 핵심 개념
- 왜 쿠버네티스인가: 컨테이너가 많아지면 배포·스케일·복구·네트워킹을 수동으로 다루기 어렵다. 그래서 오케스트레이터가 필요하다. OpenStack(IaaS, VM 중심)과 달리 K8s는 컨테이너 중심 오케스트레이션이다.
- 클러스터 구조
- 컨트롤 플레인(마스터):
kube-apiserver(모든 요청 관문) ·etcd(상태 저장 KV) ·kube-scheduler(파드 배치 결정) ·kube-controller-manager(원하는 상태 유지). - 워커 노드:
kubelet(노드 에이전트) ·kube-proxy(서비스 네트워킹) · 컨테이너 런타임(containerd) · CNI(파드 네트워크).
- 컨트롤 플레인(마스터):
- kubeadm 구축 흐름(강의):
/etc/hosts설정 → 커널 모듈(overlay,br_netfilter) → sysctl(ip_forward등) → containerd 설치/SystemdCgroup=true→ swap off / 방화벽 →kubelet/kubeadm/kubectl설치 → 마스터kubeadm init→ CNI 설치 → 워커kubeadm join.
클러스터 구축 & 확인
멀티노드 VM(kubeadm) 대신, 동일한 컨트롤 플레인 구성요소를 갖는 단일 노드 클러스터(kind = Kubernetes in Docker) 를 띄워 확인했다. 컨트롤 플레인 구성요소(apiserver/etcd/scheduler/controller-manager)와 노드 에이전트(kubelet/kube-proxy/CNI)는 멀티노드 구성과 동일하다.
클러스터 생성
1
2
3
4
5
6
7
$ kind create cluster --name kiamol
✓ Ensuring node image (kindest/node:v1.36.1)
✓ Preparing nodes
✓ Starting control-plane
✓ Installing CNI
✓ Installing StorageClass
Set kubectl context to "kind-kiamol"
노드 상태 (Ready)
1
2
3
$ kubectl get nodes -o wide
NAME STATUS ROLES VERSION INTERNAL-IP CONTAINER-RUNTIME
kiamol-control-plane Ready control-plane v1.36.1 172.18.0.2 containerd://2.3.1
컨트롤 플레인 구성요소 (모두 Running)
1
2
3
4
5
6
7
8
$ kubectl get pods -n kube-system
etcd-kiamol-control-plane Running # 상태 저장소
kube-apiserver-kiamol-control-plane Running # API 관문
kube-scheduler-kiamol-control-plane Running # 파드 배치
kube-controller-manager-kiamol-control-plane Running # 상태 조정
kube-proxy-lbn5j Running # 서비스 네트워킹
kindnet-q6m82 Running # CNI(파드 네트워크)
coredns-589f44dc88-xxxxx (x2) Running # 클러스터 DNS
컴포넌트 헬스 / 버전
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ kubectl get componentstatuses
NAME STATUS MESSAGE
scheduler Healthy ok
controller-manager Healthy ok
etcd-0 Healthy ok
$ kubectl version
Client Version: v1.31.4
Server Version: v1.36.1
$ kubectl get ns
NAME STATUS AGE
default Active 60s
kube-system Active 60s
local-path-storage Active 54s
정리
kubeadm 멀티노드 구축의 본질은 컨트롤 플레인 구성요소를 정적 파드로 띄우고 워커를 join 시키는 것이다. kind로 띄운 클러스터에서도 동일한 구성요소(etcd/apiserver/scheduler/controller-manager + kubelet/kube-proxy/CNI)가 kube-system 에 그대로 나타나며, componentstatuses 가 모두 Healthy 로 확인된다. 멀티노드 환경 특유의 kubeadm join·scp ~/.kube/config·네트워크/방화벽 설정은 강의 VM 실습에서 다루며, 노드가 1개인 단일 노드 환경에서는 join이 필요 없어 생략된다.