Container Linux

出典: フリー百科事典『ウィキペディア(Wikipedia)』
ナビゲーションに移動 検索に移動
Container Linux
Container Linux logo
開発者 Red Hat
OSの系統 Linux (based on Gentoo Linux)
開発状況 In development
ソースモデル Open source
初版 2013年10月3日(6年前) (2013-10-03[1]
最新安定版 1967.6.0[2] / 2019年2月12日(16か月前) (2019-02-12
最新開発版 2051.0.0[3] / 2019年2月11日(17か月前) (2019-02-11
対象市場 Servers and clusters
プラットフォーム x86-64[4]
カーネル種別 Monolithic (Linux kernel)
ライセンス Apache License 2.0[5][6]
ウェブサイト coreos.com/os/docs/latest/
テンプレートを表示

Container Linux(旧称:CoreOS Linux)は、 Linuxカーネルをベースにしたオープンソースの軽量なオペレーティングシステムである。クラスター向けのデプロイにインフラストラクチャを提供するために開発されており、自動化、アプリケーションのデプロイの容易さ、セキュリティ、信頼性、スケーラビリティに重点を置いて設計されている。オペレーティングシステムとしては、Container Linuxは、ソフトウェアコンテナ英語版内のアプリケーションのデプロイに必要な最小限の機能のみを提供するが、同時に、サービス・ディスカバリーや設定を共有するためのビルトインのメカニズムも備えている[7][8][9][10]

Container Linuxは、Gentoo Linux[11][12]Chrome OSChromium OSと共通のSDKを利用しており、これらのオペレーティングシステムとソフトウェアの基盤を共有している。さらに、この共通基盤に新しい機能とカスタマイズを加えることで、サーバー向けのハードウェアやユースケースをサポートしている[9][13]:7:02。2015年1月 (2015-01)現在、CoreOSは主にAlex Polvi、Brandon Philips、Michael Marineauによって積極的に開発されており、主要機能は安定版リリースとして利用できる[14][15][16]

概要[編集]

Container Linuxは、ペイロードとなるアプリケーションを配布する方法としてパッケージマネージャーを提供せず、その代わりに、すべてのアプリケーションをコンテナー内で実行する必要がある。一つの制御ホストとして機能するContainer Linuxインスタンスは、そのベースとしてLinuxカーネルのOSレベル仮想化英語版の機能を使用することで、隔離されたLinuxシステムとして動作する複数のコンテナを作成・設定する。このようにして、Container Linuxでは、ハイパーバイザーや本格的な仮想マシンを提供するのではなく、複数の隔離されたユーザー空間英語版のインスタンスを用いることにより、コンテナ間のリソース英語版のパーティション分割を実現している。このアプローチはLinuxカーネルのcgroupsおよびnamespaces英語版の機能に依存しており[17][18]、これらの機能は、ユーザー空間のプロセスに対して、リソース使用量(CPU、メモリ、ディスクI/Oなど)を制限、集計、隔離する機能を提供している[8][10][19]

当初、Container Linuxは、Dockerのみをコンポーネントとして使用して、抽象化とインターフェイスの追加レイヤをLinuxカーネルのOSレベル仮想化機能に提供し[20]、異なる環境上でアプリケーションを実行可能にするコンテナ向けの標準化フォーマットを提供していた[8][19]。2014年12月、CoreOSは、rkt(当初はRocketという名前だった)を公開し、サポートを開始した。これは、アプリケーションコンテナイメージの別の標準フォーマットであり、関連するコンテナのランタイム環境の定義、コンテナイメージの検索と取得のためのプロトコルとして、Dockerの代替となるものである[21][22][23][24]。CoreOSは、アプリケーションコンテナイメージ(application container image、ACI)に必要とされる属性を説明する、いわゆるアプリコンテナ(app container、appc)の仕様を定める実装としてrktを提供している。2015年6月、CoreOSは、appcとACIを独立した委員会の主導で定める仕様として提供し[25][26]、特定のベンダー・OSに依存しないコンテナ化標準のイニシアティブのOpen Container Initiative(OCI、当初はOpen Container ProjectまたはOCPと呼ばれていた[27])の一部とすることを発表した[28][29][30]

Container Linuxは、Gentoo Linuxのebuildスクリプトを使用してシステムコンポーネントの自動コンパイルを行い[11][12]systemdをメインのinitシステムとして使用し、systemdと各種Container Linuxの内部メカニズムを密接に統合してさせている[8][31]

アップデートの配布[編集]

Container Linuxは、FastPatchと呼ばれるデュアルパーティションの枠組みを活用することにより、OSのアップデート時にも追加のセキュリティと信頼性を実現している。FastPatchでは、アップデートはシステム全体に対して実行され、初めにパッシブなセカンダリーのブートパーティションにインストールされ、再起動またはkexecの実行時に有効化されるようになっている。このアプローチにより、OSの特定の一部分のみがアップデートされることにより起こりうる問題を回避することができ、OSの安定であることが分かっているバージョンに簡単にロールバックできることが保証され、追加のセキュリティのためにブートパーティションごとに署名を行うことができるようになる[8][10][32]。ルートパーティションとルートファイルシステムは自動的に利用可能なディスクサイズまでサイズ変更される。ルートパーティションは読み書き可能なストレージ空間を提供するが、OS自体は/usr/usrに読み込み専用でマウント英語版される[33][34][35]

アップデート適用時に一度にクラスタの一部のみが再起動することを保証し、デプロイされた実行中のアプリケーションがリソースを要求するのを防ぐために、CoreOSはContainer Linux向けにlocksmithと呼ばれる再起動マネージャを提供している[36]。locksmithを利用すると、アップデートの最終ステップで再起動する際に、異なるアップデート戦略の中から1つを選ぶことができる。たとえば、同時に再起動できるクラスタのメンバー数を指定できる。内部では、locksmithはクラスタのメンバー上でlocksmithdデーモンを起動しており、locksmithctlコマンドラインユーティリティマネージャでパラメータを設定できる[37][38]。LocksmithはGo言語で書かれており、Apache License 2.0ライセンスで配布されている[39]

で使用しているディストリビューションシステムのアップデートは、GoogleのオープンスースOmahaプロジェクトをベースとしている。Omahaは、ローリングアップデートのメカニズムを提供しており、XMLがベースのリクエスト・レスポンス英語版プロトコルがベースになっている[4][40][41]。また、CoreOSは、クラスタ全体のアップデートを管理するためのCoreUpdateというウェブベースのダッシュボードも提供している。CoreUpdateで利用可能な操作には、カスタムのアップデートポリシーを共有する異なるグループにユーザーを所属させる機能や、クラスタ全体のContainer Linuxのバージョンを確認する機能、アップデートの停止と再開、アップデートログの記録の確認機能などがある。CoreUpdateはHTTPベースのAPIも提供しており、サードパーティのユーティリティやデプロイシステム英語版と統合することができる[32][42][43]

クラスタ・インフラストラクチャ[編集]

CoreOSのクラスターアーキテクチャの概要図[44]

Container Linuxは、クラスタ内のすべてのコンピュータ上で動作し、動的な設定レジストリとして、etcdを提供している。これにより、様々な設定データを簡単かつ信頼性の高い方法でクラスタメンバー間で共有できる[4][33]

etcdに保存されたキーバリューデータは、Raftアルゴリズムを用いて自動的なマスター選出コンセンサスが確立され、自動的に分散複製が行われるため、保存されたデータのすべての変更がクラスタ全体に反映されるとともに、1つのクラスタメンバーが障害で失われても、データの損失が生じない冗長性が実現されている[24][45]。設定の管理に加えて、etcdは自身と自身が提供するサービスを通知することにより、サービスディスカバリの機能も提供している。etcdとの通信は、公開されたRESTベースのAPIにより行われ、内部ではHTTPプロトコル上のJSONが使用されている。APIは直接使用することもできるし(たとえば、curlwgetを使用して)、CoreOSが提供する専用のコマンドラインユーティリティのetcdctl経由で間接的に利用することもできる[8][10][46][47][48]etcdKubernetesのソフトウェアとしても利用されている。

Container Linuxは、2017年まで、fleetと呼ばれるクラスタマネージャも提供しており、Container Linuxの別のsystemdインスタンスをクラスタレベルで管理することができた。しかし、2017年2月7日、Kubernetesがクラスタマネージャのデファクトスタンダードとなっていることから、1年後の2018年2月1日にfleetを廃止することが発表された[49]fleetdを使用すると、Container Linuxは別々のsystemdインスタンスを結びつけて分散化されたinit systemを構築することができ、クラスタ全体にetcdをデプロイできる[45]。内部では、fleetdデーモンがローカルのsystemdインスタンスとD-Bus経由で通信しており、etcdのデプロイはsystemdの公開APIで行われる。fleetdにより、1つまたは複数のコンテナ英語版をクラスタ全体にデプロイすることが可能になり、さらに冗長化フェイルオーバー、特定のクラスタメンバーへのデプロイ、コンテナ間の依存関係の定義、コンテナのグループ化デプロイなどの発展的なオプションが利用できる。fleetctlと呼ばれるコマンドラインユーティリティを用いて、この分散initシステムを設定・監視することができる[50]。内部では、fleetdデーモンとの間でHTTP上のJSONベースのAPIを用いて通信を行っており、このAPIは直接利用することもできる。クラスタメンバーのローカルで使用した場合は、fleetctlはローカルのfleetdインスタンスとUnixドメインソケットで通信し、外部のホストからはSSHの公開鍵で認証されたSSHトンネリングが使われる[51][52][53][54][55]

これらすべてのデーモンとコマンドラインユーティリティ(etcdetcdctlfleetdfleetctl)は、Go言語で書かれており、Apache License 2.0ライセンスで配布されている[56]

デプロイ[編集]

専用のハードウェアで実行する場合には、Container Linuxはハードディスクドライブ(HDD)やソリッドステートドライブ(SSD)などのローカルディスクに永続的にインストールされる[57]。リモートでブートする場合には、Preboot Execution Environment (PXE) in general, or iPXEを使用してネットワーク越しにブート英語版される[58][59]。CoreOSはさまざまなハードウェア仮想化英語版プラットフォームをサポートしており、Amazon EC2DigitalOcean英語版Google Compute Engine英語版Microsoft AzureOpenStackQEMU/KVMVagrantVMwareに対応している[10][60][61][62] 。Container Linuxは、CoreOS向け「template」があるCitrix XenServerにもインストールできる。

Container Linuxは、Tectonicと呼ばれる商業ディストリビューションにデプロイすることもでき、追加コンポーネントとしてGoogleのKubernetesをクラスタ管理ユーティリティとして統合している。2015年4月 (2015-04)現在、Tectonicはベータ版として一部の顧客にのみ提供される予定である[25][63]。さらに、CoreOSは主にKubernetesとの統合のためのオーバーレイ・ネットワークを実装するコンポーネントとしてFlannelを提供している[64][65]

2015年2月 (2015-02)現在、Container Linuxはx86-64アーキテクチャのみをサポートしている[4]

派生[編集]

2018年1月、CoreOS, Inc.はRed Hatに買収され[66]、その後、Red HatはCoreOSのContainer LinuxをRed HatのProject Atomicと統合し、新しいOSであるRed Hat CoreOSを開発することを発表した[67]。Project Atomicには、Fedora ProjectのFedora CoreOSに関係するオープンソースコミュニティがあり、双方の技術を取り込んでいる。

2018年3月6日、Kinvolk GmbHはCoreOS Container Linuxの派生OSとして、Flatcar Linuxを発表した[68]。Flatcar Linuxは、アップストリームのCoreOS alpha/beta/stableチャンネルのリリースを追跡しており、2019年5月には、実験的なEdgeリリースチャンネルが追加された[69]

評価[編集]

2014年、LWN.netはCoreOSを以下のように評価している[70]

大規模な分散システム—主な例としてはウェブアプリケーション—を統合しようとしている人にとっては、CoreOSは興味深い機能を多数備えているように見えるだろう。これらの機能により、この種のアプリケーションで必要な需要に応じたスケールの拡大や縮小が可能になり、アップグレードが頭痛の種にならないような安定したプラットフォームを提供できるようになるはずだ。「大規模なサーバーのデプロイ」にとって、CoreOSや同じような特徴を持つOSは、未来を先取りしているように思える。

脚注[編集]

[脚注の使い方]
  1. ^ coreos/manifest: Release v94.0.0 (Container Linux v94.0.0)”. github.com (10 3, 2013). 9 22, 2014閲覧。
  2. ^ CoreOS Container Linux Release Notes # Stable channel”. coreos.com (2 12, 2019). 2 12, 2019閲覧。
  3. ^ CoreOS Container Linux Release Notes # Alpha channel”. coreos.com (2 11, 2019). 2 11, 2019閲覧。
  4. ^ a b c d Timothy Prickett Morgan (2 15, 2015). “CoreOS Hyperscales Linux By Making It Invisible”. nextplatform.com. 6 14, 2015閲覧。
  5. ^ CoreOS Pilot Agreement”. coreos.com (3 13, 2014). 2014年9月12日時点のオリジナルよりアーカイブ。3 26, 2014閲覧。
  6. ^ coreos/etcd: etcd/LICENSE at master”. github.com (7 31, 2013). 3 26, 2014閲覧。
  7. ^ CoreOS Linux is now Container Linux”. coreos.com. 20 12 2016閲覧。
  8. ^ a b c d e f Libby Clark (9 9, 2013). “Brandon Philips: How the CoreOS Linux Distro Uses Cgroups”. Linux.com. 2 13, 2014閲覧。
  9. ^ a b CoreOS – a new approach to Linux-based server systems”. itnews2day.com (8 22, 2013). 3 26, 2014閲覧。
  10. ^ a b c d e CoreOS documentation: Using CoreOS”. coreos.com. 2 13, 2014閲覧。
  11. ^ a b Building development images: Updating portage-stable ebuilds from Gentoo”. coreos.com. 5 24, 2016閲覧。
  12. ^ a b Distributions based on Gentoo”. gentoo.org (3 25, 2016). 5 24, 2016閲覧。
  13. ^ Brian Harrington (7 8, 2014). “CoreOS: Anatomy of a CoreOS update”. youtube.com. Rackspace. 7 25, 2014閲覧。
  14. ^ Alex Polvi (7 25, 2014). “CoreOS Stable Release”. coreos.com. 8 28, 2014閲覧。
  15. ^ CoreOS Release Notes”. coreos.com. 8 28, 2014閲覧。
  16. ^ Brandon Philips (1 28, 2015). “etcd 2.0 Release – First Major Stable Release”. coreos.com. 6 14, 2015閲覧。
  17. ^ Jonathan Corbet (10 29, 2007). “Notes from a container”. LWN.net. 7 3, 2016閲覧。
  18. ^ Jake Edge (11 19, 2014). “Control group namespaces”. LWN.net. 7 3, 2016閲覧。
  19. ^ a b CoreOS documentation: Using Docker with CoreOS”. coreos.com. 6 14, 2015閲覧。
  20. ^ Docker 0.9: Introducing execution drivers and libcontainer”. docker.com (3 10, 2014). 1 20, 2015閲覧。
  21. ^ Libby Clark (1 30, 2015). “CoreOS Co-Founder Alex Polvi Talks Containers, Rocket vs. Docker, and More”. Linux.com. 6 14, 2015閲覧。
  22. ^ Charles Babcock (2 20, 2015). “Rocket Containers: How CoreOS Plans To Challenge Docker”. informationweek.com. 6 14, 2015閲覧。
  23. ^ Alex Polvi (12 1, 2014). “CoreOS is building a container runtime, rkt”. coreos.com. 6 14, 2015閲覧。
  24. ^ a b Josh Berkus (2 4, 2015). “New etcd, appc, and Rocket releases from CoreOS”. LWN.net. 6 22, 2015閲覧。
  25. ^ a b Josh Berkus (5 13, 2015). “CoreOS Fest and the world of containers, part 1”. LWN.net. 6 22, 2015閲覧。
  26. ^ Nathan Willis (12 3, 2014). “The Rocket containerization system”. LWN.net. 6 22, 2015閲覧。
  27. ^ McAllister, Neil (2015年6月22日). “Docker and chums unveil standards org for software containers”. The Register. 2015-06-22. https://www.theregister.co.uk/2015/06/22/open_container_project/ 2017年1月19日閲覧. "Announced at the DockerCon conference in San Francisco on Monday, the Open Container Project (OCP) will maintain and develop a common container runtime and image format based in part on code and specs donated by Docker." 
  28. ^ Frederic Lardinois (6 22, 2015). “Docker, CoreOS, Google, Microsoft, Amazon and others come together to develop common container standard”. TechCrunch. https://techcrunch.com/2015/06/22/docker-coreos-google-microsoft-amazon-and-others-agree-to-develop-common-container-standard/ 6 24, 2015閲覧。 
  29. ^ Industry Leaders Unite to Create Project for Open Container Standards”. opencontainers.org (6 22, 2015). 2015年8月13日時点のオリジナルよりアーカイブ。6 24, 2015閲覧。
  30. ^ Neil McAllister (7 22, 2015). “Open Container Project renames, says standard is just weeks away: Linux Foundation, Docker and friends opt for Open Container Initiative”. The Register. 1 29, 2016閲覧。
  31. ^ CoreOS documentation: Using systemd with CoreOS”. coreos.com. 2014年2月14日時点のオリジナルよりアーカイブ。2 13, 2014閲覧。
  32. ^ a b CoreOS documentation: Updates & patches”. coreos.com. 2014年2月14日時点のオリジナルよりアーカイブ。2 27, 2015閲覧。
  33. ^ a b Phil Whelan (8 28, 2013). “Alex Polvi Explains CoreOS”. activestate.com. 2015年2月24日時点のオリジナルよりアーカイブ。5 7, 2015閲覧。
  34. ^ CoreOS documentation: Adding disk space to your CoreOS machine”. coreos.com. 2 27, 2015閲覧。
  35. ^ Alex Polvi (3 27, 2014). “Major Update: btrfs, Docker 0.9, add users, writable /etc, and more!”. coreos.com. 2 27, 2015閲覧。
  36. ^ Simple Introduction to CoreOS with CEO Alex Polvi and CTO Brandon Philips”. centurylinklabs.com (6 6, 2014). 6 22, 2015閲覧。
  37. ^ CoreOS documentation: Update strategies”. coreos.com. 4 17, 2015閲覧。
  38. ^ coreos/locksmith: locksmith/README.md at master”. github.com (2 1, 2015). 4 17, 2015閲覧。
  39. ^ coreos/locksmith: locksmith/LICENSE at master”. github.com (1 19, 2014). 4 17, 2015閲覧。
  40. ^ Omaha – software installer and auto-updater for Windows”. code.google.com. 10 11, 2014閲覧。
  41. ^ Omaha Overview”. omaha.googlecode.com (9 23, 2009). 2009年5月6日時点のオリジナルよりアーカイブ。10 11, 2014閲覧。
  42. ^ Package omaha”. godoc.org (6 24, 2014). 7 4, 2014閲覧。
  43. ^ CoreOS documentation: CoreUpdate”. coreos.com. 7 4, 2014閲覧。
  44. ^ Mark Moudy (5 16, 2014). “CoreOS + Docker Development Environment Demo”. github.com. 4 16, 2015閲覧。
  45. ^ a b Jonathan Corbet (10 22, 2014). “Etcd and fleet”. LWN.net. 6 22, 2015閲覧。
  46. ^ CoreOS documentation: Using etcd with CoreOS”. coreos.com. 2 13, 2014閲覧。
  47. ^ CoreOS documentation: Getting started with etcd”. coreos.com. 2 13, 2014閲覧。
  48. ^ Brandon Philips (1 15, 2014). “etcd @ GoSF”. speakerdeck.com. 2 13, 2014閲覧。
  49. ^ Wood. “Container orchestration: Moving from fleet to Kubernetes”. coreos..com. CoreOS. 2019年11月11日閲覧。
  50. ^ Justin Ellingwood (9 12, 2014). “How To Use Fleet and Fleetctl to Manage your CoreOS Cluster”. digitalocean.com. 6 22, 2015閲覧。
  51. ^ CoreOS documentation: Launching containers with fleet”. coreos.com. 4 3, 2014閲覧。
  52. ^ CoreOS documentation: Using the client”. coreos.com. 4 3, 2014閲覧。
  53. ^ coreos/fleet: fleet/README.md at master”. github.com (2 18, 2014). 4 3, 2014閲覧。
  54. ^ coreos/fleet: fleet/Documentation/deployment-and-configuration.md at master (Deploying fleet)”. github.com (4 14, 2015). 4 17, 2015閲覧。
  55. ^ coreos/fleet: fleet/Documentation/api-v1.md (fleet API v1)”. github.com (10 29, 2014). 4 17, 2015閲覧。
  56. ^ coreos/fleet: fleet/LICENSE at master”. github.com (2 6, 2014). 4 3, 2014閲覧。
  57. ^ CoreOS documentation: Installing CoreOS to disk”. coreos.com. 2 13, 2014閲覧。
  58. ^ CoreOS documentation: Booting CoreOS via PXE”. coreos.com. 2 13, 2014閲覧。
  59. ^ CoreOS documentation: Booting CoreOS via iPXE”. coreos.com. 2 13, 2014閲覧。
  60. ^ Alex Crawford (9 5, 2014). “CoreOS Image Now Available On DigitalOcean”. coreos.com. 9 5, 2014閲覧。
  61. ^ Jack Clark (5 23, 2014). “Google brings futuristic Linux software CoreOS onto its cloud”. The Register. 5 26, 2014閲覧。
  62. ^ Alex Crawford (10 20, 2014). “CoreOS Now Available On Microsoft Azure”. coreos.com. 10 22, 2014閲覧。
  63. ^ Steven J. Vaughan-Nichols (4 6, 2015). “CoreOS is bringing Google's Kubernetes to the enterprise”. ZDNet. http://www.zdnet.com/article/coreos-is-bringing-googles-kubernetes-to-the-enterprise/ 4 29, 2015閲覧。 
  64. ^ Eugene Yakubovich (8 28, 2014). “Introducing flannel: An etcd-backed overlay network for containers”. coreos.com. 6 22, 2015閲覧。
  65. ^ Tutorial on using CoreOS Flannel for Docker”. slideshare.net (2014年11月). 6 22, 2015閲覧。
  66. ^ Rosoff (2018年1月30日). “Red Hat pays $250 million for CoreOS, a start-up that sells Google-developed technology” (英語). CNBC. 2019年6月6日閲覧。
  67. ^ Fedora CoreOS, Red Hat CoreOS, and the future of Container Linux | CoreOS”. coreos.com. 2019年6月6日閲覧。
  68. ^ Announcing the Flatcar Linux project | Kinvolk”. kinvolk.io. 2019年6月6日閲覧。
  69. ^ Introducing the Flatcar Linux Edge Channel | Kinvolk”. kinvolk.io. 2019年6月6日閲覧。
  70. ^ CoreOS: A different kind of Linux distribution [LWN.net]

関連項目[編集]

  • アプリケーションの仮想化 – アプリケーションソフトウェアを実行するOSに対してカプセル化するソフトウェア技術
  • アプリケーション仮想化ソフトウェアの比較英語版 – さまざまなポータブル言語とスクリプト言語の仮想マシンの比較
  • プラットフォーム仮想化ソフトウェアの比較英語版 – 物理コンピューター全体をエミュレートする、ざまなエミュレーターやハイパーバイザーの比較
  • LXC(Linuxコンテナー) – Linuxが制御する1つのホスト上で、複数の隔離されたLinuxシステム(コンテナ)を実行するための環境
  • OSレベル仮想化英語版 – 複数の隔離されたユーザー空間インスタンスに対するOSカーネルのサポートに基づいている
  • Software as a service(SaaS) – ソフトウェアを中央でホストしてサブスクリプションベースでライセンスを供与するタイプのソフトウェアのライセンスと配信のモデル
  • 仮想化 – コンピュータハードウェアプラットフォーム、オペレーティングシステム、ストレージデバイスなどの仮想バージョンを提供する一般的な概念

外部リンク[編集]