서비스가 확장되다 보면 자연스럽게 분산 시스템에 대한 고민이 시작되고, Kubernetes(쿠버네티스) 같은 오케스트레이션 도구에 대한 필요성을 느끼게 됩니다. 이 글에서는 Ubuntu 환경에서 Kubernetes를 설치하고 클러스터를 구성하는 전체 과정을 정리합니다.

🧰 사전 준비: 하드웨어 및 시스템 요구사항
Kubernetes 공식 문서 기준, 노드별 권장 사양은 다음과 같습니다.
마스터 노드 권장 사양
- CPU: 멀티코어
- RAM: 8GB 이상
- 스토리지: SSD 또는 NVMe
- 네트워크: 기가비트 이더넷 이상
워커 노드 권장 사양
- CPU: 멀티코어
- RAM: 4GB 이상
운영 체제는 Ubuntu 20.04 LTS 이상을 권장합니다.
🔥 1. 방화벽 설정 및 필수 패키지 설치
sudo apt update
sudo apt install -y firewalld
sudo systemctl enable firewalld
sudo systemctl start firewalld
sudo ufw disable
마스터 노드에서 열어야 할 포트:
sudo firewall-cmd --permanent --add-port=6443/tcp
sudo firewall-cmd --permanent --add-port=2379-2380/tcp
sudo firewall-cmd --permanent --add-port=10250/tcp
sudo firewall-cmd --permanent --add-port=10257/tcp
sudo firewall-cmd --permanent --add-port=10259/tcp
sudo firewall-cmd --reload
워커 노드에서 열어야 할 포트:
sudo firewall-cmd --permanent --add-port=10250/tcp
sudo firewall-cmd --permanent --add-port=30000-32767/tcp
sudo firewall-cmd --reload
Kubernetes는 여러 포트를 통해 마스터와 워커 노드 간 통신을 하기 때문에 필수 포트를 미리 열어야 클러스터가 정상적으로 작동합니다.
🚫 2. 스왑 비활성화
Kubernetes는 메모리 스케줄링을 정확히 하기 위해 스왑 공간을 사용하는 것을 허용하지 않습니다.
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab
🧭 3. 호스트네임 및 /etc/hosts 파일 설정
DNS 없이도 노드 간 통신이 가능하도록 IP와 호스트명을 연결합니다.
sudo hostnamectl set-hostname master
sudo nano /etc/hosts
예시:
192.168.1.100 master
192.168.1.101 worker1
192.168.1.102 worker2
📦 4. Containerd 설치 및 설정
Kubernetes는 컨테이너 런타임을 필요로 하며, containerd는 공식 지원되는 안정적인 런타임입니다. SystemdCgroup 설정은 필수입니다
sudo apt install -y containerd
sudo systemctl enable containerd
sudo systemctl start containerd
기본 설정 생성 및 수정:
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo nano /etc/containerd/config.toml
SystemdCgroup = false → SystemdCgroup = true로 수정 후 저장
sudo systemctl restart containerd
⚙️ 5. Kubernetes 구성 요소 설치
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo systemctl enable kubelet
🚀 6. 클러스터 초기화 (마스터 노드)
마스터 노드를 초기화하고 Kubernetes 클러스터의 핵심 컴포넌트를 배포합니다.
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
🌐 7. Calico 네트워크 플러그인 설치
Pod 간 통신을 위한 네트워크 계층을 구성합니다. flannel을 많이 사용하는 것 같은데 본 글에서는 규모가 있는 프로젝트를 가상하고 calico를 사용하겠습니다.
주요 목적 | 단순한 Pod 간 네트워크 연결 | 고성능 네트워크 + 보안 정책 제공 |
동작 방식 | 오버레이 네트워크 (VXLAN 사용) | 레이어 3 라우팅 기반 (IP-in-IP 또는 BGP) |
보안 기능 (NetworkPolicy) | ❌ 제한적 또는 불가 | ✅ 완벽 지원 (Kubernetes NetworkPolicy 완벽 호환) |
성능 | 상대적으로 낮음 (VXLAN 터널링 오버헤드) | 상대적으로 높음 (터널링 없이 L3 라우팅 가능) |
설정 난이도 | 간단하고 직관적 | 약간 복잡하지만 유연함 |
확장성 | 소규모/중간 규모에 적합 | 대규모 클러스터에 적합 |
운영 예시 | 테스트, 단순 배포 환경 | 엔터프라이즈, 보안 필수 환경 |
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
🔗 8. 워커 노드 클러스터 조인
마스터 노드에서 출력된 kubeadm join 명령어를 복사한 후 각 워커 노드에서 실행합니다:
kubeadm join 192.168.1.100:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
✅ 마무리
이제 Kubernetes 클러스터가 완성되었습니다. 다음 단계로 Helm, Ingress Controller, Metrics Server 등을 추가하여 클러스터를 더욱 실무에 맞게 확장할 수 있습니다. 워크로드 배포, 자동화된 운영 환경 구성도 이 기반 위에서 구현 가능합니다.
'DevOps > Kubernetes' 카테고리의 다른 글
Kubernetes Master(Node)에서 Pod 스케줄링 방지하기 (0) | 2025.04.09 |
---|---|
Kubernetes CNI 비교: Calico vs Flannel - 당신의 클러스터에 더 적합한 선택은? (0) | 2025.04.06 |
Kubernetes 환경에서 InfluxDB를 자동화된 방식으로 배포하기 (0) | 2025.04.05 |