Container Linux

Container Linux (旧 CoreOS Linux) について



Container Linuxは、Linuxカーネルをベースにしたオープンソースの軽量オペレーティングシステムで、特にクラスター環境での利用を想定して開発されました。その設計思想は、自動化、アプリケーションのデプロイの容易さ、セキュリティ、信頼性、そしてスケーラビリティに重点を置いています。

オペレーティングシステムとしての役割は、ソフトウェアコンテナ内でアプリケーションをデプロイするのに必要最低限の機能のみを提供することにあります。同時に、サービスディスカバリーや設定共有のための組み込みメカニズムも備えています。Container Linuxは、従来のパッケージマネージャーを使用せず、すべてのアプリケーションをコンテナ内で実行することを前提としています。

Container Linuxのインスタンスは、LinuxカーネルのOSレベル仮想化機能を活用し、単一の制御ホストとして動作します。これにより、複数の隔離されたLinuxシステム(コンテナ)を作成・設定できます。これは、ハイパーバイザーや本格的な仮想マシンを用いるのではなく、隔離されたユーザー空間のインスタンスを利用することで、コンテナ間のリソース分割を実現するアプローチです。

このシステムは、Linuxカーネルのcgroupsとnamespaces機能に依存しており、これらの機能によって、ユーザー空間プロセスに対するCPU、メモリ、ディスクI/Oなどのリソース使用量の制限、集計、隔離を実現しています。

当初、Container LinuxDockerを主要なコンポーネントとして利用し、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 AzureOpenStackQEMU/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を発表しました。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。