저번 포스팅에서는 라즈베리파이에 OS를 깔고 기본적인 네트워크 세팅을 마쳤다. ssh를 통해서 다양한 호스트에 접속할 수 있게 되었을 것이다. 이번 포스팅에서는 각 라즈베리파이 호스트에 K8s의 경량화 버전인 K3s를 설치한다. 노드로 쓸 컴퓨터의 스펙은 라즈베리파이 4 4GB이다.
이번 포스팅에서는 K3s의 설치 과정에 대해서 마스터 노드와 워커 노드를 구분하여 포스팅할 예정이다.
본론
Lightweight Kubernetes. Easy to install, half the memory, all in a binary of less than 100MB
K3s는 쿠버네티스와 완전히 호환되며 결과적으로 가볍게 쿠버네티스를 사용할 수 있게 하기 위해 만들어졌다. Kubernetes가 10글자이기 때문에 절반으로 줄여 K3s라고 부른다고 한다.
K3s는 대강 위의 구조를 가진다. K8s과 비슷하면서 약간씩 다른 구조를 띠고 있는데, 이러한 이유로 인해 K8s와의 호환을 하기 위해서는 약간의 설정이 필요하다. 또한 컨테이너 기반의 툴이기 때문에 어플리케이션을 띄우기 위해서는 dockerfile을 통한 docker image로 빌드하는 과정 또한 필요하다. dockerfile에 대한 내용은 다음 포스팅에서 다룰 예정이다.
이번 포스팅에서는 해당 깃허브에 있는 자료를 상당 부분 참고하였다. 설치 도중 막히는 부분이 있다면 참고하면서 진행하는 것을 추천한다.
- core_kubernetes : 쿠버네티스 설치
K3s 설치
마스터 노드 설치
먼저 마스터 노드에 접근하여 기본적인 세팅을 해주고 재부팅을 해야한다. sudo -i 를 통해서 root 권한으로 명령어를 실행하자.
echo "cgroup_memory=1 cgroup_enable=memory" >> /boot/cmdline.txt
다음으로 dhcpcd.conf 파일을 수정해 준다.
nano /etc/dhcpcd.conf
다음 라인을 추가한다.
interface wlan0
static ip_address=192.168.0.128/24
static routers=192.168.0.22
static routers는 ifconfig를 통해서 확인한 지금 접속한 호스트의 IP를 적어 두자. ip_address를 사용하지 않을 것 같은 블록을 할당해 주면 된다. 필자는 192.168.0.128을 할당해 주었다. 이제 마스터 노드가 될 컴퓨터를 다시 실행하자.
reboot
재부팅을 마친 후 다음 명령어들을 통해 기본적인 세팅을 시작한다. 이번에도 sudo -i를 통해서 root 권한을 가지고 작업한다.
apt update & apt upgrade
apt install -y docker.io nfs-common dnsutils curl
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="\
--node-name master --docker \
--disable servicelb " sh -
위 과정을 통해서 K3s 설치가 끝났다. K3s는 관련 설정들을 k3s.yaml에 가지고 있는데, 쿠버네티스와의 호환성을 위해서 사용하기 위해 몇 가지 설정을 추가하자.
# 마스터 통신을 위한 설정
mkdir ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown -R $(id -u):$(id -g) ~/.kube
echo "export KUBECONFIG=~/.kube/config" >> ~/.bashrc
source ~/.bashrc
이제 다음 명령어를 실행시키면 master 노드가 떠 있는 것을 볼 수 있을 것이다.
kubectl cluster-info
위 명령어를 통해서 클러스터의 정보를 볼 수 있다. master라는 이름으로 노드가 떠 있는데, 이제 worker 노드를 만들어보자. worker 노드는 master 노드에 종속적이기 때문에 마스터 노드의 정보들(노드 토큰, IP 주소)이 필요하다. 다음 정보를 확인하여 확인 변수로 저장해 둔다.
# 마스터 노드 토큰 확인
NODE_TOKEN=$(sudo cat /var/lib/rancher/k3s/server/node-token)
echo $NODE_TOKEN
MASTER_IP=$(kubectl get node master -ojsonpath="{.status.addresses[0].address}")
echo $MASTER_IP
워커 노드 설치
이제 워커 노드를 추가해 보자, 이때 워커 노드도 cgroup과 관련된 설정을 추가해주어야 한다. 다음 명령어를 통해 추가 및 재부팅을 하자.
sudo echo "cgroup_memory=1 cgroup_enable=memory" >> /boot/cmdline.txt && sudo reboot
부팅이 끝났으면 마스터 노드를 설정했을 때와 같이 sudo -i를 통해 root 권한을 얻고 다음 명령어를 실행한다.
NODE_TOKEN={방금 얻은 마스터 노드의 토큰}
MASTER_IP={방금 얻은 마스터 노드의 주소}
apt update
apt install -y docker.io nfs-common curl
# k3s 워커 노드 설치
curl -sfL https://get.k3s.io | K3S_URL=https://$MASTER_IP:6443 \
K3S_TOKEN=$NODE_TOKEN \
INSTALL_K3S_EXEC="--node-name worker --docker" sh -
위 명령어를 통해 정상적으로 agent의 K3s가 설치되면, 이제 마스터 노드로 돌아와서 kubectl get nodes 명령어를 통해 정상적으로 worker 노드의 동작을 확인할 수 있다. 환경 변수를 통해서 master node에 관한 정보를 정확히 설정해 두어야 정상적으로 설치된다.
마치며
이러한 과정을 통해서 기본적인 쿠버네티스 클러스터 세팅을 마쳤다. 다음 포스팅에서는 CI/CD의 CI 파트에 대해서 다룰 예정이다.
참고
- [pipi] : 쿠버네티스 Ingress 구축
- [bjpublic] : 쿠버네티스 설치
'DevOps > kubernetes' 카테고리의 다른 글
ETCD Leader Election이란? (1) | 2024.12.18 |
---|---|
Kubernetes의 Ingress와 Service 차이점에 대한 고찰 (0) | 2024.12.17 |
로컬 쿠버네티스 클러스터 환경 세팅 ( feat. minikube, lens ) (1) | 2024.12.16 |
[K8s homeserver 구축 - 3] github actions를 통한 CI (0) | 2023.11.10 |
[K8s homeserver 구축 - 1] 라즈베리파이4 기본 설정 (1) | 2023.11.08 |