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.yaml
에 kubeconfig 파일을 작성하고, 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.yaml
에 kubeconfig 파일이 들어있다. 이 정보를 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도 확인할 수 있다.