이번에 RaspberryPI를 통한 클라우드 환경 구축 및
이 가이드에서는 Raspberry Pi 4 클러스터에 K3를 원활하게 설치하는 데 도움이 되는 커맨드 라인과 유용한 팁을 공유합니다.
본격적으로 설치 과정을 시작하겠습니다.
RaspBerry PI OS 설치
https://www.raspberrypi.com/software/operating-systems/
운영체제 설치를 하고 부팅을 해줍니다.
Linux Container 기능 활성화
위 설정은 리눅스 시스템에서 cgroup(Control Group)을 사용하여 메모리 및 CPU 자원을 제어하기 위한 것입니다.
이 설정을 추가하는 이유
- 자원 제어: cgroup 설정을 사용하면 시스템 관리자가 각 프로세스 그룹에 대해 메모리 및 CPU 자원 할당을 제어할 수 있습니다.
- 성능 향상: 특정 프로세스 그룹이 과도하게 자원을 사용하거나 다른 프로세스 그룹에 부정적인 영향을 미치는 경우, 이를 제한함으로써 시스템 전체의 성능을 개선할 수 있습니다.
- 서버 가상화 및 컨테이너: cgroup 설정은 가상화 및 컨테이너 환경에서 특히 유용합니다. 가상화된 환경에서 각 가상 시스템 또는 컨테이너에 대한 자원 할당을 제어할 수 있으므로, 시스템 전체의 자원을 효율적으로 활용할 수 있습니다.
/boot/firmware/cmdline.txt 파일의 마지막에 라인에
cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory 을 이어서 작성합니다.
sudo nano /boot/firmware/cmdline.txt
# 아래 코드를 을 이어서 작성
cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory
# nano 가 처음이라면
# 사용법
# 컨트롤+x 로 저장 & Y 로 저장 & 엔터로 저장하고 나오기
# 재부팅
sudo reboot
Docker 설치
k3s 설치 이전에 docker를 설치 합니다. docker 설치와 활성화는 다음의 명령어로 쉽게 할 수 있습니다.
<<꿀팁 :하루종일 도커 없이 K3s를 설치하려고 시도 했으나 Docker를 설치하고 K3s를 설치해야했다.>>
# docker 설치
sudo apt install docker.io
# docker 서비스 시작
sudo systemctl start docker
# 부팅시 docker 서비스 시작
sudo systemctl enable docker
K3s 설치 [ server -> K8s의 Master 와 동일 ]
k3s 설치도 다음 스크립트로 쉽게 설치 할 수 있습니다.
# 설치 스크립트
curl -sfL https://get.k3s.io | sh -s - --docker
# 서비스 확인
user@raspberrypi1:~ $ sudo systemctl status k3s
● k3s.service - Lightweight Kubernetes
Loaded: loaded (/etc/systemd/system/k3s.service; enabled; preset: enabl>
Active: active (running) since Thu 2024-04-11 20:32:51 KST; 1h 7min ago
Docs: https://k3s.io
Main PID: 2484 (k3s-server)
Tasks: 29
Memory: 583.5M
CPU: 8min 53.859s
CGroup: /system.slice/k3s.service
└─2484 "/usr/local/bin/k3s server"
Apr 11 21:32:52 raspberrypi1 k3s[2484]: W0411 21:32:52.461955 2484 sysinf>
Apr 11 21:32:52 raspberrypi1 k3s[2484]: W0411 21:32:52.463184 2484 machin>
Apr 11 21:34:25 raspberrypi1 k3s[2484]: I0411 21:34:25.299244 2484 trace.>
Apr 11 21:34:25 raspberrypi1 k3s[2484]: Trace[422721142]: ["GuaranteedUpdate>
Apr 11 21:34:25 raspberrypi1 k3s[2484]: Trace[422721142]: ---"Txn call comp>
Apr 11 21:34:25 raspberrypi1 k3s[2484]: Trace[422721142]: [598.032925ms] [59>
이제 kubectl 등등이 설치 되었을 것입니다.
# k3s node 상태 확인
sudo kubectl get ndoes
user@raspberrypi1:~ $ sudo kubectl get nodes
NAME STATUS ROLES AGE VERSION
raspberrypi1 Ready control-plane,master 8m8s v1.28.8+k3s1
k3s - server는 이제 끝났습니다.
K3s 설치 [ Agent -> K8s의 Worker와 동일 ]
준비사항 - woker node를 설치하기 위해서는 main node의 token이 필요 합니다.
token은 다음의 명령어로 확인이 가능합니다.
sudo cat /var/lib/rancher/k3s/server/node-token
K10db4cc46dfccb627942c905744dce8eekangbochanwrittensecsecsec20febc9db::server:58054e0acd0a3508bc4381e43e74b2ef
위의 Server-node 에서 설치한 것과 같이 Linux 컨테이너 활성화 및 docker 를 설치해줍니다.
이후 worker-node를 설치합니다.
# curl -sfL http://get.k3s.io | K3S_URL=https://<master_IP>:6443 K3S_TOKEN=<join_token> sh -s - --docker
# 위에 맞게 작성해준다
curl -sfL http://get.k3s.io | K3S_URL=https://192.168.0.10:6443 K3S_TOKEN=K10db4cc46dfccb627942c90574위의토큰과동일20febc9db::server:58054e0acd0a3508bc4381e43e74b2ef sh -s - --docker
설치 중에 멈춘듯 하지만 인내심을 갖으면 완료됩니다.
bochan@raspberrypi2:~ $ sudo systemctl status k3s-agent
● k3s-agent.service - Lightweight Kubernetes
Loaded: loaded (/etc/systemd/system/k3s-agent.service; enabled; preset:>
Active: active (running) since Thu 2024-04-11 12:40:30 BST; 14s ago
Docs: https://k3s.io
Process: 2234 ExecStartPre=/bin/sh -xc ! /usr/bin/systemctl is-enabled ->
Process: 2236 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, sta>
Process: 2237 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0>
Main PID: 2238 (k3s-agent)
Tasks: 13
Memory: 234.0M
CPU: 11.715s
CGroup: /system.slice/k3s-agent.service
└─2238 "/usr/local/bin/k3s agent"
main인 server node에서 worker node가 연결되었는지 확인합니다.
# node 연결된지 확인하세요
# 필자는 2대 연결
user@raspberrypi1:~ $ sudo kubectl get nodes
NAME STATUS ROLES AGE VERSION
raspberrypi1 Ready control-plane,master 86m v1.28.8+k3s1
raspberrypi2 Ready <none> 79m v1.28.8+k3s1
raspberrypi3 Ready <none> 79m v1.28.8+k3s1
개인적인 간단한 후기
개인적으로 Mac mini에서 minikube로 단일 노드로 구축해보며, 배포를 경험해보았고
작년 7월 전자연에서 하계 인턴을 하며 직접 베어메탈을 K8s을 통해 구축했던 업무가 있었다.
그때도 많은 시간을 투자하며 Pod의 GPU 점유에 대해 연구했었다.
하지만 이번에 개인 프로젝트를 통해 라즈베리파이에 경량 쿠버네티스을 올릴수 있는 기회를 얻었다.
앞으로 kafka , influxdb, grafana(?) 등등을 직접 올려서 카메라의 사진 데이터를 파이프 처리해보고 기존의 k8s와의 성능 비교 및 pods 배포 특성에서의 차이가 있는지 분석 해볼 예정이다.
'Kubernetes_쿠버네티스' 카테고리의 다른 글
[Project] K3s 기반 라즈베리 클러스터 구축 및 엣지 디바이스 모니터링 구현 (3) | 2024.07.09 |
---|---|
[Kubetnetes/K8s] 쿠버네티스 Service(Cluster IP, NodePort, LoadBalancer) 개념 잡기 (0) | 2023.07.27 |
[Kubernetes/K8s] 쿠버네티스란? (0) | 2023.07.25 |
[K8S] 쿠버네티스 특정 노드에 배포하기 (0) | 2023.07.21 |
[K8S] deployment 롤링 업데이트 하기 (0) | 2023.07.19 |