Featured image of post Kubernetesにインフラを移していこう!

Kubernetesにインフラを移していこう!

こんにちはariwaraです。

自宅インフラのKubernetes移行計画を進めている途中です。今回のブログでは躓いた点や、技術選定などの途中経過をまとめていこうと考えております。

導入する目的

今回Kubernetes(k8s)を導入したのは、いくつか課題が存在しており、それらを解決する手段としてk8sが有効だと判断したためです。

課題点:

  • どのサーバーにアプリを入れたのか?
  • アプリをどの様に入れたのか?
    • 自前ビルド、snap,apt etc
  • どのバージョンを入れたのか? わからなくなる。
    • 競合が出る
  • 構成が不明なせいでバックアップを取ったときのソフトウェアのバージョンがいつかわからない
    • 復元する時にバージョンを間違えてDB破損
  • 手作業によるコマンド入力のミス。
  • 既存のVM構成だと高度なHA構成を導入することが難しい。

こうした過去の失敗や課題点からk8sを利用した管理をしたかったという点があります。

また、他にも理由があり

  • 自宅のインフラをIaCに移行したい
  • 近年の主なWebサービスではk8sが主流になっており、技術を勉強したい
  • なんかマウントが取れそう?

本番環境の構成

構成はこんな感じです

k8s本体

  • k3sで構築
    • コントロープレーン…3台
    • ワーカー…3台

ストレージ

  • Longhorn
    • ワーカーに紐づけている
    • ワーカーノードごとに1.5TBを付与

こんな感じの構成になっています。

環境について適当に説明

k3sについて

初めに、k8sを導入した!と言いつつもk3sで構築しているのは内緒です。🤫 難しいですからね。バニラk8sを導入するのって。そこは許してくださいませ。

実はmakibi_webでは以前(2024~2025年頃)にmicrok8sというk3sと同じk8sの親戚的なソフトでコンカレントというサービスを運用してました。

ですが、自分の無知さにより環境を幾度も破壊しており、またsnapという謎多き環境に少し苦手意識を持つようになってしまったので、今回はmicrok8sではなくk3sで構成してみました。

k3sはコマンドラインで簡単に導入出来たのが素敵でした。

導入時に躓いた点がありました。

  • コントロープレーンで用いられるキー・バリュー型ストアがetcdではなくsqlite
  • 同じホスト名だと起動できない

個人的に盲点だったのが、キー・バリュー型ストアの標準がsqliteで動作するという点でした。

コントロープレーンのクラスタリングをする際にsqliteではなくetcdを使う必要があったので、コマンドでDBを切り替える必要があります。It’s 盲点。

また、クラスタリングする際にホスト名が被るとソフトの起動が出来ないです。

なので、一台一台ユニークなホスト名に変更していきました。

当たり前のことなんですけど、ここに詰まって解決に30分程度費やしました。

今後の不安点としてはアップデートと証明書の更新です。

あとは、k8sってリリースの頻度が多くあり、アップデートについてついていけるか心配。

Longhornについて

かねてからk8sを導入する際に一番考えていたこととして、ストレージをいかに良い感じに用意するかという点がありました。

k8sは各ノードのリソースを記憶領域、計算、メモリ等をまとめて抽象化しとして管理します。

つまり、全てのノードがアクセスして利用できる共有ストレージを用意することが必要になるってことです。

なるべくシンプルな共有ストレージを探していました。

ceph+Rookとかも有名どころですが自分が操る程の力量が無いため、早々に却下しました。(proxmoxのcephで大火傷をしてから触るのが怖くなってしまった)

NASとかで構築するのも出来ますが、そのために買うのもお金が…

そんな中、ネットの海を彷徨っていた所、Longhornとかいうパスベースで良い感じの共有ストレージを見つけることが出来ました。

実際にインストールも非常に簡単で、helmでインストールが出来ました。

まあ、そんな感じでk8s環境を組み立てていきました。

移行状況

今後移行していくサービスとして…

  • misskey
  • rustfs
  • immich
  • maincraft
  • matrix
  • blog

.etc

これらのサービスを移行していこうかなと思っております。

今のところ、blog,immich,rustfs,mincraft,matrixは移行が完了しています。

移行できてないのは藍ちゃんとmisskeyだけです。

今後の課題

今後の課題点

  • アップデートなどの管理をこまめにしていく

    • k8s自体のアプデの頻度の多さはかなり有名
  • コンテナセキュリティーなどについても学んでいく

    • コンテナ技術は、VMよりもウイルスなどの攻撃に弱いとされている
    • アクセス権限の勉強
  • 監視基盤の強化

    • prometheusとgrafanaをより使いこなせるようにする
  • k3sの設定を変える

    • CNIをカリコとかに変えたい
      • 標準のフランネルだとネットワークポリシーの設定がやりずらい
  • 安定して動かしていく

    • 慣れていない状態で新しい環境に移し替えると高確率で環境破壊をしてしまう

興味

気になっている技術

  • Falco

    • コンテナを監視するやつ
  • 監視基盤の構成

    • thanosの導入

サービスというよりは裏で支える系のソフトに興味ありマス。

最後に

今回はk8sを導入したよという軽い宣伝?的な内容で書きました。

実は、2~3年前からいつか自宅インフラをk8sに移行したいという思いがありました。ただ、あまりにも難しすぎて導入が出来ずにいました。何回も環境を破壊して安定して運用できずにいまして…

ようやくk8sが触れるだけの知識が身についたという感じで非常に嬉しいです。

次はmisskeyを実際にk8sに移行した内容の記事を書こうかなと思っています。

実はmisskeyのhelm chartは完成済みで、後は軽く安定性のテストなどを確認してから運用していこうかなと思っております。

我ながらかなり良い感じに構築出来たので…

おすすめの曲