この記事は海洋大技術系サークル Advent Calendar 2023の2日目です。新入生がこんな早い枠貰っていいんですか!?
はじめに
NePP所属のしらすです。ロボ研にも所属しており主にインフラ周りをいじってたりしています。
この記事の趣旨ですが、
シリコンバレーの古いことわざにも「働かざる者kubernetes」というのがあるように、徒然なるままにその日暮らしをしている僕もKubernetesクラスタを組むべきなのではないか!と思うようになりました。
ただ単にアドカレのネタに自宅のインフラ諸々を改築したい&自宅鯖の紹介をしたい欲が出てきたのがきっかけです。
これまでどうしていたか
ハードウェア
ラズパイ,ノートPC,ヤフオクで落としたサーバ等々雑多にあるものでやってます。
HP ProLiant ML350 G6
高2のときヤフオクで落としてきたタワー型のやつ、でかつよ。メモリは2GB×3しかなかったものを36GBまで増設しました。いずれデュアルCPUのメモリ144GBまで強化する予定です。
(部屋が汚くて公開できる画角がこれしかない)
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
半導体不足で価格が高騰する前に買いました。高校の課題研究でもお世話になったマシン。
(扇風機で冷やしていた頃。流石にファン買いました。)
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 とシンプルなツールを提供しています。
ユーザ管理・監視
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
に追記。
lxc.apparmor.profile: unconfined
lxc.cap.drop:
lxc.cgroup.devices.allow: a
lxc.mount.auto: proc:rw sys:rw
また、特権コンテナでないといけないのでUnpriviledgedのチェックは外す、swapを有効にしない等々にも気をつけます。
↑コンテナの設定例
設定
公式のドキュメントを参考に設定しました。コンテナランタイムもcontainerdを使用しているので特に独自性はないです。
参考:
1.proxmoxのコンテナにk8sクラスタを構築する
2.ProxmoxVEのLXCでKubernetesクラスタを構築する。
3.4台のラズパイでk8sクラスタを組んだ
おわりに
現状何もサービスを移行できていないのでぼちぼちやっていきます。
また、今後のGNU Socialの記事でも使っていく予定です。
みんなもおうちでkubernetesクラスタを組もう!