この記事は エーピーコミュニケーションズ Advent Calendar 2023 の1日目の投稿です。
今年の 4 月に株式会社エーピーコミュニケーションズ (以降、APC) に入社して半年経ちました。 今はがっつり Azure をやっている感じですが、前職では Azure だけでなく色々なことにチャレンジさせてもらいました。
その中でも一番最初にチャレンジ(通常業務とは別で取り組んだ業務改善)したのは Ansible の導入でした。 そもそも Ansible とはなんぞや?って状態だったので Ansible を実際に触ってみようと、まずは Ansible もくもく会に参加しました。
当時はまだコロナ禍前の世界ということもあり Ansible コミュニティが開催していたもくもく会は数少ないオンライン参加が可能な勉強会で、これが自分にとって初めての技術コミュニティへの接触でした。
それから度々 Ansible コミュニティのイベントに参加していき、その中で某金魚の方を始めとした APC 所属の方をよくお見かけして APC という会社を知りました。 自分の興味が Ansible に加えて Kubernetes や Azure に広がっていった際も APC の名前を見ることが多く、Ansible に限らずアウトプット活動が盛んでとても楽しそうな会社という印象を持っていました。
アドベントカレンダーもその楽しそうな活動一つで、APC のアドカレ(組織のアドカレと言ったほうが正しいかも)に参加することは一種の憧れでもありました。 そんな APC に入社できたのも、自宅で自由に検証ができる環境「自宅ラボ」を導入してスキルアップできたのが大きいです。
というわけで、アドカレの初日にポエムっぽい投稿になってしまいますが「自宅ラボ ジャーニー 2023」と銘打って自分の過去ツイートを引用しながら自宅ラボの遍歴を紹介します。
ちなみに見出しは有名どころのサブタイトルを引用していますが特に意味はないです。
【序章】自宅ラボは出ているか?
はじめに自宅ラボを導入するに至った動機ですが、理由は単純で「自由に使える環境が欲しい」と思ったからです。
冒頭で話したとおり、前職で自動化やサーバ管理を推進するために Ansible を触り始めたのですが、検証環境を用意するのもなかなか難しいものがありました。
特にプロキシに阻まれまくった。
最初の頃は Ansible もくもく会で使える環境で十分満足していたのですが、そのうちもっと色々な検証をしたくなって自由に使える プロキシに阻まれない 自宅ラボを導入することにしました。
おそらく自宅ラボを構築している方の多くが同じ動機なんではないでしょうか。 あと、ロマンとか探究心みたいな気持ちも少しはありましたね。
クラウドサービスを利用するのもよかったんですが、インフラの勉強をするにあたってやっぱり物理で触れるものが欲しいという理由でクラウドは除外しました。 とは言っても一部のサービスは自宅ラボと連携する形で利用しています。
そういうわけで自宅ラボを導入することを決意したのですが、この時期に Ansible と並行して OpenShift にも興味を持ち始めていて、まずは OpenShift の導入を目標に自宅ラボを構築していきました(そもそも最初に自宅ラボとして OpenShift を選択することの無謀さをまだ知らなかった)。
初めて「自宅ラボ」という単語を使った記念ツイート。
自宅ラボ欲しい😫
— ののし (@nnstt1) March 4, 2020
【第一章】自宅ラボ大地に立つ!!
記念すべき自宅ラボ一号機として DeskMini A300 を導入しました。 界隈には自宅にラックサーバを設置する猛者もいることも知ってはいたのですが、さすがにハードルが高くて断念しました。
構成はこちらにまとめています。 今も対して変わっていません。
このマシンに仮想化基盤として VMware ESXi を入れて、その上で OpenShift を動かそうとしました。 その際の奮闘ぶりを投稿していますが、結論から言うと動きませんでした。 完全にスペック不足です。
OpenShift を動かすことは断念し、マシンはそのまま VMware ESXi を使った仮想化基盤として第二の人生を歩み始めました。
この ESXi 上で Ansible Tower(今で言う Ansible Automation Controller)や Zabbix、Kubernetes などを動かして遊んで勉強していました。
しばらくはこのマシン一台体制のままでした。
同じ頃、Ansible を使うなら管理対象のネットワーク機器がいるよね、ということで Cisco 891fj をヤフオクで購入しました。
X (Twitter) で当時の様子を振り返ってみるとこんな感じ↓でした。
OpenShift構築できない
— ののし (@nnstt1) March 8, 2020
↓
(試行錯誤)
↓
Ciscoのルータ買おう!←イマココ
謎の試行錯誤を経て Cisco の機器を購入する決意をした模様。 機器選定は前職のネットワーク担当の同僚に相談して 891fj がいいんじゃない?ということで決めました。
Cisco 891fj 2台あるけど、ACアダプタは1本しかありません
— ののし (@nnstt1) June 22, 2020
なぜこんな状況になったかというと、ヤフオクで最初にポチった 891fj に AC アダプタが付属されていなかったから。 哀しい哉、この 1 台目は未だ電源が入らない状態で鎮座していて永遠のコールドスタンバイ状態です。 ヤフオクでポチる際はちゃんと説明欄を読みましょうね……。
ネットワークに関してはズブの素人だったので前職の同僚に色々教えてもらいながら運用していったのですが、仕事でも Ansible の自動化対象はサーバメインだったこともあり自宅ラボでネットワークを勉強する機会はありませんでした。 891fj は今も自宅ラボのネットワークを司ってはいますが、完全にアンタッチャブルな存在となってしまっています。
整理すると、初期の自宅ラボは以下のような感じでした。
- Cisco 891fj で自宅ネットワークとは別のラボ用ネットワークを構成
- DeskMini A300 に VMware ESXi を入れて仮想化基盤として運用
この頃に Azure Arc やってみたけど、そういえばこれ以来触ってないかも。
ついに 自宅ラボに Azure Arc enabled data services の登録ができた!俺がハイブリッドクラウドだ pic.twitter.com/mg3Jg9s9lo
— ののし (@nnstt1) October 14, 2020
【第二章】私のラズパイは凶暴です
自宅ラボに仮想化基盤を構築していた頃、ラズパイを使った Kubernetes クラスタというものをよく見かけるようになっていました。 いつかラズパイ Kubernetes をやってみたいなぁと思っていた私はラズパイ導入に向けて動き始めていました。
ちょうどラズパイ 4 が販売されたので最終的にラズパイ 4 を 3 台導入したのですが、既に仮想化基盤上に Kubernetes クラスタを作っていたこともあってラズパイは Kubernetes 用には使わず、当時興味を持っていた分散ストレージの Ceph を構築するために使いました。
ラズパイを使って Ceph クラスタを構築できるという情報はネットで見かけていたので着手したものの、実際に手を動かして見ると ARM 未対応の箇所があったり、ラズパイと SSD を繋ぐケーブルの相性問題が発生したり、とめちゃくちゃ大変でした。
このときにラズパイが届いたようです。 計画を立ててから実際に導入するまでかなり時間が掛けてしまいました。
ラズパイのせいで部屋が温かい
— ののし (@nnstt1) March 2, 2021
それから一年以上、ラズパイ Ceph クラスタと格闘していました。 そんな中で PoE+ HAT を追加するなどのパワーアップがなされていました。
ラズパイ Ceph クラスタ作り直した。PoE+ HAT を取り付けて、OS を Fedora 36 に変更。今度こそ安定稼働してくれ! pic.twitter.com/kVsbzZyGXf
— ののし (@nnstt1) May 11, 2022
その後、ケーブルの相性問題に辿り着きました。
ラズパイ Ceph で OSD が落ちる (USB 接続の SSD が認識しなくなる)事象、SATA-USB 変換ケーブルが原因の可能性高くなってきた
— ののし (@nnstt1) May 18, 2022
非公式だけど各製品がラズパイ4で動作するか検証してる方がいて、自分が用意した変換ケーブルが動作しない製品リストに載ってる…https://t.co/exsvrIC3ew
ラズパイが参戦した結果、自宅ラボも賑わいを見せ始めました(ファンの音が地味にうるさい)。
【第三章】Proxmox VE、襲来
しばらくマシン一台で仮想化基盤を運用していると、こんなことを思うことがよくありました。
「メンテしやすくするために冗長化してぇ……」
ごく自然な流れだと思います。
マシンとしてのメンテナンスは言うほど多くなくて、部屋の掃除とか模様替えとか、電源を落として物理的に移動させたい要件がそこそこ発生してました。 仮想化基盤が物理的に冗長化されていてフェイルオーバーしながら掃除できたらとても嬉しいですよね? 早速、仮想化基盤の冗長化に向けて検討を始めました。
2 台目のマシンにはみんな大好き NUC を選定しました。 冗長化を目的としてはいたものの、最初は 1 台マシンで OpenShift を動かせるという Single Node OpenShift を入れるために使っていました。
一方、ソフトウェア面では大きな課題が発生しました。 それは、当時使っていた VMware ESXi を冗長化するためには vCenter が必要で、vCenter を使うためにはライセンスを支払う必要があったのです。 とてもじゃないけど個人で払えるようなものではありません。
そんなユーザのために VMUG というコミュニティの有償オプション「VMUG Advantage」というものがあり、こちらに登録することで検証用ライセンスを使うことができるのですが、それでも VMUG Advantage の登録には年額 $200 掛かります。
マシンを物理的に購入するならまだしも検証用ライセンスで $200 かぁ、と普段ガバガバな財布の紐を引き締めていると、Proxmox VE というオープンソースの仮想化プラットフォームの存在を知りました。
Proxmox VE どうなんだろう
— ののし (@nnstt1) May 31, 2022
Proxmox VE を使えば無償で仮想化基盤の冗長化が実現できそうだったので、VMware ESXi から Proxmox VE に移行することを決めました。 当時の仕事で VMware 製品に関われるチャンスが無さそうだったのも Proxmox VE への移行を後押ししました。
NUC に入れていた Single Node OpenShift も消して Proxmox VE をインストールし、無事に Proxmox VE への移行と 2 台目マシンの導入も完了し、自宅ラボに冗長構成となった仮想化基盤が爆誕しました。
Proxmox のクラスタ組めた。プロセッサ種別を AMD にした状態で Intel ホストにマイグレーションしたら案の定コケた。種別を host にしたらマイグレーションできた。 pic.twitter.com/5ZF5ZbMnqC
— ののし (@nnstt1) July 27, 2022
この時点で↓のような見た目になっていました。 小さいながらも立派な自宅ラボになりましたね。
棚(仮)ができたおかげでラボ周りの整頓できた。ラズパイが雑 pic.twitter.com/DUkrt927PY
— ののし (@nnstt1) March 15, 2022
参考程度の構成図。
【第四章】自宅ラボ!きみにきめた!
Proxmox VE を使った仮想化基盤とは別に、ラズパイに Ceph を入れて Kubernetes から利用できるストレージを作っていたので、その内容を K8s@home というイベントで LT で発表しました。
このイベントで登壇されていた @yuanying さんがクラスタ構成の基本方針として「できるだけ Kubernetes に載せる」と発表されていて、これを聞いた自分はそのやり方にとても痺れしまい「自分も Kubernetes に載せられるものは載せたい!」という衝動に駆られました。
流されやすい。
昨日の K8s@home を受けて物理でクラスタ持ちたくなってきたな…
— ののし (@nnstt1) October 12, 2022
当然 Kubernetes クラスタを新しく生やすだけの潤沢な物理資源は自宅ラボには存在しておらず、冗長化したばかりの仮想化基盤を潰して空いたマシンを Kubernetes クラスタの物理ノードとして転生させることにしました。 ちなみにこのタイミングで 3 台目のマシンをお迎えしています。
同時に Kubernetes 用ストレージとして働いていたラズパイ Ceph クラスタも解体し、Kubernetes クラスタのコントロールプレーンとして転生させました。 Ceph はとても好きなのですが、ラズパイを使うとどうしても不安定になってしまうのと、スキル不足故のトラシュー時間の増大に疲弊してしまったので、ラズパイ Ceph クラスタの廃止は必然の流れだったのかも知れません。
仮想化基盤には作業用 VM だったり DNS サーバだったりが載っていたのですが、新しく導入した Mac Mini や NAS の DNS 機能を使ったりと代用先があったため併せて移行しました。
というわけで、自宅ラボから仮想化基盤は無くなって、現在は物理マシンのみを使った Kubernetes クラスタが鎮座するのみとなりました。 このクラスタを「盆栽」と呼んで、時間を見つけては選定と言う名の検証やメンテナンスをしている日々です。
3 台目のマシンをお迎えしてワーカー 3 台構成を考えていたのですが、現在の構成はワーカーが 2 台になっています。 一番最初に導入した DeskMini はクラスタに組み込んでおらず遊ばせている状態です。 これは 2 台構成でも十分リソースが足りている使い方をしているのと、DeskMini を録画サーバとして使うことを考えているからです。
録画サーバは最近よくフリーズして録画失敗しちゃってるので、そろそろ腰を据えて環境を整えないと。
2023-11-30 時点でこんな様子。 ケーブル周りがゴチャゴチャしているのはご愛嬌と言うことで……。
【終章】俺たちの戦いはこれからだ
というわけで、自宅ラボの遍歴について紹介してみました。 本当は Azure や Kubernetes のネタをしたかったんですが、まったくネタが思い浮かばなかったのでアドベントカレンダー初日にも関わらずこんな内容になってしまいました。
自宅ラボは本当によいものです。 実質無料(※1 電気代除く)(※2 導入費用除く)(※3 運用コスト除く)で好きなことを好きなだけできる環境です。
これからも盆栽のように手入れをして、そしてたまに拡張して、大切に扱っていきます。 少しでも興味を持った方は今すぐ自宅ラボを構築してくださいね。