Walnuts.dev を支える技術 (物理環境/ネットワーク編)

これは KMC Advent Calendar 2023 6日目の記事です。

こんにちは。KMC 46代会長のWalnutsです。最近はKMCのインフラを破壊する仕事をしています。この前はJenkinsや内部DNSなどが動くマシンを破壊しました。次はKubernetesクラスターを壊す予定ですのでお楽しみに。

Memtestでとんでもない数のErrorを出したelizabeth


そして昨日のアドベントカレンダー記事は進捗ゼミさんの「仏像をぶつぞう!!!!というゲームを作りました」でした。
 私もイラストの背景透過などについてお手伝いしました、面白いゲームでしたよね~


さて、今回の記事ではWalnuts家の自宅インフラについて解説していきます。

とりあえず今の所は以下のように少しずつ記事を分けで紹介していきたいと思います。

  • 物理環境/ネットワーク編(この記事)
  • サービス一覧編
  • Kubernetes構成編
  • 自動化編
  • モニタリング編
  • ユーザー認証システム編
  • 今後編

第一回では物理的なサーバー構成やOS、ネットワークなどについて紹介していきたいと思います。

物理マシン一覧

HostName Model CPU Memory Disk OS 役割
cake ProDesk 400 G4 DM Intel i5-8500T (6 cores) 64GB KIOXIA-EXCERIA G2 SSD 1TB Ubuntu 22.04 k8s Node
snow Raspberry Pi 4B BCM2835 (4 cores) 4GB CSSD-S6O240NCG1Q 240GB Debian GNU/Linux 11 k8s Node
donut Raspberry Pi 4B BCM2835 (4 cores) 2GB Apacer AS340 120GB Debian GNU/Linux 11 k8s Node
alice 自作PC Intel i5-12400f (6 cores) 48GB Crucial P5 Plus 1TB / Western Digital 1TB WD Blue Proxmox8 VM基盤&メインマシン
inazuma OptiPlex 790 Core i5-2500 (4 cores) 8GB SSD 240GB / HDD 500GB / HDD 500GB Ubuntu 22.04 バックアップ?

現在Walnuts家には5台のマシンがいます。そのうちMini PCのcake、ラズパイのsnow・donutはk8s専用サーバーとして使っています。自作PCのaliceはProxmoxを入れてVM基盤を作り、その上にWindows、Manjaroのクライアントマシン、k8s Nodeのマシン、検証環境などを立てています。

特に、Windows仮想マシンはホストマシンのGPUやUSBデバイスをアタッチすることによって普通のデスクトップPCのように使えるようにしています。モニターに直接映像出せて便利~

alice外観 / VMの映像をモニターに出した様子

walnuts.devの全サービスをk8sに移行したので、VMを常駐サーバーとしては使わなくなりました。常駐マシンはcake、snow、donutだけですね。数カ月前まではcakeがなかったので、たった6GBでk8sを運用していました。よく動いていたな...という感じです、、、

常駐させたときの消費電力は大体30Wくらいです。めちゃめちゃエコ~~~

ネットワーク

物理ネットワークは特になにも面白いところはないです...

図を見ると分かる通り、自宅内のルーターの上に共用ルーターがあります。そのせいで自宅ではポート開放などができません。

そこで、Cloudflare Tunnelを使うことで各サイトを公開しています。
Cloudflare Tunnelはその名の通り、Cloudflareと自宅間でトンネルを構成し、特定のドメインに来たリクエストをプロキシし、自宅側に転送してくれるサービスです。
アウトバウンド接続のみで外部アクセスができるようになるのでポート開放は不要です。

自宅ではCloudflaredをsnow上で動かし、*.walnuts.devをプロキシしています。本当はk8s Podとして動かしたいのですが謎のエラーによりまだ動かせていません。
Kubernetes構成編などでまた説明しますが、ExternalDNSにパッチを当て、Ingressリソースから自動でCloudflare Tunnelの設定を行うようにしています。Ingressをつくるだけで外部公開サイトを追加できるのでめちゃめちゃ便利です。

HTTP/HTTPS以外はTailscaleを用いて外部からのアクセスを実現しています。SSHやRDPなどは自分しか使わないので、ClientAppが必要なTailscaleでも今の所問題は起きていません。

k8s内のネットワークはMetalLB と Flannel を用いていい感じにしています。そしてkube-api-serverへのアクセスはkeepalivedを用いて冗長構成としています。

おわりに

うーん、物理環境とネットワークについてはあんまりおもしろい内容はありませんでしたね......。
次回以降のKubernetes関連記事ではもっといろいろ面白い話があると思うので期待していてください!

明日の記事はヘルファイアいしだ さんの記事です!お楽しみに!