워커 노드와 마스터 노드 연결

y001·2025년 3월 15일
0
post-thumbnail

1. 시작하면서

이전 포스팅에서는 EC2 인스턴스에 Docker와 Kubernetes를 설치하고, 마스터 노드와 워커 노드를 개별적으로 구성하는 과정을 다루었다. 이제 워커 노드를 마스터 노드에 연결하여 Kubernetes 클러스터를 완성하는 과정을 설명한다.

마스터 노드와 워커 노드를 연결하면 클러스터가 정상적으로 동작하며, kubectl을 사용하여 전체 클러스터를 관리할 수 있다.

전체 구성


2. 마스터 노드에서 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

이제 이 명령어를 워커 노드에서 실행하면 된다.


3. 워커 노드에서 마스터 노드에 조인

워커 노드에서 아래 명령어를 실행하여 마스터 노드와 연결한다.

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.

이제 워커 노드가 클러스터에 추가되었다.


4. 마스터 노드에서 클러스터 상태 확인

마스터 노드에서 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 상태여야 정상적으로 클러스터가 연결된 것이다.


5. Ansible을 활용한 Kubernetes 자동 설치

지금까지 Kubernetes 클러스터를 수동으로 설치하고 워커 노드를 연결하는 과정을 다루었다. 하지만, Ansible을 사용하면 여러 대의 노드에 자동으로 Kubernetes를 배포할 수 있다.

Ansible과 Kubespray

  • Ansible: 서버 구성 자동화 도구로, 반복적인 설치 작업을 스크립트로 처리할 수 있다.
  • Kubespray: Ansible을 기반으로 Kubernetes 클러스터를 자동으로 구성할 수 있는 오픈소스 프로젝트.

Ansible을 사용한 설치 과정

  1. Ansible 및 의존 패키지 설치

    sudo apt update -y
    sudo apt install -y python3-pip git
    pip3 install --user ansible
  2. Kubespray 다운로드

    git clone https://github.com/kubernetes-sigs/kubespray.git
    cd kubespray
    pip3 install -r requirements.txt
  3. 클러스터 인벤토리 설정

    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
  4. 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 상태여야 정상적으로 클러스터가 연결된 것이다.


5. 네트워크 플러그인 확인 (Calico)

워커 노드가 정상적으로 통신하려면 네트워크 플러그인이 올바르게 설치되어 있어야 한다. 마스터 노드에서 다음 명령어를 실행하여 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 상태여야 정상적으로 작동하는 것이다.


6. 테스트: 클러스터에서 애플리케이션 배포

쿠버네티스가 정상적으로 동작하는지 확인하기 위해 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 기본 페이지가 떠야 한다.


7. 마무리

이제 마스터 노드와 워커 노드가 연결되었으며, 클러스터가 정상적으로 동작하는 것을 확인했다. 이를 통해 Kubernetes 클러스터를 수동으로 구성하는 과정을 익혔다.

0개의 댓글