LoginSignup
9
2

自宅鯖の紹介(と改築) ~働かざる者kubernetes~

Last updated at Posted at 2023-12-02

この記事は海洋大技術系サークル Advent Calendar 2023の2日目です。新入生がこんな早い枠貰っていいんですか!?

はじめに

NePP所属のしらすです。ロボ研にも所属しており主にインフラ周りをいじってたりしています。

この記事の趣旨ですが、

シリコンバレーの古いことわざにも「働かざる者kubernetes」というのがあるように、徒然なるままにその日暮らしをしている僕もKubernetesクラスタを組むべきなのではないか!と思うようになりました。

ただ単にアドカレのネタに自宅のインフラ諸々を改築したい&自宅鯖の紹介をしたい欲が出てきたのがきっかけです。

これまでどうしていたか

ハードウェア

ラズパイ,ノートPC,ヤフオクで落としたサーバ等々雑多にあるものでやってます。

HP ProLiant ML350 G6

高2のときヤフオクで落としてきたタワー型のやつ、でかつよ。メモリは2GB×3しかなかったものを36GBまで増設しました。いずれデュアルCPUのメモリ144GBまで強化する予定です。
DSC_0497.JPG
(部屋が汚くて公開できる画角がこれしかない)

hp-server
-------------
OS: Proxmox VE 8.1.3 x86_64
Host: ProLiant ML350 G6
Kernel: 6.5.11-4-pve
Shell: bash 5.2.15
CPU: Intel Xeon E5620 (8) @ 2.400GHz
GPU: AMD ATI Radeon HD 3650/3750/4570/4580
Memory: 36GB
Disk: 128GB

電気代結構かかってたり夜寝るときうるさかったりで、、体調悪いときは精神衛生上の観点から電源落としてます。

Raspberry Pi4 Model B 8GB

半導体不足で価格が高騰する前に買いました。高校の課題研究でもお世話になったマシン。

IMG_20211011_214741.jpg

(扇風機で冷やしていた頃。流石にファン買いました。)

rp4-01 
---------- 
OS: Debian GNU/Linux 12 (bookworm) aarch64 
Host: Raspberry Pi 4 Model B Rev 1.4 
Kernel: 6.1.0-rpi4-rpi-v8 
Shell: bash 5.2.15 
CPU: BCM2835 (4) @ 1.800GHz 
Memory: 97MiB / 7810MiB 
Disk: 1000GB

Raspberry Pi3 Model B+ 1GB

メモリ少ないです。家電リモコン以外には多分使わない。

rp3-01
---------- 
OS: Raspbian GNU/Linux 11 (bullseye) armv7l 
Host: Raspberry Pi 3 Model B Plus Rev 1.3 
Kernel: 6.1.21-v7+ 
Shell: bash 5.1.4 
CPU: BCM2835 (4) @ 1.400GHz 
Memory: 1GB
Disk: 32GB

HP Pavilion 15 Notebook PC

家族用PCだったものを持ち出してきました。なんか言われたら返します。

外出先からVNCつなぐのと予備のWebサーバとして使用しています。

hp-notebook
-------------
OS: Debian GNU/Linux 11 (bullseye) x86_64
Host: HP Pavilion 15 Notebook PC 098A110100404100
Kernel: 5.10.0-23-amd64
Shell: bash 5.1.4
CPU: Intel i7-4500U (4) @ 3.000GHz
GPU: NVIDIA GeForce GT 740M
Memory: 4GB
Disk: 250GB

主なサービス

そもそもあまりアクセスがない(負荷を掛けるのは自分くらい)です。

  • Nginx(個人HP)
  • Samba(ファイルサーバ)
  • Discordbot
  • VNC Server
  • Cloudflare Tunnel(ポート開放したくないので)

仮想化なにそれ美味しいの?状態だったので全て直のDebian上で動かしていました。
今はML350 G6だけProxmox VE入れてLXC使ってます。

※LXCとは

LXC は Linux カーネルが持つコンテナ機能のためのユーザスペースのインターフェースです。
Linux ユーザがシステムコンテナやアプリケーションコンテナを簡単に作成したり管理したりするためのパワフルな API とシンプルなツールを提供しています。

参考:LXC/イントロダクション

ユーザ管理・監視

LDAP入れても使う人が一人なのですぐやめました。悲しいですね。
監視ツールはMuninとProxmoxのコンソールでグラフ眺める程度です。

改築

ラズパイ4をコントロールプレーンに、ML350 G6のLXC上にワーカーノードをそれぞれ配置してKubernetesクラスタを構成します。前提条件として各マシン・LXCともに適当なIPアドレスを振っときます。

クラスタ構成

HostName IP address Machine CPU Memory Disk OS 備考
rp4-01 192.168.1.120 Raspberry Pi 4B BCM2835 (4) 8GB 1000GB Debian GNU/Linux 12 (bookworm) aarch64 Control Plane
lxc-01 192.168.1.130 LXC(ProLiant ML350 G6) LXC(Intel Xeon E5620(8)) 8GB 22GB LXC(Proxmox VE 8.1.3 x86_64)
lxc-02 192.168.1.131 LXC(ProLiant ML350 G6) LXC(Intel Xeon E5620(8)) 8GB 22GB LXC(Proxmox VE 8.1.3 x86_64)
lxc-03 192.168.1.132 LXC(ProLiant ML350 G6) LXC(Intel Xeon E5620(8)) 8GB 22GB LXC(Proxmox VE 8.1.3 x86_64)

LXC上で組む際の注意点

LXCはKVMなどの仮想マシンと比べより少ないリソースで動作させることができるのですが、安全のためにコンテナ内から利用できないOSの機能があります(LXCの仕様)。これをどうにかしないことにはk8sが動かないので以下を/etc/pve/lxc/<コンテナID>.confに追記。

/etc/pve/lxc/<コンテナID>.conf
lxc.apparmor.profile: unconfined
lxc.cap.drop:
lxc.cgroup.devices.allow: a
lxc.mount.auto: proc:rw sys:rw

また、特権コンテナでないといけないのでUnpriviledgedのチェックは外す、swapを有効にしない等々にも気をつけます。
image.png
↑コンテナの設定例

設定

公式のドキュメントを参考に設定しました。コンテナランタイムもcontainerdを使用しているので特に独自性はないです。

参考:
1.proxmoxのコンテナにk8sクラスタを構築する
2.ProxmoxVEのLXCでKubernetesクラスタを構築する。
3.4台のラズパイでk8sクラスタを組んだ

おわりに

現状何もサービスを移行できていないのでぼちぼちやっていきます。
また、今後のGNU Socialの記事でも使っていく予定です。
みんなもおうちでkubernetesクラスタを組もう!

9
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2