Raspberry pi

라즈베리파이2 쿠버네티스 워커노드 만들기

[혜안] 2022. 8. 15. 23:07
728x90

새로 장만한 라즈베리파이4에 쿠버네티스 컨트롤플레인 설치를 완료했습니다.

2022.08.03 - [Raspberry pi] - 라즈베리파이4 쿠버네티스 설치

 

라즈베리파이4 쿠버네티스 설치

라즈베리파이4에 라즈비안 64bit (bullseye) 를 설치하고, 그 위에 쿠버네티스 환경을 셋업해보려고 했습니다. 하지만, 몇가지 설정을 잡는데에서 한계를 느껴 결국 64bit를 포기하고 32bit로 재설치를

viewise.tistory.com

 

그리고 기존에 사용하던 라즈베리파이2에 이것저것 돌리던 잡동사니들을 컨테이너화 해서 라즈베리파이4에 쿠버네티스 위에 올렸습니다.

이제 라즈베리파이2가 비었으니, OS를 재설치하고 쿠버네티스 워커노드로 라즈베리파이4에 join 시키려고 합니다.

재설치하는 이유는,

기존에 사용하던 OS는 라즈비엔 jessie였는데요.

쿠버네티스를 설치하려고 이것저것 시도할때마다 EOL(End of Life) 경고가 자꾸 발생해서, 초기화를 결심했습니다.

 

라즈베리파이2에 최신 이미지 올리는 것은, 지난번 사용한 Raspberry pi Imager를 사용하면 어렵지 않습니다.

지난 포스팅을 참조하시구요.

2022.07.27 - [Raspberry pi] - 라즈베리파이 4 라즈비안 64bit 설치 : SSH 최초 접속 : 스펙 확인

 

라즈베리파이 4 라즈비안 64bit 설치 : SSH 최초 접속 : 스펙 확인

라즈베리파이 2를 몇 년째 너무 혹사 시키는 것 같고 뭔가를 새로 더 해보기엔 성능이 부족한 것 같아서 라즈베리파이 4를 구매했습니다. 쿠버네티스 환경을 만들고 거기에 그동안 만든 프로젝

viewise.tistory.com

 

이번에는 쿠버네티스 워커노드의 설치부터 join까지를 시도해보겠습니다.

 

기본 설치과정은 유사합니다.

실패하거나 삽질한 것들은 빼고 성공한 명령어만 나열해봅니다.

 

root 계정으로 작업했습니다.

$ apt-get update & apt-get upgrade
$ swapoff -a
$ systemctl disable dphys-swapfile.service
$ reboot now

$ apt install containerd
$ sed -i '$ s/$/ cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1 swapaccount=1 systemd.unified_cgroup_hierarchy=0/' /boot/cmdline.txt

$ cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

$ sysctl --system

$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

$ cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF

$ apt update && sudo apt install -y kubelet kubeadm kubectl

$ apt-mark hold kubelet kubeadm kubectl

그리고 vi편집기로 containerd 설정을 열어 disabled_plugins = ["cri"] 항목을 주석처리합니다.

$ vi /etc/containerd/config.toml
.
.
#disabled_plugins = ["cri"]
.
.

그리고 다시 리부트

$ reboot now

 

컨트롤플레인인 라즈베리파이4를 설치한지 오래되어서 join을 위한 토큰값이 만료되었기 때문에 새로 생성해줍니다.

$ kubeadm token create
[토큰값 출력]

$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
[해시값 출력]

각각에서 나온 토큰값과 해시값으로 join  명령어를 조합하여 워커노드(라즈베리파이2)에서 실행합니다.

root 계정으로 실행합니다.

$ kubeadm join [컨트롤플레인 IP]:6443 --token [토큰값] --discovery-token-ca-cert-hash sha256:[해시값]

 

아래와 같이 출력되면 정상입니다.

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.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

 

컨트롤플레인에서 노드를 조회해봅니다.

$ k get node
NAME           STATUS   ROLES           AGE   VERSION
raspberrypi2   Ready    <none>          42m   v1.24.3
raspberrypi4   Ready    control-plane   12d   v1.24.3

드디어 컨트롤플레인만 외로이 홀로있던 쿠버네티스 클러스터에 워커노드가 붙었습니다.

 

$ k get pod -o wide
NAME                              READY   STATUS    RESTARTS       AGE    IP             NODE           NOMINATED NODE   READINESS GATES
cluster-shell                     1/1     Running   1 (4d9h ago)   4d9h   10.244.0.81    raspberrypi4   <none>           <none>
coin-gather-5d7b766468-bd5rc      1/1     Running   0              47h    10.244.0.94    raspberrypi4   <none>           <none>
coin-trader-6c99cf5b4f-l5zhp      1/1     Running   0              23h    10.244.0.111   raspberrypi4   <none>           <none>
fan-controller-chftl              1/1     Running   0              41m    10.244.1.3     raspberrypi2   <none>           <none>
fan-controller-spgm8              1/1     Running   0              5d8h   10.244.0.55    raspberrypi4   <none>           <none>
mariadb-custom-6c89d5546f-nzbk4   1/1     Running   0              2d1h   10.244.0.91    raspberrypi4   <none>           <none>

그동안 만들었던 pod들은 아직 라즈베리파이4(컨트롤플레인)에 있습니다.

유일하게 데몬셋인 fan-conttoller 만 라즈베리파이2에 배포되었네요.

하지만, 라즈베리파이2에는 쿨링팬이 달려있지 않습니다.ㅜㅜ

하나 사서 달아줘야겠네요.

 

728x90