概要
自宅サーバーのリプレイスに伴い,マシンスペックに余裕ができたため,コンテナオーケストレーション環境の構築を検討しました. 運用の手間を減らしつつ,実務で使うことの多いK8s環境を構築し,学びにつなげるため,軽量版パッケージであるMicroK8sを導入しました.
後学のため,導入方法とメトリクス可視化のための設定をまとめておきます. 本質的な難しい部分はMicroK8sが肩代わりしてくれているので,各ステップはとても簡単かなと思います.
前提
- OS : Ubuntu Server 24.04
- ネットワーク : 外部への公開およびルーティングにはCloudflare Tunnelを利用
MicroK8sはUbuntuの開発元であるCanonicalが開発しており,導入時の障害が少ないかと思います.
MicroK8s
MicroK8sは,ローカル環境で実行することを想定されたらしいです1.
複雑な設定なしに単一ノードで動くため,今回のケースでは導入が非常に簡単でした. 何はともあれ自宅サーバーは管理しやすい方がいいので,MicroK8sを選んでよかったなと思っています.
アプローチ
ここからは,MicroK8sを導入する手順を述べます2. 以下のコマンドを実行すると,MicroK8sがインストールできます.
sudo snap install microk8s --classic
–classicはsnapのサンドボックス機能を無効化するオプションです.詳細は後述する用語集を参照してください.
以上です. これだけでMicroK8sがインストールできてしまいます.
DNSとstorageの有効化
次にDNSとstorageというアドオンを入れます. DNSはコンテナ間での名前解決のため,storageはDBを使うときに使います. もしstorageを利用しない場合,PostgreSQLなどのDBコンテナにおいてコンテナが再起動した瞬間にデータが全消去されます. また,データを保持するための設定を書いてもエラーになってアプリが起動しません. これらを入れていないと,サーバー用途としてはまともに使えません. K8sでは,K8s内部で動的にIPアドレスが変化します. そのため,DNSでコンテナの名前解決をしないと,外部公開する際にコンテナを指定できません.
sudo microk8s enable dns storage
これだけでセットアップ完了です.
メトリクス収集ツール
サーバーの稼働状況を可視化してくれるツールを導入します.
これもMicroK8sであれば簡単に導入できます.
sudo microk8s enable observability
observabilityアドオンを有効化すると,内部では,kube-prom-stack-grafanaという名称のServiceが作成されるため,それを参照します.
service.yaml
apiVersion: v1 # api version
kind: Service
metadata:
name: external-grafana
namespace: default # cloudflaredのPodが動いているNamespaceと同じにしてください
spec:
type: ExternalName
externalName: kube-prom-stack-grafana.observability.svc.cluster.local
ports:
- port: 80 # Grafanaが起動するポート番号
targetPort: 80
これをcloudflareのトンネル経由で公開すると,可視化されます.
結果
外部で公開されると,指定したサブドメインの画面にログインしてサーバーの状態を可視化できます.

加えて,万が一アプリケーションを起動しているコンテナが落ちたとしてもK8s側が「あるべき状態」に復元してくれるため,Dockerのみで運用するよりは可用性が高まったかなと思います.
用語集
この記事を書くにあたって,自分が説明できなかった事柄を整理しておきます.
- snap
- Wikipedia曰く「Canonicalが設計・開発したソフトウェアデプロイメントシステムかつパッケージ管理システム」のこと
- snapとaptの違い
- Snapではインストールされたパッケージは仮想環境で実行される.これにより,ファイルやネットワークにアクセスするためには専用のインターフェースを経由する必要があるが,セキュリティが強固になる.後述する
--classicオプションを付けることでこれを無効化することもできる.一方でaptはそういった仮想環境を持たない.これが一番大きな違いになると考える. - コンテナランタイム
- コンテナの実行環境のこと3.
OCI(オープンコンテナイニシアチブ)にて現代のコンテナランタイムが準拠すべき3つの仕様を定義している.
- 実際のコンテナイメージ仕様
- コンテナランタイムがコンテナイメージを取得する方法
- イメージの展開・レイヤードマウント・実行方法
- CNCF4
- Cloud Native Computing Foundation. コンテナ技術の推進と,その進化を取り巻くテクノロジー業界の足並みをそろえるために2015年に創設された財団