
이전 포스팅에서는 EC2 인스턴스에 Docker와 Kubernetes를 설치하고, 마스터 노드와 워커 노드를 개별적으로 구성하는 과정을 다루었다. 이제 워커 노드를 마스터 노드에 연결하여 Kubernetes 클러스터를 완성하는 과정을 설명한다.
마스터 노드와 워커 노드를 연결하면 클러스터가 정상적으로 동작하며, kubectl을 사용하여 전체 클러스터를 관리할 수 있다.
전체 구성
kubeadm join 명령어 확인워커 노드를 클러스터에 추가하려면 마스터 노드에서 kubeadm init 실행 시 출력된 kubeadm join 명령어가 필요하다. 마스터 노드에서 아래 명령어를 실행하여 다시 확인할 수 있다.
kubeadm token create --print-join-command
✅ 출력 예시:
kubeadm join 172.31.10.150:6443 --token abcdef.1234567890abcdef \
--discovery-token-ca-cert-hash sha256:098f6bcd4621d373cade4e832627b4f6
이제 이 명령어를 워커 노드에서 실행하면 된다.
각 워커 노드에서 아래 명령어를 실행하여 마스터 노드와 연결한다.
sudo kubeadm join 172.31.10.150:6443 --token abcdef.1234567890abcdef \
--discovery-token-ca-cert-hash sha256:098f6bcd4621d373cade4e832627b4f6
✅ 성공 메시지 예시:
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
이제 워커 노드가 클러스터에 추가되었다.
마스터 노드에서 kubectl을 사용하여 클러스터에 추가된 노드를 확인한다.
kubectl get nodes
✅ 정상적인 출력 예시:
NAME STATUS ROLES AGE VERSION
ip-172-31-10-150 Ready control-plane 30m v1.28.15
ip-172-31-12-24 Ready <none> 5m v1.28.15
ip-172-31-15-30 Ready <none> 5m v1.28.15
모든 노드가 Ready 상태여야 정상적으로 클러스터가 연결된 것이다.
지금까지 Kubernetes 클러스터를 수동으로 설치하고 워커 노드를 연결하는 과정을 다루었다. 하지만, Ansible을 사용하면 여러 대의 노드에 자동으로 Kubernetes를 배포할 수 있다.
Ansible 및 의존 패키지 설치
sudo apt update -y
sudo apt install -y python3-pip git
pip3 install --user ansible
Kubespray 다운로드
git clone https://github.com/kubernetes-sigs/kubespray.git
cd kubespray
pip3 install -r requirements.txt
클러스터 인벤토리 설정
cp -rfp inventory/sample inventory/mycluster
vi inventory/mycluster/inventory.ini
[all]
master ansible_host=172.31.10.150
worker1 ansible_host=172.31.12.24
worker2 ansible_host=172.31.15.30
[kube_control_plane]
master
[kube_node]
worker1
worker2
[etcd]
master
[k8s_cluster:children]
kube_control_plane
kube_node
etcd
Kubernetes 클러스터 설치 실행
ansible-playbook -i inventory/mycluster/inventory.ini --become --become-user=root cluster.yml
Ansible을 활용하면 수동 설치의 번거로움을 줄이고, 여러 개의 노드를 쉽게 관리할 수 있다.
이제 Kubernetes 클러스터 운영을 자동화하는 방법까지 익혔다! 🚀
마스터 노드에서 kubectl을 사용하여 클러스터에 추가된 노드를 확인한다.
kubectl get nodes
✅ 정상적인 출력 예시:
NAME STATUS ROLES AGE VERSION
ip-172-31-10-150 Ready control-plane 30m v1.28.15
ip-172-31-12-24 Ready <none> 5m v1.28.15
ip-172-31-15-30 Ready <none> 5m v1.28.15
모든 노드가 Ready 상태여야 정상적으로 클러스터가 연결된 것이다.
워커 노드가 정상적으로 통신하려면 네트워크 플러그인이 올바르게 설치되어 있어야 한다. 마스터 노드에서 다음 명령어를 실행하여 calico가 정상적으로 동작하는지 확인한다.
kubectl get pods -n kube-system
✅ 정상적인 출력 예시:
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-6cbb4665d5-9fhv4 1/1 Running 0 15m
calico-node-kkdqx 1/1 Running 0 15m
coredns-5c98db65d4-7ghxq 1/1 Running 0 30m
coredns-5c98db65d4-kkg8x 1/1 Running 0 30m
모든 Pod가 Running 상태여야 정상적으로 작동하는 것이다.
쿠버네티스가 정상적으로 동작하는지 확인하기 위해 nginx 배포를 실행한다.
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
배포된 파드 확인:
kubectl get pods -o wide
✅ 정상적인 출력 예시:
NAME READY STATUS RESTARTS AGE IP NODE
nginx-7bb7cd8db5-l2qvx 1/1 Running 0 2m 10.244.1.2 ip-172-31-12-24
서비스 확인:
kubectl get svc
✅ 정상적인 출력 예시:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 40m
nginx NodePort 10.100.200.45 <none> 80:31234/TCP 2m
웹 브라우저에서 http://<워커노드-Public-IP>:31234에 접속하면 Nginx 기본 페이지가 떠야 한다.
이제 마스터 노드와 워커 노드가 연결되었으며, 클러스터가 정상적으로 동작하는 것을 확인했다. 이를 통해 Kubernetes 클러스터를 수동으로 구성하는 과정을 익혔다.