コンセプト

Edit This Page

Kubernetesコンポーネント

このページでは、Kubernetesクラスターの機能を提供するために必要になる様々なコンポーネントを説明します。(実行ファイル形式で提供される)

マスターコンポーネント

マスターコンポーネントは、クラスターのコントロールプレーンです。マスターコンポーネントはクラスターに関する全体的な決定を行い(例えばスケジューリングなど)、クラスターのイベントを検知し、それらに応答します(例えば、レプリケーションコントローラーの’replicas’フィールドが充足されていない場合、新しいPodを立ち上げます)。

マスターコンポーネントは、クラスター内のどのマシン上でも動かすことが出来ます。しかし、話を簡単にするために、環境構築を行うスクリプトは通常、全てのマスターコンポーネントを同じマシン上で稼働させ、ユーザーのコンテナはそのマシンでは稼働させません。複数マスターマシン構成の構築例は、高可用性クラスターを構築するを確認してください。

kube-apiserver

Kubernetes APIを外部に提供する、マスター上のコンポーネントです。これがKubernetesコントロールプレーンのフロントエンドになります。

このコンポーネントは、水平スケールするように設計されています。つまり追加でインスタンスを足すことでスケール可能です。さらなる情報は、高可用性クラスターを構築するを確認してください。

etcd

一貫性、高可用性を持ったキーバリューストアで、Kubernetesの全てのクラスター情報の保存場所として利用されています。

あなたのKubernetesクラスター情報を守るため、etcdのデータのバックアッププランを持っておいて下さい。etcdに関するより詳細な情報は、etcdドキュメントを確認してください。

kube-scheduler

マスター上で動くコンポーネントで、まだノードに紐付けられていない新規に作成されたPodを見張り、稼働させるべきノードを選択します。

スケジューリングで考慮される要因は個別、集合的なものを含んでおり、ハードウェア/ソフトウェア/ポリシーの制約、アフィニティ、アンチアフィニティ設定、データの保存位置関係、稼働しているワークロードごとの干渉と処理完了期限があります。

kube-controller-manager

マスター上で動く、controllersクラスターの状態をAPIサーバーから取得、見張る制御ループで、現在の状態を望ましい状態に移行するように更新します。 を動かすコンポーネントです。

論理的には、各controllerクラスターの状態をAPIサーバーから取得、見張る制御ループで、現在の状態を望ましい状態に移行するように更新します。 は、それぞれ別のプロセスですが、複雑になるのを避けるため、一つの実行ファイルにまとめてコンパイルされ、単一のプロセスとして動きます。

コントローラーには下記のものがあります:

  • ノードコントローラー: ノードがダウンした場合に、通知と応答を行います。
  • レプリケーションコントローラー: それぞれのレプリケーションコントローラーオブジェクト内に、正しい数のポッドが存在しているかを管理します。
  • エンドポイントコントローラー: エンドポイントを設定します。(これは、サービスとPodを結合するということです)
  • サービスアカウント & トークンコントローラー: 新しい名前空間にデフォルトアカウントとAPIアクセストークンを作成します。

クラウドコントローラーマネージャー(cloud-controller-manager)

クラウドコントローラーマネージャーは、基盤となるクラウドサービスと連携するコントローラーを動かします。クラウドコントローラーマネージャーはKubernetes 1.6でリリースされたアルファの機能です。

クラウドコントローラーマネージャーは、クラウドサービス固有の制御ループのみを動かします。これらの制御ループは kube-controller-manager から無効にしなければなりません。無効にするには、kube-controller-managerの起動時に、--cloud-providerフラグにexternalを指定します。

クラウドコントローラーマネージャーは、クラウドベンダー固有のコードと、Kubernetes本体のコードを独立して開発することを可能にします。以前のリリースでは、Kubernetes本体のコードがクラウドサービス固有のコードに機能的に依存していました。将来のリリースでは、クラウドベンダー固有のコードはクラウドベンダー自身が保持し、Kubernetesが稼働している時にクラウドコントローラーマネージャーに紐付けられるようになっていきます。

以下のコントローラーがクラウドサービスとの依存関係を持っています:

  • ノードコントローラー: クラウドから応答が無くなった後、ノードが削除されていないかを確認します。
  • ルートコントローラー: クラウド基盤にルーティング情報を設定します。
  • サービスコントローラー: クラウドサービス上のロードバランサーを作成、更新、削除します。
  • ボリュームコントローラー: ボリュームを作成、アタッチ、マウント、またクラウドサービスと連携し、ボリュームを編成します。

ノードコンポーネント

ノードコンポーネントは全てのノード上で稼働し、稼働中Podの管理、Kubernetes実行環境を提供します。

kubelet

クラスター内の各ノードで稼働するエージェントです。コンテナがPod内で稼働していることを保証します。

Kubeletは、様々な機構から提供されるPodSpecs情報を受け取り、それらのPodSpecs情報に記述されているコンテナが正常に稼働していることを保証します。Kubeletは、Kubernetes外で作成されたコンテナは管理しません。

kube-proxy

kube-proxyは、ホスト上のネットワークルールを管理し、コネクションの転送を行うことで、Kubernetesサービスの抽象化を可能にします。

コンテナランタイム

コンテナランタイムは、コンテナを稼働させる責務を持つソフトウェアです。 Kubernetesはいくつかのランタイムをサポートしています: Dockercontainerdcri-orktlet、またKubernetes CRI (コンテナランタイムインターフェース)の実装があります。

アドオン

アドオンは、クラスターの機能群を実装したPodとサービスです。そのPodは、Deployment、レプリケーションコントローラーなどによって管理されるでしょう。名前空間に属するアドオンオブジェクトは、kube-system名前空間に作られます。

一部のアドオンを下記に示します。その他の利用可能なアドオンのリストは、アドオンを確認してください。

DNS

厳密には他のアドオンは必須ではありませんが、多数の実例が依存しているため、全てのKubernetesクラスターはクラスターDNSを持つべきです。

クラスターDNSはDNSサーバーで、あなたの環境で動いている他のDNSサーバーに加え、Kubernetesサービスで利用するDNSレコードも扱います。

Kubernetesから起動されたコンテナは、DNSの検索対象として、自動的にこのDNSサーバーを含めます。

Web UI (ダッシュボード)

ダッシュボードは、汎用のKubernetesのクラスターを管理するためのWebベースのUIです。ユーザーはこれを用いて、クラスター上で稼働しているアプリケーション、またクラスターそのものの管理、トラブルシュートが可能です。

コンテナリソース監視

コンテナリソース監視は、コンテナに関する一般的な時系列のメトリクスをセントラルなデータベースに記録し、そのデータを閲覧するUIを提供します。

クラスターレベルロギング

クラスターレベルロギング機構は、コンテナのログを、検索、閲覧のインターフェースを持ったセントラルなログ保管場所に保存します。

フィードバック