使い道のない古い PC を、最新のインフラ技術を学べる 「実戦的な学習ラボ」 に変えてみました。
この記事では、Rocky Linux 9 (KVM) を土台に、Podman と Kubernetes互換YAML を利用して Web サーバー(Nginx)の冗長構成を構築します。
これは、将来的にクラウドや Kubernetes(K8s)へ移行できる設計思想に基づいた、実戦的なインフラ構築の入門です。
1. 物理基盤の準備:KVMホストの構築
1-1. 物理PCスペックとホストOS
| 項目 | 詳細スペック | コメント |
|---|---|---|
| PCモデル | 2011年製 デスクトップPC | 古いハードウェアを学習ラボの土台として活用 |
| CPU | Intel Core i7-2600 (4C/8T) | Sandy Bridge 世代 KVMによる仮想化も十分可能 |
| メモリ | 24 GB RAM (DDR3 1333 MT/s) | VM4台稼働でも安定運用可能 |
| ストレージ | SSD 256 GB | 仮想マシンI/Oを高速化 |
| ネットワーク | Realtek製 Gigabit NIC | オンボードNICを活用 |
| ホストOS | Rocky Linux 9.6 (Blue Onyx) | KVMホストとして最適な安定性と互換性 |
🛠️ 構築手順とポイント
1. BIOSで仮想化支援機能(Intel VT-x / AMD-V)を有効化されていることを確認
2. Rocky Linuxをインストール後、KVM環境を構築
|
1 2 |
$ sudo dnf install @virtualization -y $ sudo systemctl enable --now libvirtd |
1-2. KVM仮想マシン構成とリソース配分
| VM名 | 役割 | vCPU / vRAM |
|---|---|---|
| rocky9-1 | Podman基盤(Master) | 2vCPU / 4GB |
| rocky9-2 | Podman基盤(Backup) | 2vCPU / 4GB |
| OPNsense | ファイアウォール | 1vCPU / 1GB |
| ZabbixAppliance | 監視サーバー | 1vCPU / 2GB |
🔑 リソース配分の設計思想
Nginx自体は軽量ですが、監視エージェントやログ収集など将来的な拡張を考慮し、Podman基盤には4GBを割り当てています。
1-3. ネットワークアーキテクチャとIPアドレス設計
| VM名 | 役割 | IPアドレス (br-mgmt) |
|---|---|---|
| KVMホストOS | ベアメタル(親) | 192.168.1.209 |
| rocky9-1 | Podman基盤(Master) | 192.168.1.202 |
| rocky9-2 | Podman基盤(Backup) | 192.168.1.203 |
| OPNsense | ファイアウォール | 192.168.1.201 |
| ZabbixAppliance | 監視サーバー | 192.168.1.15 |
| 仮想IP (VIP) | Nginxサービス用 | 192.168.1.200 |
補足
すべてのVMは br-mgmt ブリッジを介して同一LAN(192.168.1.0/24)に接続されています。
ホスト・VM・他端末すべてが相互通信可能な設計です。
2. Nginx Webサーバーの構築と冗長化
2-1. Podmanの導入と基本設定
両ノード(rocky9-1, rocky9-2)に以下を実行:
|
1 2 |
$ sudo dnf install podman -y $ ip a show eth0 # IPを確認 (.202 / .203) |
2-2. K8s互換YAMLによるNginx展開
nginx-web.yaml を作成(両VM共通):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
apiVersion: v1 kind: Pod metadata: name: webserver spec: containers: - name: nginx image: docker.io/library/nginx:latest ports: - containerPort: 80 volumeMounts: - mountPath: /usr/share/nginx/html name: html volumes: - name: html hostPath: path: /srv/podman/html |
コンテナ起動:
|
1 |
$ sudo podman play kube nginx-web.yaml |
自動起動設定(systemd生成):
|
1 2 3 |
$ sudo podman generate systemd --name webserver --files $ sudo mv container-webserver.service /etc/systemd/system/ $ sudo systemctl enable --now container-webserver.service |
2-3. KeepalivedによるVIP冗長化設定
① 両VMにインストール
|
1 |
$ sudo dnf install keepalived -y |
② Nginx監視スクリプト
/etc/keepalived/check_nginx.sh
|
1 2 3 4 5 |
#!/bin/bash curl -s http://localhost/ > /dev/null if [ $? -ne 0 ]; then systemctl restart container-webserver.service fi |
|
1 |
$ sudo chmod +x /etc/keepalived/check_nginx.sh |
③ Masterノード設定(rocky9-1)
/etc/keepalived/keepalived.conf
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 101 advert_int 1 authentication { auth_type PASS auth_pass 1234 } virtual_ipaddress { 192.168.1.200 } track_script { chk_nginx } } |
Backup側(rocky9-2)は state BACKUP, priority 100 に変更
④ ファイアウォール設定
|
1 2 |
$ sudo firewall-cmd --permanent --add-protocol=vrrp $ sudo firewall-cmd --reload |
⑤ 起動・確認
|
1 2 |
$ sudo systemctl enable --now keepalived $ ip a show eth0 # VIPが付与されていることを確認 |
3. 運用・監視体制の準備(Next Steps)
| フェーズ | 導入VM | 目的 |
|---|---|---|
| OPNsense設定 | OPNsense | セキュリティ強化 ファイアウォール制御や侵入検知を有効化 |
| Zabbix構築 | ZabbixAppliance | KeepalivedのVIP状態やNginx稼働を監視 |
| 管理体制 | 全VM共通 | CLI中心で統合的に管理 |
4. 【おまけ】マイクラサーバーを即時切り替え!
Podmanの魅力は「基盤を変えずにサービスを差し替えられる」こと。
Nginxの代わりにMinecraftサーバーを立てる例:
# 1. 既存Nginxサービスを停止
|
1 |
$ sudo podman play kube --down nginx-web.yaml |
# 2. Minecraft Bedrockサーバー起動
|
1 2 3 4 5 6 |
$ sudo podman run -d --name mc-bedrock \ -p 19132:19132/udp \ -v /srv/podman/minecraft:/data:Z \ -e EULA=TRUE \ -e SERVER_NAME=Lab-Bedrock \ docker.io/itzg/minecraft-bedrock-server:latest |
クライアントが VIP(192.168.1.200)に接続すると、
ブラウザではなく Minecraft 統合版サーバーが応答します。
環境を変えずに用途を即時切り替える──これがモダンインフラの柔軟性です。
まとめ
・古いPCでも Rocky Linux + KVM + Podman で実戦的な冗長構成が再現可能
・K8s互換YAMLにより、将来的なクラウド・Kubernetes移行も容易
・Keepalivedで単一VIPの高可用性を実現
・同じ基盤上でマイクラなど別サービスへ即切替可能
💡 学習ラボが「ただの検証環境」から「本番運用を意識した統合基盤」へと進化する瞬間を体験できます。











