VMware Photon OS デプロイガイド:vSphere上でコンテナとクラウドネイティブに最適化されたLinux

VMware tutorial - IT technology blog
VMware tutorial - IT technology blog

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.network20-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を毎週スケジュールするのは良い習慣です。

Share: