CoreOSシステムコンポーネントの概要
ステータス:期限切れ
この記事は最新ではありません。 この記事の更新を書くことに興味がある場合は、DigitalOceanが技術チュートリアルを公開したいのをご覧ください。
理由: 2016年12月22日、CoreOSはフリートを維持しなくなったことを発表しました。 CoreOSは、すべてのクラスタリングのニーズにKubernetesを使用することをお勧めします。
代わりに参照してください:フリートなしでCoreOSでKubernetesを使用するガイダンスについては、CoreOSドキュメントのKubernetesを参照してください。
CoreOSとは何ですか?
CoreOSは、さまざまなインフラストラクチャでの大規模でスケーラブルな展開を管理しやすくするために構築された強力なLinuxディストリビューションです。 CoreOSは、Chrome OSのビルドに基づいて、軽量のホストシステムを維持し、すべてのアプリケーションにDockerコンテナを使用します。 このシステムは、プロセスの分離を提供し、アプリケーションをクラスター全体で簡単に移動できるようにします。
これらのクラスターを管理するために、CoreOSはetcd
と呼ばれるグローバルに分散されたKey-Valueストアを使用して、ノード間で構成データを渡します。 このコンポーネントは、サービスディスカバリのプラットフォームでもあり、共有リソースを通じて利用可能な情報に基づいてアプリケーションを動的に構成できます。
クラスタ全体でアプリケーションをスケジュールおよび管理するために、fleet
と呼ばれるツールが使用されます。 フリートは、クラスター全体のプロセスを管理するために使用できるクラスター全体のinitシステムとして機能します。 これにより、可用性の高いアプリケーションの構成とクラスターの単一ポイントからの管理が容易になります。 これは、個々のノードのsystemd
initシステムに接続することによって行われます。
このガイドでは、いくつかの主要なCoreOSの概念を紹介し、システムの動作を可能にする各コアコンポーネントを紹介します。 後のガイドでは、DigitalOceanでCoreOSを使い始める方法について説明します。
システム設計
CoreOSインストールの一般的な設計は、クラスタリングとコンテナー化を対象としています。
メインのホストシステムは比較的シンプルで、従来のサーバーの一般的な「機能」の多くを廃止しています。 実際、CoreOSにはパッケージマネージャーすらありません。 代わりに、すべての追加アプリケーションはDockerコンテナーとして実行されることが期待されており、サービスの分離、移植性、および外部管理が可能になります。
起動時に、CoreOSは「cloud-config」と呼ばれるユーザー提供の構成ファイルを読み取り、初期構成を行います。 このファイルを使用すると、CoreOSはクラスターの他のメンバーと接続し、重要なサービスを起動し、重要なパラメーターを再構成できます。 これにより、CoreOSは、作成時に作業ユニットとしてクラスターにすぐに参加できます。
通常、「cloud-config」ファイルは、少なくとも、既存のクラスターに参加する方法をホストに指示し、etcd
およびfleet
と呼ばれる2つのサービスを起動するようにホストに命令します。 これらの3つのアクションはすべて関連しています。 これらは、新しいホストを既存のサーバーに接続させ、クラスター内の各ノードを構成および管理するために必要なツールを提供します。 基本的に、これらはCoreOSノードをクラスターにブートストラップするための要件です。
etcd
デーモンは、クラスター内の各ホストにデータを格納して配布するために使用されます。 これは、一貫した構成を維持するのに役立ち、サービスが自分自身をアナウンスできるプラットフォームとしても機能します。 このサービス検出メカニズムは、他のサービスが構成の詳細を調整するために情報を照会するために使用できます。 たとえば、ロードバランサーは、起動時に複数のバックエンドWebサーバーのIPアドレスをetcd
に照会できます。
fleet
デーモンは、基本的に分散型initシステムです。 これは、クラスター内の個々のホストのsystemd
initシステムにフックすることで機能します。 サービスのスケジューリングを処理し、ユーザー定義の基準に基づいて展開ターゲットを制約します。 ユーザーは、個々のサーバーについて心配する必要がなく、fleet
を使用してクラスターを単一のユニットとして概念化できます。
システム全体についての一般的な考え方がわかったところで、特定の各コンポーネントについてさらに詳しく見ていきましょう。 これらのそれぞれが果たす役割を理解することは重要です。
Dockerの基本的な概要
Dockerは、Linuxコンテナーとも呼ばれるLXCを利用するコンテナー化システムであり、プロセスを分離するためにカーネルの名前空間とcgroupを使用します。
分離は、アプリケーションの実行環境をクリーンで予測可能な状態に保つのに役立ちます。 ただし、このシステムの主な利点の1つは、ソフトウェアの配布が簡単になることです。 Dockerコンテナーは、オペレーティング環境に関係なくまったく同じように実行できる必要があります。 これは、ラップトップ上に構築されたコンテナがデータセンター全体のクラスター上でシームレスに実行できることを意味します。
Dockerを使用すると、必要なすべての依存関係を備えた動作中のソフトウェア環境を配布できます。 Dockerコンテナーは、他のコンテナーと並行して実行できますが、個別のサーバーとして機能します。 仮想化に対するDockerコンテナーの利点は、Dockerがオペレーティングシステム全体をエミュレートしようとせず、アプリケーションを実行するために必要なコンポーネントのみを実装することです。 このため、Dockerには仮想化の多くの利点がありますが、リソースに大きなコストはかかりません。
CoreOSは、基本インストールに含まれる小さなセット以外のソフトウェアにDockerコンテナーを活用します。 これは、ほとんどすべてがコンテナ内で実行される必要があることを意味します。 これは最初は面倒に思えるかもしれませんが、クラスターのオーケストレーションが非常に簡単になります。 CoreOSは、個々のサーバーのレベルではなく、主にクラスターレベルで操作されるように設計されています。
これにより、CoreOSでのサービスの分散と負荷の分散が容易になります。 含まれているツールとサービスを使用すると、指定された制約内で使用可能なノードのいずれかでプロセスを開始できます。 Dockerを使用すると、これらのサービスとタスクを、各ノードで構成する必要のあるアプリケーションではなく、自己完結型のチャンクとして分散できます。
Etcdの基本的な概要
クラスター内の各ノードに一貫したグローバルデータのセットを提供し、サービス検出機能を有効にするために、etcd
と呼ばれるサービスが開発されました。
etcdサービスは、各ノードが構成データを取得したり、実行中のサービスに関する情報を照会したり、他のメンバーに知っておくべき情報を公開したりするために使用できる、可用性の高いKey-Valueストアです。 各ノードは独自のetcdクライアントを実行します。 これらは、クラスター内の他のクライアントと通信して情報を共有および配布するように構成されています。
ストアから情報を取得したいアプリケーションは、ローカルマシンのetcd
インターフェイスに接続するだけです。 すべてのetcd
データは、実際に保存されている場所に関係なく、各ノードで使用でき、保存されている各値は、クラスター全体に自動的に分散および複製されます。 リーダーの選挙も自動的に処理されるため、キーストアの管理は非常に簡単です。
etcdデータを操作するには、単純なHTTP / JSON API(デフォルトではhttp://127.0.0.1:4001/v2/keys/
でアクセス可能)を使用するか、etcdctl
と呼ばれる付属のユーティリティを使用してデータを操作または読み取ることができます。 etcdctl
コマンドとHTTPAPIはどちらも、ストアと対話するためのシンプルで予測可能な方法です。
Dockerコンテナ内で実行されているアプリケーションからもHTTPAPIにアクセスできることを理解することが重要です。 これは、個々のコンテナの構成で、etcdに格納されている値を考慮に入れることができることを意味します。
フリートの基本的な概要
構築しているCoreOSクラスターを実際にオーケストレーションするために、fleet
と呼ばれるツールが使用されます。 かなり単純な概念であるフリートは、クラスター全体のinitシステムとして機能します。
クラスタ化された環境内の個々のノードは、独自の従来のsystemd
initシステムを操作します。 これは、ローカルマシンでサービスを開始および管理するために使用されます。 簡単に言うと、フリートが行うことは、クラスターメンバーのsystemd
システムのそれぞれを制御するためのインターフェースを提供することです。
サービスを開始または停止したり、クラスター全体で実行中のプロセスに関する状態情報を取得したりできます。 ただし、フリートはこれをより使いやすくするためにいくつかの重要なことを行います。 プロセス分散メカニズムを処理するため、ビジー状態の少ないホストでサービスを開始できます。
実行しているサービスの配置条件を指定することもできます。 特定のホストが配置されている場所、既に実行されているものなどに応じて、サービスを特定のホストで実行する必要があるかどうかを指定できます。 フリートはsystemdを利用してローカルプロセスを開始するため、サービスを定義する各ファイルはsystemdユニットファイルです(いくつかのカスタムオプションがあります)。 これらの構成ファイルを一度フリートに渡して、クラスター全体で管理することができます。
この柔軟性により、可用性の高い構成を簡単に設計できます。 たとえば、各Webサーバーコンテナを別々のノードにデプロイするように要求できます。 同様に、ヘルパーコンテナーが、親コンテナーを実行しているノードにのみデプロイされるようにすることができます。
fleetctl
ユーティリティを使用して、任意のメンバーノードを使用してクラスターを管理できます。 これにより、サービスのスケジュール設定、ノードの管理、およびシステムの一般的な状態の確認が可能になります。 fleetctl
プログラムは、クラスターとのメインインターフェイスになります。
結論
CoreOSは、使い慣れている他のほとんどのLinuxディストリビューションとは異なる場合があります。 それぞれの設計上の決定は、クラスター管理の容易さとアプリケーションの移植性を念頭に置いて行われました。 これにより、最新のインフラストラクチャとアプリケーションのスケーリングのニーズに対応するために構築された、集中的で強力なディストリビューションが実現しました。
開始方法の詳細については、CoreOSクラスターをDigitalOceanで起動して実行するためのガイドを確認してください。