random_image

라즈베리 파이에 K3S 클러스터를 구축해 사용해보자

tony | Feb. 18, 2024, 9:45 a.m. | devops | kubernetes

홈 네트워크에 자기만의 k8s 의 경량화 버전의 클러스터를 사용해 여러 application들을 만들어볼 수있다

k8s의 경량화 버전인 k3s를 구축해 보자. 재미삼아 집에서 여러 앱들을 만들어 구동해볼 수 있을 것이다.

 

K3S 클러스터 구축

라즈베리파이 2대(5와 3b 모델)로 k3s 클러스터 구축을 하였다. 주의할 점은 os는 Ubuntu로 해야한다는 점이다.

k3s는 경량화 버전의 kubernetes 이어서 라즈베리파이와 같이 성능이 약한 머신을 노드로 사용할 수 있게 해준다.
k8s의 etcd대신 기본 스토리지 메커니즘으로 sqlite3를 기반으로 하는 경량 스토리지 백엔드를 사용한다.

구축 방법이 minikube만큼 쉽다. k3s quickstart 가이드를 따라 구축하면 된다.

master 구축

먼저, raspberrypi 5 에는 master로서 역할을 하도록 다음의 명령어만 수행하면 쉽게 구축이 된다.

curl -sfL https://get.k3s.io | sh -

/etc/rancher/k3s/k3s.yamlkubeconfig 파일을 작성하고, K3s가 설치한 kubectl이 자동으로 이를 사용하게 된다.

설치가 되면 다음 pods들이 Runinng중이면 설치가 끝난 것이다. 모두 설치가 되는데 시간이 조금 걸린다.

$ kubectl get pods -n kube-system
NAME                                        READY   STATUS      RESTARTS      AGE
helm-install-traefik-crd-rsrzg              0/1     Completed   0             38h
helm-install-traefik-5zlfj                  0/1     Completed   1             38h
svclb-traefik-9ee1ea75-pqdfs                2/2     Running     0             38h
local-path-provisioner-84db5d44d9-bx7ft     1/1     Running     0             38h
coredns-6799fbcd5-s9vj6                     1/1     Running     0             38h
traefik-f4564c4f4-5dp2n                     1/1     Running     0             38h
svclb-traefik-9ee1ea75-lzpds                2/2     Running     4 (38h ago)   38h
metrics-server-67c658944b-hp5gs             1/1     Running     0             38h
svclb-swyoobros-deployment-6cca0c6c-jfls8   1/1     Running     0             9h
svclb-swyoobros-deployment-6cca0c6c-vx7tb   1/1     Running     0             9h

node 구축

hostname 변경

우선 raspberry pi 의 hostname이 master와 같으면 헷갈리 때문에 변경을 한다.
/etc/hosts에서 hostname을 변경한다. 그리고, raspberry pi 머신 기본 셋팅이 reboot 하면 hostname이 다시 바뀌기 때문에 /etc/cloud/cloud.cfg 파일의 preserve_hostname 옵션을 true로 변경한다.

node로 등록

이번엔 raspberrypi 3b 를 node로서 역할을 하도록 다음의 명령어를 사용하여 구축한다.
이때 K3S_TOKEN에 사용할 값은 서버 노드의 /var/lib/rancher/k3s/server/node-token에 저장되어있으며, K3S_URL 파라미터는 master의 ip를 넣어주면된다.

curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -

설치하고 나면 다음과 같이 k3s에 master와 node가 셋팅이 된다.

$ kubectl get nodes
NAME           STATUS   ROLES                  AGE   VERSION
raspberrypi    Ready    control-plane,master   38h   v1.28.6+k3s2
raspberrypi3   Ready    <none>                 38h   v1.28.6+k3s2

클러스터 외부에서 kubectl 로 접속

/etc/rancher/k3s/k3s.yamlkubeconfig 파일이 들어있다. 이 정보를 k3s 클러스터 내부 머신이 아닌 다른 머신 (예를들면 맥북)의 kubectl 이 바라보도록 설정을 해주면 더욱 손쉽게 k3s클러스터를 사용할 수 있다.

/etc/rancher/k3s/k3s.yaml파일을 맥북의 ~/.kube/config로 바꿔주면 된다. 만약 기존 클러스터들이 등록되어있다면 clusters, contexts, users 필드에 추가해주면 된다. 이떄 주의 사항은 server 필드에 master노드의 주소가 들어가야 한다.

위의 설정이 끝나고 나면 home network안에서 어느 머신이든 k3s 클러스터를 바라 볼 수 있게 된다. 좀더 편하게 cluster를 사용할 수 있도록 다음 2개의 툴을 추천한다.

  • kubectx로 손쉽게 등록된 context 의 변환이 가능하다.
  • k9s로 편하게 container의 상태, 로그등이 조회가능하다.

Appendix

  • kubectl get nodes -o wide 명령어로 각 containers들의 IP를 확인할 수 있다.
  • kubectl get nodes --show-labels 로 label도 확인할 수 있다.

Last updated on Feb. 18, 2024, 9:54 a.m.

LEAVE A COMMENT