Post

[Kubernetes] 클러스터 환경 구축

📌 들어가며

이번 글에서는 3-node 쿠버네티스 클러스터를 직접 구축한다. VirtualBox VM 준비부터 쿠버네티스용 사전 설정, kubeadm으로 클러스터 초기화, 그리고 관리형 서비스인 Amazon EKS 구성까지 다룬다.

클러스터 구성 큰 그림 마스터 노드 1개(Control Plane) + 워커 노드 3개로 구성한다. 마스터에서 kubeadm init으로 초기화하고, 워커들이 kubeadm join으로 합류하는 구조다.

flowchart TD
    Master["🧭 마스터 노드<br/>(Control Plane)"]
    W1["⚙️ k8s-node1"]
    W2["⚙️ k8s-node2"]
    W3["⚙️ k8s-node3"]
    Master -- "kubeadm join" --- W1 & W2 & W3

1. VM 환경 구성 (Ubuntu 22.04)

VirtualBox로 VM을 만든다. 쿠버네티스 최소 사양은 CPU 4개·메모리 4GB다.

항목설정
CPU / 메모리4개 / 4GB(최소)
디스크100GB
네트워크어댑터1(NAT) + 어댑터2(Host-Only)

Ubuntu 설치 후 필수 도구(vim, openssh-server, net-tools)를 설치하고 Putty·MobaXterm으로 원격 접속한다.

💡 어댑터 2개를 쓰는 이유 — NAT는 VM이 인터넷에 나가는 통로, Host-Only는 호스트 PC ↔ VM 및 VM 간 내부 통신용이다. 노드 간 통신에는 고정 IP를 쓸 수 있는 Host-Only 네트워크가 필요하다.


2. 쿠버네티스용 사전 설정

쿠버네티스는 몇 가지 커널·시스템 설정을 요구한다. 특히 SWAP 비활성화는 필수다.

설정명령/내용
방화벽 해제ufw disable
SWAP 비활성화swapoff -a + /etc/fstab 수정
NTPntp 설치(시간 동기화)
IP 포워딩/proc/sys/net/ipv4/ip_forward → 1
컨테이너 런타임containerd 구성
iptables브릿지 설정 추가(노드 간 통신)
도구 설치kubelet, kubeadm, kubectl + apt-mark hold(버전 고정)

⚠️ SWAP은 반드시 꺼야 한다. 쿠버네티스는 메모리를 정확히 관리하기 위해 SWAP이 켜져 있으면 kubelet이 기동을 거부한다. swapoff -a뿐 아니라 /etc/fstab에서도 주석 처리해 재부팅 후에도 유지되게 한다.

이후 /etc/hosts에 노드 IP·호스트명을 등록하고, 마스터 VM을 복제해 워커 노드(k8s-node1~3)를 만든 뒤 각각의 호스트명·IP를 변경한다.


3. 클러스터 초기화 & 워커 조인

마스터에서 초기화하고, 네트워크 플러그인(Calico)을 설치한 뒤 워커를 합류시킨다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# ① 마스터: 컨트롤 플레인 초기화
kubeadm init --pod-network-cidr=<CIDR> --apiserver-advertise-address=<마스터IP>

# ② kubectl 설정 (admin.conf 복사)
mkdir -p $HOME/.kube && cp /etc/kubernetes/admin.conf $HOME/.kube/config

# ③ 네트워크 플러그인(Calico) 설치
kubectl apply -f calico.yaml

# ④ 노드 상태 확인 (Ready?)
kubectl get nodes

# ⑤ 워커 노드: 클러스터 합류
kubeadm join <마스터IP>:6443 --token <토큰> --discovery-token-ca-cert-hash <해시>

💡 네트워크 플러그인(CNI)을 설치하기 전까지 노드는 NotReady다. Calico 같은 CNI가 파드 간 네트워크를 구성해줘야 비로소 Ready가 된다. 초기화 직후 노드가 NotReady여도 당황하지 말고 CNI를 먼저 설치하자.


4. Amazon EKS (관리형)

직접 구축 대신 AWS 관리형 쿠버네티스(EKS)를 쓰면 클러스터 구축·관리가 간소화된다.

1
2
3
4
5
6
# 도구 설치: kubectl, eksctl, aws configure
aws configure                                  # 액세스 키·리전 설정

# EKS 클러스터 생성 (eksctl이 CloudFormation으로 구성)
eksctl create cluster --name <클러스터명> \
  --node-type <인스턴스유형> --nodes <수> --version <버전>

💡 직접 구축 vs EKS — VirtualBox 구축은 내부 동작을 이해하는 데 좋지만, 운영에서는 Control Plane 관리·업그레이드·고가용성을 AWS가 대신해주는 EKS가 훨씬 편하다. eksctl 한 줄로 클러스터가 만들어진다.


📝 정리

1
2
3
4
5
클러스터 구축
├─ VM      Ubuntu 22.04(CPU4·RAM4G), NAT+Host-Only
├─ 사전설정 SWAP off · containerd · iptables · 도구 설치
├─ 초기화   kubeadm init → CNI(Calico) → kubeadm join
└─ 관리형   eksctl create cluster (EKS)
개념한 줄 정의
kubeadm init/join클러스터 초기화/합류
SWAP offkubelet 기동 필수 조건
CNI파드 네트워크(설치해야 Ready)

클러스터 구축의 핵심은 사전 설정(SWAP off 등) → kubeadm init → CNI 설치 → kubeadm join의 순서다. 이 과정을 이해하면, EKS 같은 관리형 서비스가 무엇을 대신해주는지도 명확해진다.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.