なぜFedora CoreOSはコンテナにとって「完璧なピース」なのか?
ISOファイルをダウンロードして、パーティション分割やユーザー作成のために何度も「次へ」をクリックするのを待つのはもう終わりにしましょう。数台のサーバーを管理するだけならその方法でも問題ありませんが、数十、数百のコンテナノードを扱うとなると、別の考え方が必要になります。それが「イミュータブル・インフラストラクチャ(不変のインフラ)」という考え方です。
Fedora CoreOS (FCOS) は、まさにこの課題を解決するために生まれました。FedoraをメインPCとして2年間使用して分かったのは、FCOSは決して万能なOSではないということです。むしろ、極限まで削ぎ落とされています。SSHでログインして設定ファイルを手動で編集するべきではありません。その代わりに、ユーザー、ネットワーク、systemdユニットのすべてを事前に定義し、初回の起動時から自動的に実行させます。
最大の魅力はIgnitionです。OS起動後に実行されるCloud-initとは異なり、Ignitionはinitramfsの段階で介入します。これにより、他のプロセスが実行される前にディスクのフォーマットやファイルシステムのセットアップを行うことができます。もし設定に誤りがあれば、システムは即座に停止します。これにより、潜在的な設定ミスによってサーバーが不安定な状態で動作し続けるのを防ぐことができます。
ツールの準備:YAMLからJSONへ
Ignitionの設定ファイルをJSONで直接記述するのは、構文エラーが起きやすく「苦行」と言えるでしょう。より快適に作業するために、Butaneを使用します。このツールを使うと、読みやすいYAML形式で設定を記述し、それをIgnition用のJSONに変換(コンパイル)できます。
Fedoraでは、次のコマンド1つでButaneをインストールできます:
sudo dnf install butane
他のOSを使用している場合は、コンテナの力を活用しましょう:
alias butane='podman run --rm -v ".:/pwd":z --workdir /pwd quay.io/coreos/butane:release'
ButaneとIgnitionの設定を実践する
実際のシナリオを試してみましょう。ユーザーitfromzeroを作成し、SSHキーを登録し、起動時にNginxコンテナを自動的に実行する設定を作成します。
1. Butane設定ファイル(.bu)の作成
config.buファイルを作成します。後でアクセスできるように、SSHキーの部分は必ず自身のものに置き換えてください:
variant: fcos
version: 1.5.0
passwd:
users:
- name: itfromzero
groups:
- sudo
- wheel
ssh_authorized_keys:
- ssh-ed25519 AAAAC3Nza... user@hostname
systemd:
units:
- name: hello-world.service
enabled: true
contents: |
[Unit]
Description=Nginxコンテナを自動実行
After=network-online.target
Wants=network-online.target
[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/podman kill nginx-server
ExecStartPre=-/usr/bin/podman rm nginx-server
ExecStartPre=/usr/bin/podman pull nginx:latest
ExecStart=/usr/bin/podman run --name nginx-server -p 8080:80 nginx
[Install]
WantedBy=multi-user.target
storage:
files:
- path: /etc/hostname
mode: 0644
contents:
inline: fcos-lab-01
この構造には3つの重要なセクションがあります。passwdはアイデンティティを管理し、セキュリティ向上のためにパスワードの使用を排除します。systemdはPodmanを介してコンテナのライフサイクルを管理します。最後に、storageはホスト名の設定など、システムファイルへの直接的な介入を可能にします。
2. Ignitionファイル(.ign)への変換
それでは、YAMLファイルをマシンが理解できる形式に変換しましょう:
butane --pretty --strict config.bu > config.ign
注意:.ignファイルを手動で編集してはいけません。一貫性を保つため、すべての変更はButaneファイル上で行うようにしてください。
デプロイと成果の確認
クラウドを契約せずに素早くテストするには、ローカルマシンのqemuを使用できます。まず、FCOSのディスクイメージをダウンロードします:
coreos-installer download -f qemu
xz -d fedora-coreos-*.qemu.qcow2.xz
仮想マシンを起動し、-fw_cfgパラメータを介して設定を読み込ませます:
qemu-system-x86_64 -m 2048 -cpus 2 \
-drive if=virtio,file=fedora-coreos-qemu.qcow2 \
-fw_cfg name=opt/com.coreos/config,file=config.ign \
-net nic,model=virtio -net user,hostfwd=tcp::2222-:22,hostfwd=tcp::8080-:8080
起動には10〜15秒ほどしかかかりません。それでは、SSHでログインして確認してみましょう:
ssh -p 2222 itfromzero@localhost
ログイン後、podman psコマンドを使用してNginxコンテナが起動しているか確認します。FCOSの大きな利点の1つはZincatiです。このサービスはバックグラウンドでOSを自動更新します。もしアップデートに失敗しても、システムは自動的に直近の安定した状態にロールバックされます。
もし設定が期待通りに動作しなくても、慌てる必要はありません。次のコマンドで詳細なログを確認してください:
journalctl -u ignition-firstboot-complete
このアプローチを採用することで、手動でのサーバーセットアップ時間を最大80%削減できます。各ノードを個別に操作する代わりに、Gitで設定ファイルを管理するだけで済みます。DevOpsのキャリアを始めたばかりの方にとって、Ignitionをマスターすることは、将来的にKubernetesを使いこなすための強固な足がかりとなるでしょう。

