-
[(Kubeadm) K8s 클러스터 구축 3/3] Kubeadm init 및 Node joinKubernetes 2025. 10. 16. 20:00
[(Kubeadm) K8s 클러스터 구축 2/3] Kubeadm, Kubelet, Kubectl 설치
[(Kubeadm) K8s 클러스터 구축 1/3] Container Runtime 설치개요kubeadm 기반으로 K8s클러스터를 구축하는 과정을 3편의 글로 요약해 본다.가용 Virtual Machine이 2대 이상(각 Machine의 메모리 2GB, 2 CPU 이상) 준비됐
crayeji.tistory.com
앞선 글 [01. Container Runtime(Containerd) 구성]와 [02. Kubeadm, Kubelet, Kubectl 설치]에서
Container Runtime 및 kubeadm, kubelet, kubectl 설치가 마쳐져 있어야 한다.
Kubeadm Init 하기 전 설정
1. Memory Swap 비활성화 (Master, Worker Node 모두)
Kubernetes v1.33에서 kubelet은 swap(스왑 메모리)이 켜져 있으면 기본적으로 실행을 거부한다고 언급되었다.
kubelet이 적절하게 동작하도록 swap을 비활성화했다.sudo swapoff -a sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab2. 방화벽 K8s관련 포트 열기 (Master, Worker Node 각각)

# Master sudo ufw allow 6443/tcp sudo ufw allow 2379:2380/tcp sudo ufw allow 10250/tcp sudo ufw allow 10257/tcp sudo ufw allow 10259/tcp# Worker sudo ufw allow 10250/tcp sudo ufw allow 30000:32767/tcp* CNI/Pod 네트워크로 열어야 하는 포트는 CNI 플러그인(Flannel, Calico, Cilium 등)에 따라 다르므로 별도 설정이 필요할 수 있다.
3. IPv4 패킷 포워딩 켜기 (Master, Worker Node 모두)
K8s는 Pod 간 네트워크를 만들기 위해 노드에서 패킷을 다른 인터페이스로 전달해야 한다.
이때, 리눅스 커널의 IP포워딩(net.ipv4.ip_forward)이 기본적으로 비활성화되어 있으니, Pod 간 통신&라우팅이 가능하도록 활성화한다.# 설정 파일을 열어 net.ipv4.ip_forward=1 주석 해제 또는 추가 sudo vim /etc/sysctl.conf # 설정 파일 변경 내용을 커널에 즉시 반영 sudo sysctl -p
Kubeadm Init
Init (Master Node)
sudo kubeadm init --pod-network-cidr=192.168.0.0/16출력된 join 명령어를 복사해 두자. (추후 Worker Node join 단계에서 복붙 할 것이다.)
Pod Network CIDR은 CNI에 따라 달라지는데, 이 글에서는 Calico를 사용하므로Calico 공식 문서에서 제공하는 IP Pool 범위 192.168.0.0/16를 써줬다. (256x256=약 65000)
# 참고 실행 후 kubeadm이 하는 일: - etcd 초기화 (클러스터 저장소) - API Server / Controller Manager / Scheduler kube-system 네임스페이스에 Pod로 배포 - kubeconfig 생성 (/etc/kubernetes/admin.conf) - Worker Node가 붙을 수 있는 kubeadm join 명령어 출력Kubeconfig Setting (Master Node) (선택)
kubectl은 기본적으로 $HOME/.kube/config 파일을 찾아
클러스터의 접근 정보(클러스터 주소, 인증서, 사용자 계정 등)를 로드한다.
따라서 해당 경로에 기본으로 사용할 kubeconfig 파일을 복사해 두면,
kubectl이 별도 옵션(--kubeconfig) 없이 바로 클러스터와 통신할 수 있다.mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/configWorker node Join
Worker Node를 클러스터에 Join 하자.
앞서 init시 복사해 뒀던 명령어를 복붙 한다.#복붙해뒀던 join 명령 kubeadm join <MASTER_IP>:6443 --token <TOKEN> \ --discovery-token-ca-cert-hash sha256:<CA SHA256 HASH>- 참고) 복사해 둔 게 없을 경우, 아래 명령을 통해 토큰 재발급과 동시에 join명령어를 그대로 다시 받을 수 있다.
(물론 kubeadm token list로 기존 토큰을 조회할 수도 있다.)
sudo kubeadm token create --print-join-commandMaster에서 클러스터 상태 확인
kubectl get nodes이제 kubectl명령으로 클러스터의 노드들을 확인할 수 있다.
다만, Status는 NotReady로 뜰 텐데, CNI가 아직 설치되지 않았기 때문이다.
CNI(네트워크 플러그인) 설치
NetworkPolicy를 지원하는 Calico를 선택했다.
### crd 설치 kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.30.3/manifests/tigera-operator.yaml### cr 리소스 create kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.30.3/manifests/custom-resources.yaml이제 kubectl get nodes를 해보면 노드들이 Ready로 뜨며, 작업 가능한 K8s 클러스터 구성이 완료됐다.


'Kubernetes' 카테고리의 다른 글
[(Kubeadm) K8s 클러스터 구축 2/3] Kubeadm, Kubelet, Kubectl 설치 (0) 2025.10.15 [(Kubeadm) K8s 클러스터 구축 1/3] Container Runtime 설치 (1) 2025.10.14 CKA 쿠버네티스 자격증 취득과정 기록 (2025. 02 변경 이후) (3) 2025.07.25 PV 확장 원리, Kubernetes CSI Driver (1) 2025.07.09 Dockerfile(ENTRYPOINT, CMD) => YAML Definition file(command, args) 덮어쓰기 과정 (0) 2025.06.30 - 참고) 복사해 둔 게 없을 경우, 아래 명령을 통해 토큰 재발급과 동시에 join명령어를 그대로 다시 받을 수 있다.