Post

클라우드프로그래밍 7주차 — 쿠버네티스 클러스터 구축

컨테이너 오케스트레이터 쿠버네티스의 구조를 정리하고, 컨트롤 플레인·워커 구성요소를 단일 노드 클러스터로 띄워 확인한 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이 필요 없어 생략된다.

This post is licensed under CC BY 4.0 by the author.