Butaneをマスターする:Fedora CoreOSをYAMLからIgnitionへ、DevOps標準で構成する方法

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

なぜFedora CoreOSの設定に戸惑う人が多いのか?

USBメモリを差し込み、手動でパーティションを分割し、SSHでログインして/etc/fstabを編集するといった「伝統的」なサーバー構築に慣れているなら、Fedora CoreOS (FCOS) は衝撃的かもしれません。このOSにはグラフィカルなインストーラーが存在しません。何百、何千ものノード規模でのコンテナ運用と自動化のために設計されているからです。

FCOSの核となるのは**Ignition**ファイルです。これは初回起動時のすべての構成指示を含むJSONファイルです。しかし、信じてください、JSONを直接手書きしてはいけません。カンマが一つ多かったり、括弧が一つ足りないだけで、起動時にサーバーがフリーズしてしまいます。そこで、私たちの正気を保つために登場するのが**Butane**です。

ButaneとIgnition:切り離せない名コンビ

スムーズなデプロイのために、これら2つのツールの役割を明確に区別しましょう。

  • Ignition: 非常に早い段階のinitramfsフェーズで実行されます。JSONを読み取ってパーティション分割、ディスクフォーマット、ユーザー作成を行います。初回起動時に一度だけ実行されます。
  • Butane: トランスレーター(翻訳機)です。非常に読みやすいYAML(.buファイル)で設定を記述し、Ignitionが理解できるJSONにコンパイルするのを助けます。

200行の複雑なJSONと格闘する代わりに、数十行のクリーンなYAMLを管理するだけで済みます。

30秒でButaneをインストールする

Fedoraでは、DNFを使用して非常に簡単にインストールできます。

sudo dnf install butane

他のディストリビューションを使用している場合は、ホスト環境を汚さないようにPodman経由でButaneを実行するのがおすすめです。これは私がよく使う方法です:

podman run --rm -v .:/pwd -w /pwd quay.io/coreos/butane:release --strict config.bu > config.ign

実践:最初の設定ファイルを作成する

devopsユーザーを作成し、SSHキーを追加して、PodmanでNginxを自動実行するFCOSノードを構築してみましょう。以下の内容でconfig.buファイルを作成します:

1. 基本情報の宣言

variant: fcos
version: 1.5.0
passwd:
  users:
    - name: devops
      ssh_authorized_keys:
        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... user@machine
      groups: [sudo, wheel]

注意:variantversionは必須です。これらが欠けていると、Butaneはすぐにエラーを出力します。

2. Systemdによるサービスの自動化

FCOSには通常のディストリビューションのようにNginxがプリインストールされていません。システム起動時に自動的にイメージをプルしてコンテナを実行するように指示します:

systemd:
  units:
    - name: nginx-container.service
      enabled: true
      contents: |
        [Unit]
        Description=Podmanを使用してNginxコンテナを実行
        After=network-online.target
        Wants=network-online.target

        [Service]
        ExecStartPre=-/usr/bin/podman kill nginx
        ExecStartPre=-/usr/bin/podman rm nginx
        ExecStartPre=/usr/bin/podman pull nginx:latest
        ExecStart=/usr/bin/podman run --name nginx -p 80:80 nginx:latest
        ExecStop=/usr/bin/podman stop nginx

        [Install]
        WantedBy=multi-user.target

3. システムファイルの上書き

ホスト名の変更やウェルカムメッセージ(MOTD)の作成が必要ですか?Butaneなら非常にスマートに処理できます:

storage:
  files:
    - path: /etc/hostname
      mode: 0644
      contents:
        inline: fcos-node-01
    - path: /etc/motd
      mode: 0644
      contents:
        inline: "Butaneによって管理されているFCOSノードへようこそ!\n"

Ignitionへのコンパイル

YAMLファイルが完成したら、次のコマンドを使用してJSONファイルを出力します。構文エラーを厳密にチェックするために、常に--strictフラグを使用するようにしています:

butane --pretty --strict config.bu > config.ign

このconfig.ignファイルこそが、AWS、Proxmox、またはVMwareで仮想マシンを作成する際に「User Data」セクションに投入するものです。

実践デプロイにおける重要なヒント

FCOSサーバークラスターをいくつかデプロイした経験から、3つの黄金律を導き出しました:

  • SSHキーを忘れるのは「致命的」: FCOSはデフォルトでユーザーパスワードを完全にロックしています。キーがないということは、サーバーから永久に締め出されることを意味します。その場合はインスタンスを削除して作り直すしかありません。
  • 空白文字に注意: YAMLはインデント(字下げ)に非常に敏感です。Butaneがコンパイルできないような初歩的なミスを避けるために、VS Codeের YAML拡張機能を使用しましょう。
  • 常にローカルで先にテストする: いきなりクラウドにデプロイしてお金を無駄にしないでください。個人のマシンでqemuやvirt-installを使用して、Ignitionファイルがスムーズに起動するか確認しましょう。

終わりに

Butaneは単なる変換ツールではありません。Infrastructure as Code (IaC) の考え方をより身近にする架け橋です。無機質なJSON構造を覚える代わりに、サーバーのあるべき状態の定義に集中できます。Fedora CoreOSの世界に足を踏み入れるなら、Butaneは習得必須のスキルと言えるでしょう。

Share: