
지난 포스팅에서 쿠버네티스의 핵심 개념과 아키텍처를 살펴봤습니다.
이론만으로는 부족하죠. 오늘은 Master Node와 Worker Node를 직접 구성해 쿠버네티스 클러스터를 구축해보겠습니다.
학습 목적에 가장 적합한 kubeadm을 이용한 설치 방법을 정리합니다. 🚀
물리 머신 1대에 가상 환경으로 클러스터를 구축. 가장 쉽고 빠릅니다.
CSP에서 제공하는 완전 관리형 서비스입니다.
온프레미스나 클라우드 VM에 직접 구성하는 방식입니다.
Why kubeadm? 🤔
OS 설정부터 네트워크 플러그인까지 직접 다루며 쿠버네티스 동작 원리를 깊이 이해할 수 있습니다. 온프레미스와 클라우드 모두 지원합니다.
구성: Master Node 1대, Worker Node 1대 이상
Tip: 학습용이라면
sudo ufw disable로 방화벽을 끄고 진행해도 됩니다.
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl apt-transport-https ca-certificates software-properties-common gnupg
쿠버네티스는 스왑 활성화 시 작동하지 않습니다.
# 스왑 비활성화
sudo swapoff -a
# 재부팅 후에도 유지
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 확인 (Swap이 0이어야 함)
sudo free -m
# 모듈 로드
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# iptables 설정
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sudo sysctl --system
sudo apt install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
# SystemdCgroup을 true로 변경 (중요!)
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd
# GPG 키 및 저장소 추가 (v1.30 기준)
sudo curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/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.30/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
# 설치
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
# 버전 고정 (자동 업데이트 방지)
sudo apt-mark hold kubelet kubeadm kubectl
Master Node에서만 수행합니다.
# Pod 네트워크 대역 지정 (Flannel 사용 시 10.244.0.0/16 권장)
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
✨ 중요!
초기화 성공 시 마지막에
kubeadm join ...명령어가 출력됩니다. 반드시 복사해서 저장하세요! Worker Node 연결 시 사용합니다.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Worker Node에서 아까 복사한 join 명령어를 실행합니다.
sudo kubeadm join [Master_IP]:6443 --token [TOKEN] \
--discovery-token-ca-cert-hash sha256:[HASH]
Tip:
sudo와 함께 실행해야 합니다.
Master Node로 돌아와서 확인합니다.
kubectl get nodes

STATUS가 Ready면 성공! 🎉
이번 포스팅에서는 kubeadm으로 쿠버네티스 클러스터를 직접 구축했습니다.
EKS나 Minikube를 쓰면 명령어 한 줄로 끝나지만, 직접 컨테이너 런타임을 세팅하고 네트워크 플러그인(CNI)을 설치하며 Master-Worker 구조를 연결해보는 과정은 쿠버네티스의 내부 동작 원리를 이해하는 중요한 밑거름이 될 것입니다.
클러스터 구축을 마쳤으니 이제 파드를 띄워볼 차례입니다. 하지만 그 전에 쿠버네티스를 올바르게 사용하는 방법을 먼저 알아야 합니다.
다음 포스팅에서는 실제로 파드를 띄워보기 앞서, 실무에서 반드시 알아야 할 쿠버네티스의 핵심 원리인 Namespace(환경 분리)와 선언적 관리 방식(apply)에 대해 알아보겠습니다. 🚀