第2章 インフラストラクチャーコンポーネント
2.1. Kubernetes インフラストラクチャー
2.1.1. 概要
OpenShift Online 内で、Kubernetes はコンテナーまたはホストのセット全体でコンテナー化されたアプリケーションを管理し、デプロイメント、メンテナンス、およびアプリケーションのスケーリングのメカニズムを提供します。Docker サービスはコンテナー化されたアプリケーションをパッケージ化し、インスタンス化し、これを実行します。Kubernetes クラスターは 1 つ以上のマスターおよびノードセットで構成されます。
OpenShift Online は Kubernetes 1.9 および Docker 1.13 を使用します。
2.1.2. マスター
マスターは、API サーバー、コントローラーマネージャーサーバー、および etcd などのマスターコンポーネントが含まれるホストです。マスターは Kubernetes クラスターのノードを管理し、Pod をノードで実行されるようにスケジュールします。
コンポーネント | 説明 |
---|---|
API サーバー | Kubernetes の API サーバーは、Pod、サービス、レプリケーションコントローラーのデータを検証し、設定します。さらに Pod をノードに割り当て、Pod の情報をサービス設定に同期します。これはスタンドアロンプロセスとして実行できます。 |
etcd | etcd は、コンポーネントが etcd で必要な状態に戻すための変更の有無を確認する間に永続マスター状態を保存します。etcd は、通常 2n+1 ピアサービスでデプロイされるなど、高可用性のためにオプションで設定できます。 |
コントローラーマネージャーサーバー | コントローラーマネージャーサーバーは、レプリケーションコントローラーのオブジェクトに変更がないか etcd を監視し、API を使用して希望とする状態を有効化します。これはスタンドアロンプロセスとして実行できます。このような複数のプロセスは、一度に 1 つのアクティブなリーダーを設定してクラスターを作成します。 |
2.1.3. ノード
ノードはコンテナーのランタイム環境を提供します。Kubernetes クラスターの各ノードには、マスター で管理される必要のあるサービスがあります。また、ノードには、Docker サービス、kubelet、およびサービスプロキシーを含む Pod を実行するための必要なサービスも含まれます。
OpenShift Online は、ノードをクラウドプロバイダー、物理システムまたは仮想システムから作成します。Kubernetes は、それらのノードの表現であるノードオブジェクトと対話します。マスターはノードオブジェクトの情報を使ってヘルスチェックでノードを検証します。ノードはこれがヘルスチェックをパスするまで無視され、マスターはノードが有効になるまでチェックを継続します。ノードの管理についての詳細は、Kubernetes ドキュメントを参照してください。
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: ""