kubeadm 클러스터 설치

kubeadm으로 프로덕션급 Kubernetes 클러스터를 설치하는 완벽 가이드


kubeadm으로 프로덕션급 Kubernetes 클러스터를 설치하는 완벽 가이드

목표: 문서 없이 HA 클러스터를 구성할 수 있는 수준


🏗️ 설치 전 요구사항

노드 구성 (예시)

역할사양OS수량
Control Plane2vCPU, 4GB RAMUbuntu 22.041 (또는 3 for HA)
Worker2vCPU, 4GB RAMUbuntu 22.042

사전 준비 (모든 노드)

# 1. 스왑 비활성화
sudo swapoff -a
sudo sed -i '/swap/d' /etc/fstab

# 2. 커널 모듈 로드
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# 3. sysctl 설정
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

sudo sysctl --system

# 4. 컨테이너 런타임 설치 (containerd)
sudo apt-get update
sudo apt-get install -y containerd

sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml

# systemd cgroup 사용
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

sudo systemctl restart containerd
sudo systemctl enable containerd

# 5. Kubernetes 도구 설치
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gpg

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | \
  sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | \
  sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

🎛️ Control Plane 설치

단일 노드 (개발/테스트)

# kubeadm 초기화
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

# kubeconfig 설정
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# CNI 설치 (Flannel)
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

# 확인
kubectl get nodes
kubectl get pods -n kube-system

HA (고가용성) - 3 Control Plane

# 1단계: 첫 번째 CP 노드
sudo kubeadm init --control-plane-endpoint="lb.example.com:6443" \
  --upload-certs \
  --pod-network-cidr=10.244.0.0/16

# 출력된 join 명령어 저장
# (certificate-key 포함)

# 2단계: 두 번째, 세 번째 CP 노드
sudo kubeadm join lb.example.com:6443 \
  --token <token> \
  --discovery-token-ca-cert-hash sha256:<hash> \
  --control-plane \
  --certificate-key <certificate-key>

👷 Worker Node 조인

# kubeadm join (CP init 시 출력된 명령어)
sudo kubeadm join 192.168.1.100:6443 \
  --token <token> \
  --discovery-token-ca-cert-hash sha256:<hash>

# 확인 (CP 노드에서)
kubectl get nodes

🔧 설치 후 설정

CNI 선택 및 설치

CNI설치 명령어특징
Flannelkubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml단순, 기본
Calicokubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml정책, 모니터링
Ciliumhelm install cilium cilium/cilium --namespace kube-systemeBPF, 보안

필수 애드온

# CoreDNS (기본 설치됨)
kubectl get pods -n kube-system -l k8s-app=kube-dns

# Metrics Server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

# Dashboard (선택)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

✅ 설치 확인

# 노드 상태
kubectl get nodes

# 시스템 Pod
kubectl get pods -n kube-system

# DNS 확인
kubectl run -it --rm debug --image=busybox:1.28 -- nslookup kubernetes.default

# 네트워크 확인
kubectl run -it --rm debug --image=busybox:1.28 -- wget -O- http://kubernetes.default

📋 체크리스트

  • 사전 요구사항 충족
  • containerd 설치/설정
  • kubeadm/kubelet/kubectl 설치
  • kubeadm init
  • CNI 설치
  • Worker 조인
  • 애드온 설치
  • 기능 테스트

🔗 관련 노트

  • 01-01-K8s-아키텍처-이해 — 구성 요소
  • 02-02-클러스터-업그레이드 — 업그레이드 절차
  • 02-12-클러스터-장애-복구 — 장애 대응
  • 00-MOC-Proxmox — 홈랩 인프라

마지막 업데이트: 2026-06-01