UbuntuにMicroK8sをインストール:開発者や検証環境に最適な「軽量」Kubernetesソリューション

Ubuntu tutorial - IT technology blog
Ubuntu tutorial - IT technology blog

なぜ従来のK8sやMinikubeではなくMicroK8sを選ぶのか?

もし、Kubernetesをインストールするためにkubeadmと格闘したことがあるなら、大量のTLS証明書や複雑なネットワーク構成を管理する大変さがわかるでしょう。Ubuntu上で検証環境や開発環境を構築する場合、迅速で軽量、かつシステムを汚さないツールが必要です。その答えがMicroK8sです。また、システムを常に快適に保つためにパフォーマンス最適化を行うことも重要です。

多くの人は慣れ親しんだMinikubeを選びがちです。しかし、Canonicalが提供するMicroK8sは、Ubuntuとの親和性が抜群です。重い仮想マシン(VM)層を介して実行するのではなく、軽量仮想化のようにホスト上で直接動作するため、起動直後で約1〜2GBのRAMを節約できます。私は実際に2 vCPUと4GB RAMしかない格安VPSでこのクラスターを動かしてみましたが、システムは非常にスムーズにレスポンスを返してくれました。

MicroK8sの強みは「Zero-ops」という理念にあります。ダッシュボードからIngressまで、あらゆるコンポーネントがパッケージ化されています。GitHubでYAMLファイルを探し回る必要はなく、コマンド一つで有効化できます。

環境準備

Ubuntuマシンが必要です(20.04から24.04のバージョンが最適です)。ハードウェアに関しては、少なくとも4GBのRAMを確保してください。これ未満で実行すると、アプリケーションをデプロイした際にシステムPodが簡単にOOM (Out of Memory)状態に陥ってしまいます。

ステップ1:Snapによるインストール

MicroK8sはSnapを通じて公式に配布されており、アップデートやバージョン管理が非常に簡単です。

このプロセスは、ネットワーク速度にもよりますが、通常2分もかかりません。

ステップ2:アクセス権限の設定

コマンドを実行するたびにsudoを打たなくて済むように、現在のユーザーをMicroK8sの管理グループに追加します。

sudo usermod -a -G microk8s $USER
sudo chown -f -R $USER ~/.kube
newgrp microk8s

newgrpコマンドを使用することで、マシンを再起動することなく即座に新しい権限を適用できます。

ステップ3:ステータスの確認

コアサービスが稼働準備できているか確認しましょう。

microk8s status --wait-ready

画面に「microk8s is running」と表示されれば、シングルノードのK8sクラスターが正式に稼働したことになります。

アドオンの有効化:MicroK8sを本格的なK8sクラスタへ

デフォルトでは、MicroK8sはシステムを軽量に保つために最小限の構成のみをインストールします。実際の作業を行うには、アドオン機能を有効にする必要があります。

必須のアドオン

私はあらゆる検証プロジェクトにおいて、以下の4つのコンポーネントを優先的に導入しています。

  • DNS: 内部サービス同士がIPではなく名前で通信できるようにします。
  • Storage: データの永続化(Persistent Volume)を可能にします。
  • Ingress: 外部からのトラフィックを内部サービスへルーティングするゲートウェイです。
  • Dashboard: リソースを監視するための直感的なWebインターフェースです。
microk8s enable dns storage ingress dashboard

Tips:kubectlのエイリアスを作成する

毎回microk8s kubectlと入力するのは手間がかかります。より効率的に操作するためにエイリアスを作成しましょう。併せてターミナルをZshなどで強化すれば、開発効率がさらに向上します。

echo "alias kubectl='microk8s kubectl'" >> ~/.bashrc
source ~/.bashrc

Nginxアプリのテストデプロイ

システムを検証するために、Nginxウェブサーバーを起動し、NodePort経由で外部に公開してみます。

# 2つのレプリカでデプロイメントを作成
kubectl create deployment web-demo --image=nginx --replicas=2

# コンテナの80番ポートをホストマシンのランダムなポートに公開
kubectl expose deployment web-demo --type=NodePort --port=80

kubectl get servicesコマンドを使用して、作成されたポート(通常は3xxxxの範囲)を確認します。ブラウザを開き、localhost:3xxxxにアクセスすると、Nginxのウェルカムページが表示されるはずです。

運用における実践的なTips

UbuntuでMicroK8sを長期間運用してきた中で、不要なファイルの削除といったメンテナンスを含め、いくつか重要な注意点を紹介します。

  • ファイアウォールの競合: これは最も一般的なエラーです。Podがインターネットに接続できない場合は、UFWを確認してください。以下のコマンドでcni0インターフェースのトラフィックを許可する必要があります:sudo ufw allow in on cni0 && sudo ufw allow out on cni0
  • ストレージの掃除: Snapは古いバージョンを保存し続けるため、ディスク容量を圧迫することがあります。snap set system refresh.retain=2を実行して、保存されるバージョン数を制限し、数ヶ月後にディスクがいっぱいになるのを防ぎましょう。
  • スリープ時の対応: ノートPCを使用しており、頻繁に画面を閉じる(スリープさせる)場合、MicroK8sの内部ネットワーク接続が切れることがあります。最も手っ取り早い解決策は、サービスの再起動です:microk8s stop && microk8s start

Kubernetesの導入は、必ずしも複雑なプロセスである必要はありません。MicroK8sを使えば、インフラに煩わされることなく、アプリケーションのパッケージ化に完全に集中できます。皆さんのラボ構築の成功を祈っています!

Share: