Container Linux (旧 CoreOS Linux) について
Container
Linuxは、
Linuxカーネルをベースにしたオープンソースの軽量
オペレーティングシステムで、特にクラスター環境での利用を想定して開発されました。その設計思想は、自動化、アプリケーションのデプロイの容易さ、セキュリティ、信頼性、そして
スケーラビリティに重点を置いています。
オペレーティングシステムとしての役割は、ソフトウェアコンテナ内でアプリケーションをデプロイするのに必要最低限の機能のみを提供することにあります。同時に、
サービスディスカバリーや設定共有のための組み込みメカニズムも備えています。Container
Linuxは、従来のパッケージマネージャーを使用せず、すべてのアプリケーションをコンテナ内で実行することを前提としています。
Container
Linuxのインスタンスは、
LinuxカーネルのOSレベル
仮想化機能を活用し、単一の制御ホストとして動作します。これにより、複数の隔離された
Linuxシステム(コンテナ)を作成・設定できます。これは、
ハイパーバイザーや本格的な仮想マシンを用いるのではなく、隔離されたユーザー空間のインスタンスを利用することで、コンテナ間のリソース分割を実現するアプローチです。
このシステムは、
Linuxカーネルのcgroupsとnamespaces機能に依存しており、これらの機能によって、ユーザー空間
プロセスに対する
CPU、メモリ、ディスクI/Oなどのリソース使用量の制限、集計、隔離を実現しています。
当初、Container
Linuxは
Dockerを主要なコンポーネントとして利用し、
LinuxカーネルのOSレベル
仮想化機能の上に抽象化とインターフェースの層を追加していました。しかし、2014年12月には、CoreOSがrkt(当初はRocketという名前)を公開し、サポートを開始しました。rktは、アプリケーションコンテナイメージの代替標準フォーマットであり、コンテナのランタイム環境の定義やコンテナイメージの検索・取得プロトコルを提供します。CoreOSは、アプリケーションコンテナイメージ(ACI)の必要な属性を定義するappc仕様を実装するツールとしてrktを提供しました。2015年6月には、appcとACIをOpen Container
Initiative(OCI)の一部とし、特定のベンダーやOSに依存しないコンテナ化標準を策定するイニシアチブに参加しました。
システムの内部構造
Container
Linuxは、Gentoo
Linuxのebuildスクリプトを使用してシステムコンポーネントを自動コンパイルし、systemdをメインのinitシステムとして利用しています。systemdとContainer
Linuxの内部メカニズムを密接に統合することにより、システムの効率的な管理を実現しています。
アップデートの仕組み
Container
Linuxは、FastPatchと呼ばれるデュアル
パーティションの仕組みを採用し、OSアップデート時のセキュリティと信頼性を高めています。FastPatchでは、アップデートは最初にパッシブなセカンダリーブート
パーティションにインストールされ、
再起動またはkexec実行時に有効化されます。このアプローチにより、アップデートの失敗によるシステム障害のリスクを減らし、安定版OSへのロールバックを容易にします。ブート
パーティションは署名されており、セキュリティが強化されています。ルート
パーティションとルートファイルシステムは、利用可能なディスクサイズに応じて自動的にサイズ変更されます。ルート
パーティションは読み書き可能なストレージを提供しますが、OS自体は/usrに読み込み専用でマウントされます。
アップデート時の
再起動を制御するために、CoreOSはlocksmithと呼ばれる
再起動マネージャーを提供しています。locksmithを使うと、クラスタの一部だけを
再起動させることができます。これにより、アプリケーションがリソースを要求するのを防ぎ、異なるアップデート戦略を選択できます。locksmithはGo言語で開発されており、
Apache License 2.0で配布されています。また、ディストリビューションシステムのアップデートは、
GoogleのオープンソースOmahaプロジェクトをベースとしています。Omahaはローリングアップデートのメカニズムを提供しており、CoreOSはクラスタ全体のアップデートを管理するためのウェブベースのダッシュボードであるCoreUpdateを提供しています。
クラスタインフラストラクチャ
Container
Linuxは、クラスタ内のすべてのコンピュータ上で動作し、etcdを動的な設定レジストリとして提供しています。etcdは、クラスタメンバー間で設定データを共有するための信頼性の高い方法を提供します。etcdに保存されたデータは、Raftアルゴリズムを用いて自動的なマスター選出とコンセンサスが確立され、自動的に分散、複製されます。これにより、単一のクラスタメンバーが障害を起こしてもデータの損失を防ぎます。また、etcdは
サービスディスカバリ機能も提供しています。
2017年まで、Container
Linuxはfleetと呼ばれるクラスタマネージャーも提供しており、systemdのインスタンスをクラスタレベルで管理することができました。しかし、
Kubernetesが事実上のクラスタマネージャーとなったため、fleetは2018年2月1日に廃止されました。これらのデーモンとコマンドラインユーティリティはすべてGo言語で書かれており、
Apache License 2.0ライセンスで配布されています。
デプロイ
Container
Linuxは、ローカルディスクにインストールしたり、PXEやiPXEを使用してネットワーク経由で起動したりできます。Amazon EC2、DigitalOcean、
Google Compute Engine、
Microsoft Azure、
OpenStack、
QEMU/KVM、Vagrant、
VMwareなど、多くの
仮想化プラットフォームをサポートしています。Container
Linuxは、Tectonicと呼ばれる商用ディストリビューションにもデプロイでき、
Kubernetesが統合されています。また、CoreOSはFlannelを提供しており、
Kubernetesと統合するためのオーバーレイネットワークを実装するコンポーネントとして機能します。
歴史と現状
2018年1月に、CoreOS, Inc.は
レッドハットに買収されました。その後、Container
LinuxはFedora Atomic Hostと統合され、Fedora CoreOSとなりました。Container
Linuxは、2020年5月26日にEOLを迎え、関連リソースは削除または読み取り専用となっています。現在では、Fedora CoreOSが公式の後継として推奨されています。
また、2018年3月6日には、Kinvolk GmbHがCoreOS Container
Linuxの派生OSであるFlatcar
Linuxを発表しました。