こんにちは。小川智也です。
本日も夏休み毎日投稿2025 Day2ということで、前回に引き続き、おうちKubernetesの構築を行っていきます。
今回はひたすらデプロイしたり、CIツールをいじったりというがっつり技術系の内容なので短くなってしまいますが、ぜひご覧ください!

小川智也と申します。Webプログラマーな中学2年生です。
このブログでは主にITやガジェット系の情報を発信しています!
▼ おすすめリンク ▼
【 X(旧Twitter)・いえPay・個人事業主・ITパスポート・お問い合わせ 】
前回のあらすじ

まず始めに、前回のあらすじをざっくりと解説します。時間があるよーという方は、ぜひ前回の記事もご覧ください。
前回はKubernetesとかなんなのか、Dockerとの違いにはどのようなものがあるのか、なぜわざわざ自宅に導入するのかなどを解説しました。
Kubernetesは、コンテナオーケストレーション(=コンテナの自動管理・調整)と呼ばれるツールで、アプリとかDBとかが入ったコンテナのデプロイやスケーリングなどの管理を自動で行ってくれます。
Dockerがコンテナ仮想化を行うツールなのに対し、KubernetesはそのDockerコンテナを大規模に管理・運用するツールで、組み合わせることにより、より一層コンテナ仮想化の恩恵を受けることが出来ます。
また、今回導入する理由は、これまで導入していたProxmoxの環境が不安定で実用に耐えなかったからで、導入する目的としてはコンテナ仮想化の勉強やアプリケーションの外部公開を行うためです。
今回行うこと
今回この記事では下記の作業を行います。
- TailscaleやCloudflaredの導入
 - Kubernetes Dashboardのデプロイ
 - いえPayのビルド、デプロイ
 - ogwlab.comのビルド、デプロイ、GitHub Actionを用いたビルド→デプロイの自動化
 
TailscaleやCloudflaredの導入

こちらは特段難しい作業もなく、ワンライナーを実行するだけで完了します。
Tailscaleを使うと外出先から自宅のサブネットにアクセス出来たり、家のIP経由でインターネットにアクセス出来たりと非常に便利なのでお勧めです。後日Tailscaleについての記事も書こうと思います。
参考 Tailscaleのインストール方法(Linux) https://tailscale.com/kb/1031/install-linux
参考 Cloudflaredのインストール方法 https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/
Kubernetes Dashboardのデプロイ

次に、Kubernetes Dashboardのデプロイを行っていきます。
Kubernetesで使えるダッシュボードツールはこれ以外にも存在し、代表的なものだとPCにインストールするタイプの「Lens」などが存在します。
しかし、今回はWebからアクセスでき、日本語対応しており、なおかつ純正のアプリケーションであるこちらを導入します。
最新バージョンはHelmからしかインストールできない
ここで一つ目の罠に引っ掛かりました。
作業を進めるにあたって色々日本語の情報を調べながら行っていて、

GitHubからyamlを落としてそのままapplyすればいいだろー
と思っていましたが、どうやらv7以降はマニフェストでのインストールが廃止され、「Helm」というパッケージマネージャーからしかインストールできなくなっていました。(macOSとかWindowsでいうところのbrewとかwinget, chocolateyみたいなやつ?)
ログイン用のトークン

そんなこともありつつ無事にデプロイもできたのですが、ここで第2の壁にぶつかります。

トークン?なんじゃそりゃ
どうやらダッシュボードへログインするにはトークンというパスワードのようなものがいるみたいです。
色々ドキュメントを読み漁った結果、管理者権限のアカウントを作成し、そっからkubectlで一定時間有効なトークンを発行することによりログインできるみたいです。

め、面倒くさい...
またこのトークンは一度発行したらずっと使えるものではなく、1時間程度で有効期限が切れるので都度発行が必要みたいです。
以下にアカウントの発行用のyamlとトークン発行のコマンドを置いておくので使いたい人は使ってください。
設定が完了したらこんな感じで稼働中のサービスなどを見れます!

いえPayのビルド、デプロイ

続いていえPayを導入していきます。
「いえPayってなんだよ!」という方は過去記事を見てみてください。
最初は「既存のPHP+Apacheのイメージごにょごにょしたらすぐできるでしょ」とかいう甘い考えをしていましたが、どうやらDockerfile作ってビルドしてDocker Hubにアップロードして...ということが必要みたいです。めんどくさ。
バグ発見

Dockerfileを書いてテストビルドをしていたその時!

なんかログイン処理でエラー出るな...
エラーメッセージを手掛かりに該当行を確認した結果、$idとかいう存在しない変数if文で使ってました。なぜ...
前はなぜかそれでも動いてたんですけどね...謎は深まるばかりです
ちなみにこのバグを修正するためだけにv2.6.1のマイナーアプデリリースしました。
Docker Hubにアップロード

無事にビルドもできてDocker Hubにアップロードもできました。人生初Docker Hubかも。
これによりどんなPCからでも docker pull ogatomo21/iepay:v2.6.1 をするだけでいえPayの環境構築ができます。需要は自分以外たぶんない。
いざk8sにデプロイ

いよいよk8sにデプロイしていきます。

namespaceを作ってPVCを作ってDeploymentを作ってServiceを作って...
書いてあることの中身はDocker Composeと大差ないのですが、知らない単語がいろいろ出てくるのでかなり困惑してます。
こちらも同様にサンプルのマニフェストを置いておくのでよければどうぞ。
設定が完了したら普通のいえPayとそん色なく動きます。設定方法も全く同じです。

ogwlab.comのビルド、デプロイ、GitHub Actionを用いたビルド→デプロイの自動化

お次に最後、おがともの自宅鯖研究室という以前から自宅サーバーでホストしていたWebサイトをデプロイしていきます。
やることはさっきのいえPayとほぼ同じなのですが、Github Actionsと組み合わせて、リポジトリにコミットすることでビルド→イメージをプッシュ→K8sにデプロイを全自動でやってくれるようにしたいと思います。
GitHub ActionsのランナーをK8sにデプロイする

今回は自動でK8sのデプロイも行いたいので、GitHub Actionsのランナーをセルフホストすることにより、自宅ネットワークのK8sにアクセスできるようにしようと思います。
公式のクイックスタートガイドを見ながら進めていきます。
参考 Actions Runner Controller のクイックスタート https://docs.github.com/ja/actions/tutorials/actions-runner-controller/quickstart-for-actions-runner-controller
ghcr.io にイメージをアップロードできない

また初っ端からエラーです。どうやら権限がなくイメージのプッシュが出来ないようです。

いつも通り リポジトリの設定→Actions→General→Workflow permissions から書き込み権限を与えるも変わらず...

色々調べたところ、プッシュしたいイメージ側の設定を開いてActionsを実行させるリポジトリに対して書き込み権限を与えることでできました。これを解決するだけで30分くらいかかった...
セルフホストのランナーを使ってくれない
そしてまたもや問題が発生。イメージはプッシュ出来たものの、自宅内のK8sにアクセスできません。
詳細を見たところ普通にGitHub側のサーバーが使われてました。なんで...

普通にセルフホストを使う設定が抜けてました。そりゃ動かんわ

そうした1時間位の格闘の末、無事に自動ビルドが走るようになりました!革命すぎる
時間があれば今後も活用していきたいです。設定大変だけど。
明日やること
明日は今日やる予定だけど出来なかった、残りのアプリケーションもデプロイしていきます。
- Guacamoleのデプロイ
 - NextCloudのデプロイ
 - HomeAssistantのデプロイ
 

予定通り行けば明日でK8sシリーズは終了します
まとめ
いかがだったでしょうか。今回は夏休み毎日投稿 Day2として、Kubenetesへのコンテナデプロイについて記事にしてみました。
ほぼ備忘録みたいな感じになりましたが、参考になれば幸いです。
明日もKubernetesのデプロイについての記事を投稿するので、お見逃しなく!
最後まで見ていただき、ありがとうございました。

この記事がいいと思った方はぜひ他の記事も見ていってください!
X(旧Twitter)のフォローもよろしくお願いします!




