작업노드까지 설치가 끝났다면
이제 마스터노드와 작업노드를 연결해줘야 한다.
첫 글에서 k8s 클러스터에 노드를 추가하기 위한 add 커맨드를 복사해서 보관하라고 했는데,
정작 내가 피씨 재부팅하면서 커맨드를 잃어버렸다.
이에 수동으로 만드는 법에 대해 빠르게 설명하고
넘어가겠다.
필요한건 3가지
- token 값 (kubeadm token list)
- ca cert hash 값 (openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | awk '{print $2}')
- 마스터노드 ip (ifconfig)
괄호 안에 명령을 실행해서 해당 정보들을 알아온 다음에 아래 명령을 만들면 된다.
kubeadm join "마스터노드 ip":6443 --token "토큰 값" --discovery-token-ca-cert-hash sha256:"hash 값" |
1. 작업노드에 쿠버네티스 사용을 위한 패키지 설치
마스터노드와 크게 다르진 않지만,
그래도 복습할 겸 다시 정리한다.
- k8s 관련
sudo apt update && sudo apt install -y apt-transport-https curl curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo tee /etc/apt/trusted.gpg.d/kubernetes.asc echo "deb https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt update sudo apt install -y kubelet kubeadm kubectl sudo systemctl enable --now kubelet |
- containerd 관련
sudo apt install -y containerd sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml sudo systemctl restart containerd sudo systemctl enable containerd |
- 시스템 파일 설정
sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstab sudo tee /etc/sysctl.d/k8s.conf <<EOF net.ipv4.ip_forward = 1 EOF sudo sysctl --system |
2. 마스터노드의 클러스터에 join 하기
위에서 만든 kubeadm join 명령을 긁어서 작업노드에서 실행해주면 된다.
kubeadm join 192.168.12.233:6443 --token anz0hn.0rstcsko~~~~~ --discovery-token-ca-cert-hash sha256:bdf241b2d8c1~~~~~ |
(원래 쓰던 고정 IP가 있었는데, 이번에 os 다시 설치하면서 IP가 바꼈다는 사실을 깜빡하고 있다가 엄청 삽질했다..)
추가로 설치하면서 실수로 microk8s를 설치해버려서
자꾸 10250 port를 이 녀석이 잡아먹는 바람에 포트가 사용중이라는 에러가 작업노드에 있어서 엄청 고생했다.
위의 명령 실행하고 나니 또 에러다..
하아..
순서가 꼬이면서 kubelet이 실행이 안되어 있어서 그런 문제였다.
문제의 해결법은 여러개가 있으니 찾아서 해결하면 되는데,
나 같은 경우는 swap이 재시작시에 꺼지도록 되어 있었어야 하는데 안되어 있어서
swap이 실행중이여서 발생한 에러였다.
이제 다시 join....하면 기존 파일들이 남아있어서
kubeadm 이용해서 초기화를 해버리자..
10250 포트를 사용중인 경우엔 해당 포트 사용중인 프로세스도 종료해야 한다.
sudo kubeadm reset -f sudo rm -rf /etc/kubernetes sudo rm -rf /var/lib/kubelet sudo rm -rf /var/lib/etcd sudo rm -rf ~/.kube |
sudo netstat -tulnp | grep 10250 |
위 명령어로 10250 포트 사용중인 프로세스 조회 가능하다.
그리고 join 커맨드를 실행하기 전에는 kubelet을 중지 시키고 해야한다.
안그러면 위에처럼 10250 포트를 잡아먹고 있어서 실행이 안된다.
정상적으로 실행됐다면, 위와 같이 나올거다.
어제 하루 종일 vm -> 호스트 쪽으로 join이 안되는 바람에 엄청 고생했는데,
생각해보니 호스트와 vm의 ip 대역이 nat 때문에 다르게 설정되어 있어서
둘 간의 k8s 연결이 가능은 하지만, 브리지를 사용하는 등의 추가적인 처리를 해줘야 해서
그냥 masternode도 vm 안으로 넣어버렸다.
그랬더니 한방에 되더라.....
여튼 여기까지 다됐으면 이제 클러스터에 잘 인식이 되는지 확인해보자.
마스터노드에서 커맨드 실행
kubectl get pod -A |
위와 같이 문제 없이 모든 pod가 잘돌고 있는 모습이다.
kubectl get nodes |
노드들도 문제없이 Ready 상태로 잘 실행되고 있는 모습이다.
여기까지 하면 k8s cluster가 생성된다.
이제 다음글부터는 CI/CD에 대해 정리해보자.
'Cluster > CI CD' 카테고리의 다른 글
쿠버네티스 설치, 구축부터 CI/CD까지 구현해보기 - 6. Github를 수정하면 Docker Image 자동으로 수정되도록 설정하기(CI 설정) (0) | 2025.03.21 |
---|---|
쿠버네티스 설치, 구축부터 CI/CD까지 구현해보기 - 5. Github 애플리케이션을 컨테이너 이미지로 변환하기 (0) | 2025.03.21 |
쿠버네티스 설치, 구축부터 CI/CD까지 구현해보기 - 3. 작업노드 생성을 위한 KVM 설치 및 OS 설치 (0) | 2025.03.19 |
쿠버네티스 설치, 구축부터 CI/CD까지 구현해보기 - 2. 쿠버네티스 클러스터 설정 (0) | 2025.03.19 |
쿠버네티스 설치, 구축부터 CI/CD까지 구현해보기 - 1. 쿠버네티스 설치하기 (0) | 2025.03.19 |