쿠버네티스 설치하기: Kubeadm으로 K8s 클러스터 구축

성윤·2026년 2월 13일

[☸️Kubernetes]

목록 보기
3/13
post-thumbnail

들어가며 👋

지난 포스팅에서 쿠버네티스의 핵심 개념과 아키텍처를 살펴봤습니다.

이론만으로는 부족하죠. 오늘은 Master Node와 Worker Node를 직접 구성해 쿠버네티스 클러스터를 구축해보겠습니다.

학습 목적에 가장 적합한 kubeadm을 이용한 설치 방법을 정리합니다. 🚀


1. Kubernetes 구축 방법의 종류 🛠️

1) Local Kubernetes (학습/테스트용) 💻

물리 머신 1대에 가상 환경으로 클러스터를 구축. 가장 쉽고 빠릅니다.

  • Docker Desktop: 설치 후 옵션만 켜면 바로 사용
  • Minikube: VM을 생성해 k8s 설치
  • kind: 도커 컨테이너를 노드처럼 사용. CI 테스트에 유리
  • k3s & k0s: 경량화 버전. etcd 대신 SQLite 사용으로 IoT 환경에 적합

2) Managed Kubernetes (클라우드 서비스) ☁️

CSP에서 제공하는 완전 관리형 서비스입니다.

  • EKS (AWS), AKS (Azure), GKE (Google), NKS (NHN) 등
  • Control Plane을 클라우드가 관리해주어 운영이 편하지만 비용 발생

3) Configured Kubernetes (설치형) ⚙️

온프레미스나 클라우드 VM에 직접 구성하는 방식입니다.

  • kubeadm: 쿠버네티스 표준 설치 도구. 클러스터 구성 요소 이해에 최적
  • kubespray: Ansible 기반. 대규모 클러스터 구축에 유리

Why kubeadm? 🤔

OS 설정부터 네트워크 플러그인까지 직접 다루며 쿠버네티스 동작 원리를 깊이 이해할 수 있습니다. 온프레미스와 클라우드 모두 지원합니다.


2. kubeadm으로 클러스터 구축하기 🚧

구성: Master Node 1대, Worker Node 1대 이상

0) 사전 준비

  • OS: Ubuntu 22.04 LTS (권장)
  • Master Node: CPU 2 Core 이상 필수
  • 통신 포트:
    • Master: 6443 (API Server), 2379-2380 (etcd), 10250~10252
    • Worker: 10250 (Kubelet), 30000-32767 (NodePort)

Tip: 학습용이라면 sudo ufw disable로 방화벽을 끄고 진행해도 됩니다.


1) 모든 노드 공통 설정 (Master & Worker)

① 패키지 업데이트 및 필수 도구 설치

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl apt-transport-https ca-certificates software-properties-common gnupg

② Swap 메모리 해제 (필수!) 🚫

쿠버네티스는 스왑 활성화 시 작동하지 않습니다.

# 스왑 비활성화
sudo swapoff -a

# 재부팅 후에도 유지
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

# 확인 (Swap이 0이어야 함)
sudo free -m

③ 네트워크 설정 (iptables Bridging)

# 모듈 로드
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

④ 컨테이너 런타임 설치 (containerd) 🐳

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

2) Master Node 설정 🧠

Master Node에서만 수행합니다.

클러스터 초기화

# Pod 네트워크 대역 지정 (Flannel 사용 시 10.244.0.0/16 권장)
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

✨ 중요!

초기화 성공 시 마지막에 kubeadm join ... 명령어가 출력됩니다. 반드시 복사해서 저장하세요! Worker Node 연결 시 사용합니다.


kubectl 사용 권한 설정

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

CNI (네트워크 플러그인) 설치

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

3) Worker Node 설정 👷

Worker Node에서 아까 복사한 join 명령어를 실행합니다.

sudo kubeadm join [Master_IP]:6443 --token [TOKEN] \
    --discovery-token-ca-cert-hash sha256:[HASH]

Tip: sudo와 함께 실행해야 합니다.


4) 구축 확인 ✅

Master Node로 돌아와서 확인합니다.

kubectl get nodes

STATUS가 Ready면 성공! 🎉


마치며 ✍️

이번 포스팅에서는 kubeadm으로 쿠버네티스 클러스터를 직접 구축했습니다.

EKS나 Minikube를 쓰면 명령어 한 줄로 끝나지만, 직접 컨테이너 런타임을 세팅하고 네트워크 플러그인(CNI)을 설치하며 Master-Worker 구조를 연결해보는 과정은 쿠버네티스의 내부 동작 원리를 이해하는 중요한 밑거름이 될 것입니다.

클러스터 구축을 마쳤으니 이제 파드를 띄워볼 차례입니다. 하지만 그 전에 쿠버네티스를 올바르게 사용하는 방법을 먼저 알아야 합니다.

다음 포스팅에서는 실제로 파드를 띄워보기 앞서, 실무에서 반드시 알아야 할 쿠버네티스의 핵심 원리인 Namespace(환경 분리)와 선언적 관리 방식(apply)에 대해 알아보겠습니다. 🚀

0개의 댓글