Photon OSとは何か、なぜ移行したのか
私の会社では8台のESXiホストからなるVMwareクラスターを管理しており、通常のUbuntu/CentOS VM上でコンテナワークロードを実行すると、不必要なリソースをかなり消費してしまうことに悩んでいました。デフォルトのUbuntu Server VMは起動だけで1〜1.5 GBのRAMを消費し、使っていないサービスもバックグラウンドで動き続けます。
VMware Photon OSはまさにその問題を解決してくれます。これはVMwareが独自開発した最小限のLinuxディストリビューションで、vSphere上でコンテナ(Docker、containerd、Kubernetes)とcloud-nativeアプリケーションを実行するという一つの目的に特化しています。ブロートウェアなし、不要なサービスなし。
私のラボでの実際の比較:
- Ubuntu 22.04 Server:アイドル時のRAM約850 MB、OVAイメージ約2.5 GB
- Photon OS 5.0:アイドル時のRAM約180 MB、OVAイメージ約380 MB
35台のVMコンテナホストのクラスターでは、約23 GBのRAMを節約でき、追加ハードウェアを購入することなく10〜12台のノードをさらに追加できます。
vSphere上へのPhoton OSのインストール
OVAのダウンロードとESXi/vCenterへのデプロイ
VMwareはOVAファイルを提供しており、ISOからインストールする必要がなく、これが最も速い方法です。VMwareの公式サイトにアクセスして最新版のPhoton OS(現在は5.0)をダウンロードしてください。イメージには3種類あります:
- OVA:vSphere/ESXi用 — 推奨
- ISO:手動インストール、より柔軟ですが10〜15分余分にかかります
- AMI/GCE:AWS/GCP用
OVAファイルを入手したら、vCenterにデプロイします:
# UIでドラッグ&ドロップする代わりにgovc CLIを使う
govc import.ova \
-name="photon-node-01" \
-ds="datastore1" \
-net="VM Network" \
photon-5.0-xxxxxxx.ova
govcがまだない場合は、以下の方法で素早くインストールできます:
curl -L -o govc https://github.com/vmware/govmomi/releases/latest/download/govc_Linux_x86_64.tar.gz
tar -xzf govc_Linux_x86_64.tar.gz govc
chmod +x govc
mv govc /usr/local/bin/
export GOVC_URL=https://vcenter.yourdomain.com
export [email protected]
export GOVC_PASSWORD=YourPassword
export GOVC_INSECURE=1
私はgovcを使って大量デプロイをスクリプト化しています — 5〜10台のKubernetesノードを同時に立ち上げる際に非常に便利です。
初回起動前のVMハードウェア設定
電源を入れる前に、VM Settingsでいくつかのパラメーターを調整します:
- CPU:最低2 vCPU(Dockerが安定して動作するには最低2つ必要)
- RAM:本番環境では2 GB以上、ラボでは1 GB
- ディスク:シンプロビジョニング、ベース+いくつかのコンテナイメージには20 GBで十分
- VMware Tools:Photon OSにはopen-vm-toolsが組み込まれており、追加インストール不要
初回ログインとパスワード変更
# デフォルトアカウント
username: root
password: changeme
# 初回起動時にパスワードの変更が求められます
# 現在のパスワード → 新しいパスワード → 確認の順に入力
インストール後の詳細設定
静的ネットワーク設定
UbuntuやCentOSが通常NetworkManagerを使用するのとは異なり、Photon OSはネットワークスタックとしてsystemd-networkdを採用しています。設定構文は少し異なりますが、設定ファイルはずっとシンプルです。すべては/etc/systemd/network/にあります:
# インターフェース名を確認
ip link show
# 静的IP設定ファイルを作成
cat > /etc/systemd/network/10-static.network <<'EOF'
[Match]
Name=eth0
[Network]
Address=192.168.10.101/24
Gateway=192.168.10.1
DNS=8.8.8.8
DNS=1.1.1.1
EOF
# 設定を適用
systemctl restart systemd-networkd
# 確認
ip addr show eth0
実際の運用からの注意点:VMに複数のインターフェースがある場合(例:eth0は管理用、eth1はデータ用)、それぞれ10-eth0.networkと20-eth1.networkを個別に作成してください — プレフィックスの数字が適用順序を決定します。
tdnfによるシステム更新とパッケージインストール
Photon OSのパッケージマネージャーはtdnf(Tiny DNF)です — フルのdnfよりずっと軽量ですが、構文はほぼ同じです:
# システム全体を更新
tdnf update -y
# パッケージを検索
tdnf search curl
# パッケージをインストール
tdnf install -y curl wget vim git
# インストール済みパッケージを表示
tdnf list installed
# パッケージを削除
tdnf remove vim
デフォルトのリポジトリはUbuntuほど豊富ではありません — これは意図的なトレードオフです。特殊なツールはバイナリをダウンロードするか、ソースからビルドする必要があります。私にとっては問題ありません:Photon OSはコンテナを実行するためだけに使用するので、必要なものはすべてイメージの中に入っています。
Dockerの有効化と設定
# Dockerはリポジトリにあるのでインストールして有効化
tdnf install -y docker
systemctl enable docker
systemctl start docker
# 動作確認
docker version
docker info
# 非rootユーザーがdockerを実行できるようにする(オプション)
usermod -aG docker yourusername
vSphere環境に最適化するため、Docker daemonの設定をカスタマイズしています:
cat > /etc/docker/daemon.json <<'EOF'
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2",
"live-restore": true,
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 64000,
"Soft": 64000
}
}
}
EOF
systemctl restart docker
live-restore: trueオプションは重要です — Docker daemonが再起動した際(例:アップデート時)もコンテナの実行を継続できます。不必要なダウンタイムを防ぐことができます。
基本的なセキュリティ強化
デフォルトでPhoton OSは良好なセキュリティベースラインを持っています — 開いているポートは最小限で、余分なサービスもほとんどありません。それでもさらにいくつか設定を強化しています:
# SSHパスワード認証を無効化し、鍵認証のみを使用
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config
# SSHパブリックキーをコピーする(ローカルマシンから実行)
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
# SSHを再起動
systemctl restart sshd
# ファイアウォールを有効化(iptables)
tdnf install -y iptables
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j DROP
動作確認 & モニタリング
システムヘルスチェック
# リソース使用量を確認
free -h
df -h
top
# 重要なサービスを確認
systemctl status docker
systemctl status systemd-networkd
systemctl status sshd
# システムログを確認(journald)
journalctl -u docker -f # Dockerログをリアルタイム表示
journalctl --since "1 hour ago" # 過去1時間のログ
journalctl -p err # エラーのみ表示
# 実行中のコンテナを確認
docker ps
docker stats --no-stream # リソース使用量のスナップショット
vmstatとiostatによるリソース監視
# sysstatをインストール
tdnf install -y sysstat procps-ng
# CPU/メモリを2秒ごとに表示
vmstat 2 10
# ディスクI/O
iostat -x 2 5
# ネットワーク統計
ss -tulnp # リスニングポートを表示
netstat -i # インターフェース統計
vSphereモニタリングとの連携
Photon OSをvSphere上で実行する最大の利点:open-vm-toolsが最初から組み込まれており、Ubuntuのように手動インストールで苦労する必要がありません。vCenterはCPU、RAM、ネットワーク、ディスクのメトリクスをすぐに取得できます:
# open-vm-toolsの動作を確認
systemctl status vmtoolsd
# vCenterのゲスト情報からIPを確認
vmware-rpctool "info-get guestinfo.ip"
# カスタムゲスト情報を読み取る(vAppプロパティ使用時に便利)
vmware-rpctool "info-get guestinfo.hostname"
vCenterからMonitor → Performance → Advancedに移動すると、完全なグラフが表示されます。さらにGrafana + vSphere exporterと組み合わせて、8台すべてのESXiホストを一元管理するダッシュボードも構築していますが、それは別の記事でお話しします。
ヘルスチェック用クイックスクリプト
このスクリプトはすべてのPhoton OSノードの/usr/local/bin/に配置しており、トラブルシューティングや再起動後に実行します:
#!/bin/bash
# photon-health-check.sh
echo "=== Photon OS Health Check ==="
echo "Hostname: $(hostname)"
echo "Uptime: $(uptime -p)"
echo ""
echo "--- Memory ---"
free -h | grep -E 'Mem|Swap'
echo ""
echo "--- Disk ---"
df -h / /var/lib/docker 2>/dev/null
echo ""
echo "--- Docker ---"
if systemctl is-active docker >/dev/null 2>&1; then
echo "Docker: RUNNING"
echo "Containers: $(docker ps -q | wc -l) running"
else
echo "Docker: STOPPED"
fi
echo ""
echo "--- Network ---"
ip -br addr show
chmod +x photon-health-check.sh
./photon-health-check.sh
実際の運用から得たヒント
数ヶ月間Photon OSを本番環境で使用した後、いくつかの重要なポイントをまとめました:
- VMテンプレートを活用する:クリーンに設定済みのPhoton OS VMを1台デプロイ → vCenterのテンプレートに変換 → 必要に応じてクローン。セットアップ時間を80%削減できます。
- Cloud-init:Photon OSはcloud-initをネイティブにサポートしています。Terraformと組み合わせると、10台のノードを
terraform applyを実行してからDockerが使用可能になるまで5分未満でデプロイできます。 - 余分にインストールしない:最大の強みは小さなフットプリントです — 大量のパッケージをインストールしてPhoton OSをUbuntuのようにしてはいけません。必要なものはすべてコンテナ内に格納しましょう。
- 定期的にアップデートする:Photon OSはセキュリティパッチのリリースが非常に速いです。cronで
tdnf update -yを毎週スケジュールするのは良い習慣です。
