raspberry pi 에 Redmine 설치하기

redmine은 오픈소스 이슈트래커로 꽤 유명한 툴입니다

오늘은 reapberry pi 에 redmine을 설치해보고, redmineup이라는 무료 플러그인을 설치해보려고 합니다.
설치는 docker-compose를 이용해서 쉽게 진행할 예정입니다.

Put Redmine docker container in Raspberry Pi 4 Model B 2GB에서 제공되는 명령어를 간략하게 작성하려고 합니다.

docker-compose 설치

sudo apt-get update #업데이트
sudo apt-get -y upgrade #업그레이드
curl -sSL https://get.docker.com | sh #install docker
sudo apt-get -y install python3-dev #pip 설치
sudo apt-get -y install python3-pip #pip 설치
sudo pip3 install --upgrade setuptools #Because pip3 may get an error
sudo pip3 install wheel #Because pip3 may get an error
sudo pip3 install docker-compose # docker-install compose

docker-compose 설정

sudo vi .bashrc
# pip3 path 추가
export PATH="$PATH:~/.local/bin

source .bashrc # 변경 내역 반영
echo $PATH # 변경내역 확인
sudo usermod -a -G docker pi # docker 명령어를 pi  계정으로 사용 처리 
sudo reboot # 재기동

redmine docker-compose.yml 파일 생성

mkdir /home/pi/docker/redmine # 작업 디렉토리 생성
sudo chown root:users /home/pi/docker/redmine # 사용자 지정
sudo chmod 775 /home/pi/docker/redmine # 접근 설정
cd /home/pi/docker/redmine # 작업 디렉토리로 이동
sudo touch docker-compose.yml # 파일 생성
sudo vi docker-compose.yml # 파일 내역 작성 (아래 참고)
docker-compose -f docker-compose.yml up -d # 실행

docker-compose.yml

비밀번호나, 디렉토리 위치는 적절하게 변경하여 사용하셔요.

version: '3.8'
services:
  redmine:
    image: arm32v7/redmine
    container_name: redmine
    ports:
      - 3000:3000
    volumes:
      - ./files:/usr/src/redmine/files
      - ./log:/usr/src/redmine/log
      - ./plugins:/usr/src/redmine/plugins
      - ./public/themes:/usr/src/redmine/public/themes
    environment:
      REDMINE_DB_POSTGRES: redmine-db
      REDMINE_DB_DATABASE: redmine
      REDMINE_DB_USERNAME: redmine
      REDMINE_DB_PASSWORD: redmine
      REDMINE_DB_ENCODING: utf8
    depends_on:
      - redmine-db
    restart: always

  redmine-db:
    image: postgres
    restart: always
    environment:
      POSTGRES_DB: redmine-db
      POSTGRES_USER: redmine
      POSTGRES_PASSWORD: redmine
    volumes:
      - ./dbdata/:/var/lib/postgresql/data

postgresql 데이터 베이스 생성

처음 실행을 하면 아마 redmine에서 테이블이 없다는 오류가 발생합니다.

오류 내용중 발췌

ActiveRecord::NoDatabaseError: FATAL: database "redmine" does not exist

데이터 베이스 create 처리

docker logs redmine # 위의 오류가 발생하는지 확인
docker container exec -it redmine-db /bin/bash # redmine db container접속 
createdb redmine --encoding=utf8 -O redmine -U redmine # 데이터 베이스 생성
exit #redmine db container 나가기
docker rm redmine # 기존 redmine container 삭제 
docker-compose -f docker-compose.yml up -d # 재실행

이후 redmine이 정상적으로 기동 되는 것을 확인 할 수 있습니다.

redmineup 플러그인 설치

redmineup은 칸반보드를 제공하는 플러그인입니다.

먼저 무료 버젼을 다운로드 받습니다.

redmineup 사이트에서 다운로드를 누르면 이메일 정보를 입력하라고 합니다.

입력을 완료 하면 메일 첨부파일로 전달하여 줍니다.

첨부된 파일을 다운로드 받고 ./plugins:/usr/src/redmine/plugins에서 압축을 풉니다.

cp redmine_agile-x_x_x-pro.zip plugins/
cd plugins
unzip redmine_agile-x_x_x-pro.zip

이후 docker container 안에서 플러그인을 설치해줍니다.

# container 목록 확인
docker ps
...
225fd2755f66   arm32v7/redmine                 "/docker-entrypoint.…"   23 hours ago   Up 20 hours   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp             redmine
...

# container bash shell 접근
docker exec -it redmine /bin/bash

플러그인 설치 명령어

cd /var/www/redmine
bundle install --without development test --no-deployment

테이블 마이그레이션

bundle exec rake redmine:plugins NAME=redmine_agile RAILS_ENV=production

redmine 재시작

touch tmp/restart.txt

반영된 화면

칸반 보드로 시각화되고 각각 단계는 열로 표시하여 작업진행이 한눈에 보입니다.

칸반보드

이슈들은 "수영 레인(SwimLane)"으로 불리는 행으로 나누고 우선순위가 낮은 이슈들을 아래에 배치합니다. 칸반의 핵심은 Work-In-Process(WIP)가 동시에 개발이 진행 될 수 있는 아이템의 수를 제한하는 것이며, 작업자는 WIP에 여유가 있을 때 만 작업을 왼쪽에서 오른쪽으로 당길 수 있습니다.

참고 자료

Posted by lahuman

댓글을 달아 주세요

Raspberry pi 4에 windows 11을 설치해서 사용해봤습니다.

집에 있는 삼성 프린터가 네트워크를 지원하지 않아서, 방안을 고심중에 Raspberry PI 4에 windows 11이 설치되고 상당히 쓸만 하다는 글을 읽게 되었습니다.

설치는 How to Install Windows 11 on a Raspberry Pi 4 글을 따라하면 쉽게 가능합니다.

그리고 장점과 단점으로 구분해서 후기를 정리 하면 다음과 같습니다.

장점

  • 생각보다 빠릿(?)하다
    • 느리다는 느낌이 들지 않습니다.

단점

  • 부팅이 정말 오래 걸린다.
    • Raspberry pi 4G 기준으로 약 5분 정도 걸립니다.
  • 사운드는 해드셋 잭으로만 나온다.
  • 다이소 wifi 모듈 인식이 안된다.
    • 이게 가장 크리티컬하네요.
  • 원격 데스크탑(서버) 지원이 안된다.
    • 프리뷰모드라 그런듯 합니다.
  • 삼성 드라이버 설치가 안된다.
    • ARM CPU라 그런지, windows 11이라 그런지, 제가 원한 가장 중요한 기능이 안되네요. :(

프리뷰 버젼이니 완성도가 떨어져서 안되는게 있을꺼라 생각됩니다.
정식 버젼이 나오면 다시 테스트 해봐야겠네요.

참고 자료

Posted by lahuman

댓글을 달아 주세요

Raspberry PI 에서 realvnc를 무료로 사용할 수 있습니다. 또한 기본적으로 VNC가 설치되어 사용할 수 있습니다.

realvnc는 Raspberry PI에 대하여 개인용으로 최대 5개의 기기까지 무료로 사용할 수 있습니다.

Control your Raspberry PI from anywhere with VNC Connect remote access software: it's completely free for personal use and up to 5 devices. If you need to use VNC Connect commercially or you want to connect to more than 5 devices, start a trial today.

그런데 말입니다,

Raspberry PI 64bit OS에서는 VNC가 동작하지 않습니다.
이를 해결 하기 위해서는 다음의 명령어를 이용해서 기존의 realvnc server를 삭제 하고 arm64 용으로 재설치 해야 합니다.

sudo apt remove realvnc-vnc-server
sudo apt install realvnc-vnc-server:arm64

다음 작업으로 vnc를 활성화 시켜야합니다.

시작 메뉴 > 기본 설정 > Raspberry Pi Configuration > Interface > VNC ==> Enable

재부팅을 하고 나면 VNC 아이콘이 오른쪽 상단에 보입니다.

realvnc에 로그인하면, public IP를 가지지 않아도 외부에서 접근이 가능합니다.

Posted by lahuman

댓글을 달아 주세요

https://www.arcadepunks.com 라는 사이트에서 GAME ROM을 다운로드 할 수 있습니다.

PI 3용 게임 다운로드 바로가기

PI 4용 게임 다운로드 바로가기

Posted by lahuman

댓글을 달아 주세요

설치 전 안내

안정성과 가벼움, 제공되는 프로그램들의 연동은 Raspberry PI OS 기본 32bit를 추천 합니다.

성능을 원한다면 64bit를 설치하셔요.

범용적인 서버로 사용하신다면, Ubuntu 64 bit를 추천합니다.

추가 TIP!
Ubuntu Desktop으로 사용하는 것은 추천하지 않습니다. GUI 환경에서는 Raspberry PI OS가 가장 빠릅니다.

참고 자료

OS 다운로드 주소

Raspberry PI OS(기본 32bit / 64bit)
Ubuntu Desktop(32/64bit 제공)

한글 설정

sudo apt install fcitx fcitx-hangul

참고 자료 : https://knds.tistory.com/7

Netflex play on default chrome(Raspberry PI OS 64bit는 안되네요. - 32bit 동작 확인)

sudo apt update 
sudo apt full-upgrade 
sudo apt install libwidevinecdm0 

참고 자료 :

VSCODE 설치

Mac M1 출시 이후 많은 App 들이 arm CPU를 지원해주고 있습니다.

sudo apt install code

node 설치

curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs
Posted by lahuman

댓글을 달아 주세요

라즈베리파이에 ubuntu에 k3S 설치 하기

이 글을 읽기 전에 라즈베리파이에 k3s 설치 하기 - 실패기라즈베리파이에 ubuntu 설치 하기 를 읽어 보시기를 추천 드립니다.
또한 라즈베리파이에 ubuntu 설치 하기의 설정 이후 진행 하셔야 합니다.

hostsname 설정하기

저는 2대의 라즈베리 파이를 가지고 main(라즈베리4)과 node1(라즈베리3+)으로 구성을 하려고 합니다.
먼저 구분을 하기 위해서 사용하려는 라즈베리파이의 hostname을 변경합니다.

sudo vi /etc/hosts

# mian / node1 으로 수정

그리고 다른 모듈에서 hostsname을 변경하지 못하도록 /etc/cloud/cloud.cfg 파일의 preserve_hostname 옵션을 true로 변경합니다.

# The top level settings are used as module
# and system configuration.

# A set of users which may be applied and/or used by various modules
# when a 'default' entry is found it will reference the 'default_user'
# from the distro configuration specified below
users:
   - default

# If this is set, 'root' will not be able to ssh in and they
# will get a message to login instead as the default $user
disable_root: true

# This will cause the set+update hostname module to not operate (if true)
# 여기를 true로 변경
preserve_hostname: true

Linux 컨테이너 기능 활성화

/boot/firmware/cmdline.txt 파일의 마지막에 라인에 cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory 을 이어서 작성합니다.

sudo vi /boot/firmware/cmdline.txt

# 라인 마지막에 추가 처리 
net.ifnames=0 dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=LABEL=writable rootfstype=ext4 elevator=deadline rootwait fixrtc cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory

그리고 재부팅을 해야 합니다.

sudo reboot

docker 설치

k3s 설치 이전에 docker를 설치 합니다.
docker 설치와 활성화는 다음의 명령어로 쉽게 할 수 있습니다.

# docker 설치
sudo apt install docker.io 

# docker 서비스 시작
sudo systemctl start docker

# 부팅시 docker 서비스 시작
sudo systemctl enable docker

k3s 설치

k3s 설치도 다음 스크립트로 쉽게 설치 할 수 있습니다.

# 설치 스크립트
curl -sfL https://get.k3s.io | sh -s - --docker

# 서비스 확인
sudo systemctl status k3s
● k3s.service - Lightweight Kubernetes
     Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2021-01-16 13:26:34 UTC; 14min ago
       Docs: https://k3s.io
    Process: 1697 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
    Process: 1733 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
   Main PID: 1734 (k3s-server)
      Tasks: 29
     Memory: 571.3M
     CGroup: /system.slice/k3s.service
             └─1734 /usr/local/bin/k3s server

Jan 16 13:36:39 main k3s[1734]: W0116 13:36:39.184245    1734 machine.go:253] Cannot determine CPU /sys/bus/cpu/devices>
Jan 16 13:36:39 main k3s[1734]: W0116 13:36:39.184308    1734 machine.go:253] Cannot determine CPU /sys/bus/cpu/devices>
Jan 16 13:36:39 main k3s[1734]: W0116 13:36:39.184360    1734 machine.go:253] Cannot determine CPU /sys/bus/cpu/devices>
Jan 16 13:36:39 main k3s[1734]: W0116 13:36:39.184412    1734 machine.go:253] Cannot determine CPU /sys/bus/cpu/devices>
Jan 16 13:36:39 main k3s[1734]: E0116 13:36:39.184432    1734 machine.go:72] Cannot read number of physical cores corre>
Jan 16 13:36:39 main k3s[1734]: W0116 13:36:39.184669    1734 machine.go:253] Cannot determine CPU /sys/bus/cpu/devices>
Jan 16 13:36:39 main k3s[1734]: W0116 13:36:39.184720    1734 machine.go:253] Cannot determine CPU /sys/bus/cpu/devices>
Jan 16 13:36:39 main k3s[1734]: W0116 13:36:39.184768    1734 machine.go:253] Cannot determine CPU /sys/bus/cpu/devices>
Jan 16 13:36:39 main k3s[1734]: W0116 13:36:39.184816    1734 machine.go:253] Cannot determine CPU /sys/bus/cpu/devices>
Jan 16 13:36:39 main k3s[1734]: E0116 13:36:39.184836    1734 machine.go:86] Cannot read number of sockets correctly, n>
lines 1-22/22 (END)

# k3s node 상태 확인
sudo kubectl get ndoes
sudo kubectl get nodes
NAME    STATUS     ROLES                  AGE   VERSION
main    Ready      control-plane,master   24h   v1.20.0+k3s2

방화벽 비활성화

이제 main node의 설정이 끝났습니다.

worker node와 통신을 위해서 방화벽을 내려둡니다.

# 방화벽 비활성화
sudo ufw disable

"축하합니다!" 여기까지 진행이 되었다면, main node의 설치가 완료 한 것입니다. 이제 worker node 설치를 진행합니다.

woker node를 설치하기 위해서는 main node의 token이 필요 합니다.

token은 다음의 명령어로 확인이 가능합니다.

sudo cat /var/lib/rancher/k3s/server/node-token
K10db4cc46dfccb627942c905744dce8ee3099f1153d85c741f21b8c9420febc9db::server:58054e0acd0a3508bc4381e43e74b2ef

worker node 설치 하기

우선 main 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.30:6443 K3S_TOKEN=K10db4cc46dfccb627942c905744dce8ee3099f1153d85c741f21b8c9420febc9db::server:58054e0acd0a3508bc4381e43e74b2ef sh -s - --docker

설치가 완료되었다면, 다음 명령어로 상태를 확인하세요.

sudo systemctl status k3s-agent
● k3s-agent.service - Lightweight Kubernetes
     Loaded: loaded (/etc/systemd/system/k3s-agent.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2021-01-15 13:35:53 UTC; 24h ago
       Docs: https://k3s.io
    Process: 1674 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
    Process: 1706 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
   Main PID: 1707 (k3s-agent)
      Tasks: 16
     Memory: 143.6M
     CGroup: /system.slice/k3s-agent.service
             └─1707 /usr/local/bin/k3s agent

Jan 16 13:54:00 node1 k3s[1707]: I0116 13:54:00.243366    1707 policy_none.go:43] [cpumanager] none policy: Start
Jan 16 13:54:00 node1 k3s[1707]: E0116 13:54:00.265387    1707 kubelet.go:1823] skipping pod synchronization - containe>
Jan 16 13:54:00 node1 k3s[1707]: W0116 13:54:00.322546    1707 manager.go:594] Failed to retrieve checkpoint for "kubel>
Jan 16 13:54:00 node1 k3s[1707]: I0116 13:54:00.340881    1707 plugin_manager.go:114] Starting Kubelet Plugin Manager
Jan 16 13:54:01 node1 k3s[1707]: I0116 13:54:01.066655    1707 topology_manager.go:187] [topologymanager] Topology Admi>
Jan 16 13:54:01 node1 k3s[1707]: W0116 13:54:01.067797    1707 pod_container_deletor.go:79] Container "3d18023da3813e1c>
Jan 16 13:54:01 node1 k3s[1707]: I0116 13:54:01.253297    1707 reconciler.go:224] operationExecutor.VerifyControllerAtt>
Jan 16 13:54:01 node1 k3s[1707]: I0116 13:54:01.253506    1707 reconciler.go:157] Reconciler: start to sync state
Jan 16 13:54:01 node1 k3s[1707]: W0116 13:54:01.718236    1707 cni.go:333] CNI failed to retrieve network namespace pat>
Jan 16 13:54:04 node1 k3s[1707]: W0116 13:54:04.529789    1707 pod_container_deletor.go:79] Container "5124f74a4a45f4e

main node에서 worker node가 연결되었는지 확인합니다.

# node1 이 연결되어 있는 것을 확인합니다.
sudo kubectl get nodes
NAME    STATUS   ROLES                  AGE   VERSION
node1   Ready    <none>                 24h   v1.20.0+k3s2
main    Ready    control-plane,master   24h   v1.20.0+k3s2

서비스 올려 보기

먼저 서비스 yaml 파일을 생성합니다.

# k3s-demo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: k3s-demo
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: k3s-demo
  template:
    metadata:
      labels:
        app: k3s-demo
    spec:
      containers:
      - name: k3s-demo
        image: ruanbekker/rpi-hostname:latest
---
apiVersion: v1
kind: Service
metadata:
  name: k3s-demo
  namespace: default
spec:
  ports:
  - name: http
    targetPort: 8000
    port: 80
  selector:
    app: k3s-demo
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: k3s-demo
  annotations:
    kubernetes.io/ingress.class: "traefik"

spec:
  rules:
  - host: k3s-demo.192.168.0.30.xip.io
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service: 
            name: k3s-demo
            port: 
              number: 80

k3s-demo.192.168.0.30.xip.io에서 사용한 xip.io는 서브 도메인에 설정된 IP로 루프백 해주는 서비스입니다.
도메인기반으로 동작하는 Ingress에서 활용하면 하나의 서비스에 여러 서브 도메인을 테스트 할때 좋습니다.
k3s-demo.192.168.0.30.xip.io 을 호출하면 192.168.0.30으로 전달합니다.

# 서비스 배포
sudo kubectl apply -f k3s-demo.yaml

# 배포된 서비스 확인 (웹 브라우저에서도 확인이 가능합니다.)
curl http://k3s-demo.192.168.0.30.xip.io/
Hostname: k3s-demo-65c8cf57c-2s2tr

여기까지 k3s 설치를 마칩니다.

참고자료

Posted by lahuman

댓글을 달아 주세요

라즈베리파이에 ubuntu 설치하기

Ubuntu 20.04 다운로드

Install Ubuntu on a Raspberry Pi 2, 3 or 4에서 본인의 라즈베리파이에 맞는 이미지를 다운로드 받습니다.

제 경우는 라즈베리파이 3+ 와 4를 가지고 있어서, Ubuntu Server 20.04.1 LTS 64bit로 다운받았습니다.

이전 포스트와 마찬가지오 SD카드에 다운 받은 이미지를 굽습니다.

초기 아이디 / 비밀번호는 ubuntu / ubuntu 를 입력하면 됩니다. 설정 후 해당 계정을 삭제 하시는 것을 추천 드려요.

WIFI 연결

설정은 root 권한으로 진행해야 하기에 sudo를 사용합니다.

라즈베리파이에서 wif로 연결을 하기 위해서는 먼저 wifi 국가를 JP로 설정해야 됩니다.
JP로 설정하면 대부분의 공유기 wifi를 지원합니다.

# 영구적으로 wifi 국가 정보를 변경합니다.
sudo vi  /etc/default/crda 

REGDOMAIN=JP

wifi 설정

netplan을 이용해서 wifi의 정보를 설정하고 반영합니다.

sudo vi /etc/netplan/50-cloud-init.yaml

network:
    ethernets:
        eth0:
            dhcp4: true
            optional: true
# wifi 설정            
    wifis:
        wlan0:
            dhcp4: no
            optional: true
# static ip 설정
            addresses: [192.168.0.31/24]
            gateway4: 192.168.0.1
            nameservers:
                addresses: [8.8.8.8,8.8.4.4]
# wifi access point 정보 
            access-points:
                "DL2":
                    password: "99876543@!q"
    version: 2

위의 내용을 저장하고 netplan 정보를 생성하고 반영합니다.

# 정보 생성
sudo netplan generate
# 정보 반영
sudo netplan apply

설정중 오류가 발생하면 Raspberry Pi Not Connecting to Wi-Fi 여기에서 정보를 확인 해보셔요.

sshd 설치 & 설정

마지막으로 sshd로 다른 PC에서 접근하기 위해서 sshd 설치하고 설정합니다.

# sshd 설치
sudo apt install openssh-server
# 설정 변경
sudo vi /etc/ssh/sshd_config
# 부팅시 sshd 실행
sudo  systemctl enable sshd
# 변경된 설정 반영
sudo  systemctl restart sshd

여기까지 ubuntu의 기본 설정을 마무리합니다.

다음으로 k3s 를 재설치 해보고 테스트 해볼 예정입니다.

참고자료

Posted by lahuman

댓글을 달아 주세요

라즈베리파이에 k3s 설치 하기 - 실패기

이 포스팅은 실패를 적은 것입니다.

1. 라즈베리파이에 OS 설치하기

그림과 같이 Raspberry Pi OS 다운로드페이지에서 Raspberry Pi OS Lite 버젼을 받습니다.

다른 버젼을 사용해도 되지만, 서버용으로 GUI 없이 사용하기 위해서는 Lite 버젼이면 충분합니다.

그리고 SD 카드에 해당 이미지를 구워줍니다.

그리고 부팅을 하고 몇가지 설정을 합니다.

대부분의 설정은 부팅 후 raspi-config 명령어를 이용하면 쉽게 할 수 있습니다.

  • 인터넷 연결(WIFI)
  • GPU Memory 64M => 16M
  • hostname 변경(main, worker1, worker2 등)
  • SSH 활성화
  • iptables 사용하도록 설정(k3s는 네트워킹 기능은 내부적으로 iptables 를 사용합니다)
sudo iptables -F
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
sudo reboot
  • IP 고정
vi /etc/dhcpcd.conf

# 본인 환경에 맞게 수정
interface wlan0
static ip_address=192.168.0.30
static routers=192.168.0.1
static domain_name_servers=8.8.8.8 1.1.1.1
  • ulimit 설정
vi /etc/security/limits.conf

*       -       nofile  32768
*       -       nproc   65536
  • 새로운 계정 생성 & pi 계정 삭제
# root 로 로그인
sudo -i

# lahuman 계정 생성
adduser lahuman
# lahuman 계정에 sudo 권한 부여
adduser lahuman sudo

# 재부팅 후 lahuman 계정으로 로그인하고 pi 계정을 삭제 합니다.
deluser pi

여기까지 진행했다면, 라즈베리파이의 설정은 완료 되었습니다.

k3s 설치

mian node 설치

Standard Raspbian Buster installations do not start with cgroups enabled.

Raspbian Buster(Lite 포함)은 cgroups 가 활성화 되어 있지 않아서 다음 설정을 해야 합니다.

/boot/cmdline.txt 에 다음을 추가 합니다.

vi /boot/cmdline.txt

# 기존 값이 console=serial0,115200 console=tty1 root=PARTUUID=afe9a4ef-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait  입니다. 
# cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory 을 뒤에 추가 하면 됩니다.

console=serial0,115200 console=tty1 root=PARTUUID=afe9a4ef-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory

이제 main node에 k3s를 스크립트를 이용해서 설치 합니다.

# 홈페이지에는 sudo 옵션이 없지만, 해당 옵션이 없으면 설치가 안됩니다.
curl -sfL https://get.k3s.io | sudo sh -

설치가 완료되었다면, node를 다음 명령어로 확인해 볼 수 있습니다

sudo kubectl get nodes

worker node 설치

먼저, main node의 k3s설치 스크립트 실행 전까지와 동일한 작업을 진행합니다.
그리고 설치 main node의 토큰 값을 준비합니다.

# main 노드에서 실행
sudo cat /var/lib/rancher/k3s/server/node-token
K10098666be0809d3fe6d02354bd433fb84b67dcb747c73efacc4c2ca12cac38961::server:1f4bfcbf8cf3985a4554a706c9ad704f

worker node에 k3s 설치를 진행합니다.

curl -sfL http://get.k3s.io | K3S_URL=https://192.168.0.30:6443 K3S_TOKEN=K10098666be0809d3fe6d02354bd433fb84b67dcb747c73efacc4c2ca12cac38961::server:1f4bfcbf8cf3985a4554a706c9ad704f  sudo sh -

k3s 삭제

삭제는 다음 명령어로 쉽게 삭제가 가능합니다.

# main node
sudo /usr/local/bin/k3s-uninstall.sh

# worker node
sudo /usr/local/bin/k3s-agent-uninstall.sh

k3s의 CPU 점유율이 장시간 동안 50% 이상을 넘기고 있을 경우 처리 방안

원인을 모르겠지만, 계속 켜놓을 경우 CPU의 점유율이 50%를 넘기면서 nodes 조회가 안되는 현상이 있었습니다.

검색을 통해서 알아보니, cpu 사용에 limit을 설정 할 수 있다고 하네요.

vi /etc/systemd/system/k3s.service

CPUQuota=30%
CPUQuotaPeriodSec=50ms
AllowedCPUs=0

하지만, 이렇게 설정해도 동일한 오류가 발생했습니다.

다른 이유로는 Fixing cgroup memory on Raspbian Buster for Kernel 5.4.x의 내용과 같이 커널 버그라고 합니다.

이를 해결하기 위해서는 커널을 업데이트 해야 하는데요.

/boot/cmdline.txt 내용으 다음과 같이 수정하고,

cat /boot/cmdline.txt
console=serial0,115200 console=tty1 root=PARTUUID=dd5ac5d2-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait cgroup_enable=1 cgroup_memory=1 swapaccount=1 cgroup_enable=memory dwc_otg.lpm_enable=0

다음의 명령어로 커널을 업데이트 합니다

sudo PRUNE_MODULES=1 RPI_REBOOT=1 SKIP_WARNING=1 rpi-update

하지만... 아무리 해봐도 동일한 현상도 나오며, worker node를 추가 할 수 없었습니다. 대부분의 이야기에서는 ubuntu를 이용하라는 내용이 많이 있네요.

참고자료

Posted by lahuman

댓글을 달아 주세요

라즈베리파이에서 GPIO 제어하기

회사에서 진행하는 뭉클이 이번달로 마지막이다.

마지막 시간에는 라즈베리파이의 GPIO를 제어 하는 것을 이야기할 예정이다.

주요 사항

Python에서 GPIO의 INPUT을 명확하게 처리 하지 않으면 랜덤한 값이 표출 된다.

Posted by lahuman

댓글을 달아 주세요