第2章 インフラストラクチャーコンポーネント
2.1. Kubernetes インフラストラクチャー
2.1.1. 概要
OpenShift Container Platform 内で、Kubernetes はコンテナーまたはホストのセット全体でコンテナー化されたアプリケーションを管理し、デプロイメント、メンテナンス、およびアプリケーションのスケーリングのメカニズムを提供します。Docker サービスはコンテナー化されたアプリケーションをパッケージ化し、インスタンス化し、これを実行します。Kubernetes クラスターは 1 つ以上のマスターおよびノードセットで構成されます。
また、オプションとして高可用性 (HA) のマスターを設定し、クラスターから単一障害点がなくなるようにすることもできます。
OpenShift Container Platform は Kubernetes 1.9 および Docker 1.13 を使用します。
2.1.2. マスター
マスターは、API サーバー、コントローラーマネージャーサーバー、および etcd などのマスターコンポーネントが含まれるホストです。マスターはその Kubernetes クラスターでノードを管理し、Pod がノードで実行されるようスケジュールします。
表2.1 マスターコンポーネント
| コンポーネント | 説明 |
|---|---|
|
API サーバー |
Kubernetes API サーバーは Pod、サービスおよびレプリケーションコントローラーのデータを検証し、設定します。さらに Pod をノードに割り当て、Pod の情報をサービス設定に同期します。これはスタンドアロンプロセスとして実行できます。 |
|
etcd |
etcd は永続的なマスターの状態を保存し、他のコンポーネントは etcd で特定の状態にするために必要な変更の有無について確認します。etcd については、通常は 2n+1 のピアサービスでデプロイされるなど、オプションで高可用性の設定を行うことができます。 |
|
コントローラーマネージャーサーバー |
コントローラーマネージャーサーバーは etcd でレプリケーションコントローラーオブジェクトの変更を確認し、API を使用して必要な状態を実行します。これはスタンドアロンプロセスとして実行できます。この複数のプロセスでは、一度に 1 つのアクティブなリーダーを使用してクラスターを作成します。 |
|
HAProxy |
オプションです。高可用マスター を
通常インストール (advanced installation) 方式では、 |
2.1.2.1. 高可用性マスター
単一マスター設定の使用時に、マスターまたはそのサービスのいずれかが失敗しても、実行中のアプリケーションの可用性はそのまま維持されます。ただし、マスターサービスが失敗すると、システムのアプリケーションの失敗に対応する機能、または新規アプリケーションの作成に対応する機能に制限が生じます。オプションで高可用性 (HA) のマスターを、クラスターに単一障害点がなくなるように設定できます。
マスターの可用性についての懸念を軽減するために、2 つのアクティビティーを実行することが推奨されます。
- runbook エントリーは、マスターの再作成のために作成される必要があります。runbook エントリーはすべての高可用サービスに必要なバックストップです。追加ソリューションは runbook が参照される頻度を制御するのみになります。たとえば、マスターホストのコールドスタンドバイは、新規アプリケーションの作成または失敗したアプリケーションコンポーネントの回復によるダウンタイムが数分未満とすることを要求する SLA を十分に満たすことができます。
-
高可用性ソリューションを使用して、クラスターから単一障害点がなくなるようにマスターを設定します。通常インストール (advanced installation) 方式は
nativeHA メソッドを使用し、HAProxy を設定して特定のサンプルを提供します。また、HAProxy の代わりにnativeメソッドを使用して同様の概念を採用し、それらの概念を既存の HA ソリューションに適用することもできます。
インストール後の単一マスタークラスターから複数マスターへの移行はサポートされていません。
native HA メソッドを HAProxy で使用する際に、マスターコンポーネントには以下の可用性が設定されます。
表2.2 HAProxy による可用性マトリックス
| ロール | スタイル | 備考 |
|---|---|---|
|
etcd |
Active-active |
負荷分散機能と完全な冗長性のあるデプロイメントです。別個のホストにインストールすることも、マスターホストに併置することもできます。 |
|
API サーバー |
Active-active |
HAProxy で管理されます。 |
|
コントローラーマネージャーサーバー |
Active-passive |
一度に 1 つのインスタンスがクラスターリーダーとして選択されます。 |
|
HAProxy |
Active-passive |
API マスターエンドポイント間で負荷を分散します。 |
クラスター化された etcd ではクォーラム(定足数)を維持するためにホストの数を奇数にする必要がありますが、マスターサービスにはクォーラム(定足数) やホストの数を奇数にしなければならないという要件はありません。ただし、2 つ以上のマスターサービスが HA 用に必要になるため、マスターサービスと etcd を同じ場所に配置する場合には、一律に奇数のホストを維持することが通例になります。
2.1.3. ノード
ノードはコンテナーのランタイム環境を提供します。Kubernetes クラスターの各ノードには、マスターで管理される必要なサービスがあります。また、ノードには Docker サービス、kubelet および サービスプロキシー を含む Pod を実行するための必要なサービスも含まれます。
OpenShift Container Platform は、ノードをクラウドプロバイダー、物理システムまたは仮想システムから作成します。Kubernetes は、それらのノードの表現であるノードオブジェクトと対話します。マスターはノードオブジェクトからの情報を使用し、ヘルスチェックでノードを検証します。ノードはヘルスチェックをパスするまで無視され、マスターはノードが有効になるまでチェックを継続します。Kubernetes ドキュメントにはノード管理についての詳細が記載されています。
管理者は CLI を使用して OpenShift Container Platform インスタンスでノードを管理できます。ノードサーバーの起動時に完全な設定およびセキュリティーオプションを定義するには、専用のノード設定ファイルを使用します。
推奨されるノードの最大数については、「クラスターの制限」セクションを参照してください。
2.1.3.1. Kubelet
各ノードには、Pod を記述する YAML ファイルのコンテナーマニフェストで指定されるようにノードを更新する kubelet があります。kubelet はマニフェストのセットを使用して、そのコンテナーが起動していること、および実行を継続することを確認します。
コンテナーマニフェストは以下によって kubelet に提供されます。
- 20 秒ごとにチェックされるコマンドラインのファイルパス。
- 20 秒ごとにチェックされるコマンドラインで渡される HTTP エンドポイント。
- /registry/hosts/$(hostname -f) などの etcd サーバーを監視し、変更を実行する kubelet。
- HTTP をリッスンし、単純な API に応答して新規マニフェストを送信する kubelet。
2.1.3.2. サービスプロキシー
各ノードは、ノードの API で定義されるサービスを反映した単純なネットワークプロキシーも実行します。これにより、ノードは一連のバックエンドで単純な TCP および UDP ストリーム転送を実行できます。
2.1.3.3. ノードオブジェクト定義
以下は、Kubernetes のノードオブジェクト定義の例になります。
apiVersion: v1 1 kind: Node 2 metadata: creationTimestamp: null labels: 3 kubernetes.io/hostname: node1.example.com name: node1.example.com 4 spec: externalID: node1.example.com 5 status: nodeInfo: bootID: "" containerRuntimeVersion: "" kernelVersion: "" kubeProxyVersion: "" kubeletVersion: "" machineID: "" osImage: "" systemUUID: ""
2.2. Container レジストリー
2.2.1. 概要
OpenShift Container Platform は、Docker Hub、サードパーティーによって実行されるプライベートレジストリーおよび統合 OpenShift Container Platform レジストリーを含む、イメージのソースとして Docker レジストリー API を実装するすべてのサーバーを利用できます。
2.2.2. 統合 OpenShift Container レジストリー
OpenShift Container Platform は OpenShift Container レジストリー (OCR) という統合コンテナーレジストリーを提供します。これは、新規イメージリポジトリーをオンデマンドで自動的にプロビジョニングする機能を追加します。これにより、作成されるイメージをプッシュするためのアプリケーションビルドのビルトインロケーションがユーザーに提供されます。
新規イメージが OCR にプッシュされるたびに、レジストリーは OpenShift Container Platform に新規イメージについて通知し、namespace、名前、およびイメージメタデータなどの関連するすべての情報を伝えます。OpenShift Container Platform の異なる部分が新規イメージに対応し、新規ビルドおよびデプロイメントを作成します。
また OCR はビルドおよびデプロイメントの統合なしに、単独でコンテナーレジストリーとして機能するスタンドアロンコンポーネントとしてデプロイできます。詳細については、「OpenShift Container レジストリーのスタンドアロンデプロイメントのインストール」を参照してください。
2.2.3. サードパーティーレジストリー
OpenShift Container Platform はサードパーティーのイメージを使用してコンテナーを作成できますが、これらのレジストリーは OpenShift Container Platform レジストリーと同じイメージ通知サポートを提供する訳ではありません。取得されたタグの更新は、oc import-image <stream> を実行するのと同様に単純です。新規イメージが検出されると、事前に記述されたビルドおよびデプロイメントの応答が発生します。
2.2.3.1. 認証
OpenShift Container Platform は、ユーザーが指定する認証情報を使ってプライベートリポジトリーにアクセスするためにレジストリーと通信します。これにより、OpenShift はプライベートリポジトリーから/へのイメージのプッシュ/プルを行うことができます。「認証」のトピックには詳細が記載されています。
2.3. Web コンソール
2.3.1. 概要
OpenShift Container Platform Web コンソールは、Web ブラウザーからアクセスできるユーザーインターフェースです。開発者は Web コンソールを使用してプロジェクトのコンテンツの可視化、ブラウズ、および管理を実行できます。
Web コンソールを使用するには JavaScript が有効にされている必要があります。WebSocket をサポートする Web ブラウザーを使用することが最も推奨されます。
Web コンソールはマスター上の Pod として実行されます。Web コンソールを実行するために必要な静的なアセットは Pod によって提供されます。また、管理者は拡張を使用して Web コンソールのカスタマイズを実行できます。これにより、Web コンソールによる読み込みの実行時にスクリプトを実行でき、カスタムスタイルシートを読み込むことができます。
ブラウザーから Web コンソールにアクセスする際に、まず必要な静的アセットをすべて読み込みます。次に、openshift start オプションの --public-master で定義される値、openshift-web-console namespace で定義される webconsole-config Config Map の関連パラメーター masterPublicURL で定義される値を使用して、OpenShift Container Platform API に要求を行います。Web コンソールは WebSocket を使用して API サーバーとの継続的な接続を維持し、更新情報を利用可能になる時点で受信します。
図2.1 Web コンソール要求アーキテクチャー

Web コンソールの設定されたホスト名および IP アドレスは、ブラウザーが要求を クロスオリジン の要求とみなす場合でも API サーバーに安全にアクセスできるようにホワイトリスト化されます。異なるホスト名を使用して Web アプリケーションから API サーバーにアクセスするには、openshift start で --cors-allowed-origins オプションを指定するか、または関連するマスター設定ファイルパラメーターの corsAllowedOrigins で指定してホスト名をホワイトリスト化する必要があります。
corsAllowedOrigins パラメーターは設定フィールドで制御されます。値に対してピニングやエスケープは実行されません。以下は、ホスト名を固定し、ドットをエスケープする方法の例を示しています。
corsAllowedOrigins: - (?i)//my\.subdomain\.domain\.com(:|\z)
-
(?i)は大文字/小文字を区別します。 -
//はドメインの開始部分に固定されます (また、http:またはhttps:の後のダブルスラッシュに一致します)。 -
\.はドメイン名のドットをエスケープします。 -
(:|\z)はドメイン名 ((\z)またはポートセパレーター(:)) の終了部分に一致します。
2.3.2. CLI ダウンロード
Web コンソールのヘルプアイコンから CLI ダウンロードにアクセスできます。

クラスター管理者は、これらのリンクの追加のカスタマイズを実行できます。

2.3.3. ブラウザーの要件
OpenShift Container Platform のテスト済みの統合を確認します。
2.3.4. プロジェクトの概要
ログイン後、Web コンソールは開発者に現在選択されているプロジェクトの概要を提供します。
図2.2 Web コンソールのプロジェクト概要

- プロジェクトセレクターを使うと、アクセスできるプロジェクト間の切り替えを実行できます。
- プロジェクトビュー内でサービスをすぐに見つけられるように検索条件を入力します。
- ソースリポジトリーを使用するか、またはサービスカタログのサービスを使用して新規アプリケーションを作成します。
- プロジェクトに関連する通知です。
- Overview タブ (現在選択されている): 各コンポーネントのハイレベルビューと共にプロジェクトのコンテンツを可視化します。
- Applications タブ: デプロイメント、Pod、サービスおよびルートを参照し、これらに対してアクションを実行できます。
- Builds タブ: ビルドおよびイメージストリームを参照し、これらに対してアクションを実行できます。
- Resources タブ: 現在のクォータの消費およびその他のリソースを表示します。
- Storage タブ: Persistent Volume Claim (永続ボリューム要求) を表示し、アプリケーションのストレージを要求します。
- Monitoring タブ: ビルド、Pod、デプロイメントのログ、およびプロジェクトのすべてのオブジェクトについてのイベント通知を表示します。
- Catalog タブ: プロジェクト内でカタログにすぐに移動できます。
Cockpit は OpenShift Container Platform 3.1 以降に自動的にインストールされ、有効にされています。これは後に開発環境をモニターするのに役立ちます。『Red Hat Enterprise Linux Atomic Host: Getting Started with Cockpit』は Cockpit の使用についての詳細を記載しています。
2.3.5. JVM コンソール
Java イメージをベースとする Pod の場合、Web コンソールは関連する統合コンポーネントを表示し、管理するための hawt.io ベースの JVM コンソールへのアクセスを公開します。コンテナーに jolokia という名前のポートがある場合、Connect リンクが Browse → Pods ページの Pod の詳細に表示されます。
図2.3 JVM コンソールへのリンクを持つ Pod

JVM コンソールへの接続後に、接続されている Pod の関連コンポーネントに応じて異なるページが表示されます。
図2.4 JVM コンソール

以下のページが利用可能になります。
| ページ | 説明 |
|---|---|
|
JMX |
JMX ドメインおよび MBean を表示し、管理します。 |
|
スレッド |
スレッドの状態を表示し、モニターします。 |
|
ActiveMQ |
Apache ActiveMQ ブローカーを表示し、管理します。 |
|
Camel |
Apache Camel のルートおよび依存関係を表示し、管理します。 |
|
OSGi |
JBoss Fuse OSGi 環境を表示し、管理します。 |
2.3.6. StatefulSet
StatefulSet コントローラーは Pod の一意のアイデンティティーを提供し、デプロイメントおよびスケーリングの順序を決定します。StatefulSet の使用は一意のネットワーク ID、永続ストレージ、正常なデプロイメントおよびスケーリング、および正常な削除および終了に役立ちます。
図2.5 OpenShift Container Platform の StatefulSet


Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.