はじめに
この記事はLinux Advent Calendar 2017の8日目の記事です。
CoreOS社の提供するコンテナを稼働させることに特化したOSである、CoreOS Container Linux(以下CoreOS)というLinuxディストリビューションをベアメタル環境にプロビジョンしようとしたのですが、従来のプロビジョン方法より登場人物が色々増えた上に、なんか公式ドキュメントも散らばってて、どういうことだってばよ??と10回くらいなったので、その全体像について簡単にまとめます。
CoreOSインストールの全体像
ざっくり箇条書きで説明します。
- CoreOSは以前プロビジョンツールにcloud-configを使っていました
- 最近ではIgnitionというCoreOSのプロビジョン用に開発されたツールを利用します
- Ignitionとは
- Redhat系LinuxにおけるKickstartに近い立ち位置のプロビジョンツールです
- キッティングなどの初回起動時に有効になって一度のみプロビジョン設定を反映します
- ブートプロセスのかなり早い段階(initプロセスの起動前)で動作します
- プロビジョン設定はパースが容易なJSON形式の設定を受け付けます
- しかしJSON形式はプログラムでのパースは容易だが人間が記述するにはツラい形式ですよね
- 実際にはIgnitionの設定はContainer linux config(以下cl)というyaml形式で記述できます
- clで書いたyamlを専用のトランスパイラでJSONに変換してIgnitionに渡す流れになります
- JSON形式でもYAML形式でもバリデータで文法チェックができます
- 話は変わってベアメタル環境では通常ネットワークインストールにPXE(or iPXE)を使います
- PXEインストールを実現するには通常以下のようなコンポーネントが必要です
- TFTP、DHCP、内部DNSの機能を提供するサーバ(PXEサーバとして大体セット)
- プロビジョン設定を提供するHTTPサーバ(RHELの場合はkickstartファイルを提供)
- CoreOSではプロビジョン設定を提供するHTTPサーバにMatchboxという専用のサーバが用意されています
- Matchboxとは
- ネットワークブートするサーバのMACやUUIDに応じて渡すclファイルをルーティングできます
- ルーティングだけでなくサーバ種別に応じたメタデータを定義することができます
- clをファイルをgoのテンプレート形式で配置できメタデータを元にレンダリングすることができます
- レンダリングされたclファイルはignition形式にトランスパイルされてブートサーバに渡されます
- 上記の各種設定をTeraffomにより定義することができます
箇条書きが過剰になったので、最終的にネットワークブートに必要なことをまとめます。
- CoreOSのベアメタルインストールには従来のPXEに加えMatchboxというサーバを用意する必要があります
- このMatchboxの各種設定はTerraformでデプロイします
- Terrafomでデプロイするプロビジョン設定の大部分はgoのテンプレート形式のclファイル(yaml)です
- clファイルは最終的にJSONに変換されてCoreOSに渡りますが変換はMatchboxが勝手にやるので意識は不要です
おわりに
以上ざっくりですが、CoreOSのベアメタルへのプロビジョンに必要な要素のまとめでした。
実際の環境構築やらプロビジョンについてはMatchBoxを使ってCoreOS Container Linuxをベアメタルにプロビジョンするに記載していますので、興味がでたらそっちも見ていただければなと思います。
また、Matchboxについてですが、以下の資料が見やすく参考にさせて頂きました。
(というか以下のスライドみれば大体万事解決)
36ページくらいからがMatchboxの説明です
https://www.slideshare.net/zembutsu/terraform-on-bare-metal-with-tectonic