kubeadm 클러스터 설치
kubeadm으로 프로덕션급 Kubernetes 클러스터를 설치하는 완벽 가이드
kubeadm으로 프로덕션급 Kubernetes 클러스터를 설치하는 완벽 가이드
목표: 문서 없이 HA 클러스터를 구성할 수 있는 수준
🏗️ 설치 전 요구사항
노드 구성 (예시)
| 역할 | 사양 | OS | 수량 |
|---|---|---|---|
| Control Plane | 2vCPU, 4GB RAM | Ubuntu 22.04 | 1 (또는 3 for HA) |
| Worker | 2vCPU, 4GB RAM | Ubuntu 22.04 | 2 |
사전 준비 (모든 노드)
# 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 | 설치 명령어 | 특징 |
|---|---|---|
| Flannel | kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml | 단순, 기본 |
| Calico | kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml | 정책, 모니터링 |
| Cilium | helm install cilium cilium/cilium --namespace kube-system | eBPF, 보안 |
필수 애드온
# 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