フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

Kubernetesの代表的なコンポーネントについてまとめた

f:id:lirlia:20180904211948p:plain

Kubernetesのコンポーネントについてまとめます。

コンポーネント

Kubernetes Components - Kubernetes

マスターコンポーネント

  • マスターコンポーネントはクラスタのコントロールプレーンを提供します。
  • マスターコンポーネントは、クラスタに関するグローバルな決定(スケジューリングなど)、およびクラスタイベントの検出と応答(レプリケーションコントローラの「レプリカ」フィールドが満たされていない場合に新しいポッドを起動する)
  • マスターコンポーネントは、クラスタ内の任意のマシン上で実行できます
  • ただし、簡単にするために、セットアップスクリプトは通常、同じマシン上ですべてのマスターコンポーネントを起動し、このマシン上でユーザーコンテナを実行しません
  • マルチマスターVMの設定例については、「高可用性クラスタの構築」を参照してください。

kube-apiserver

* Kubernetes APIを公開するマスターのコンポーネント
* これは、Kubernetesコントロールプレーンのフロントエンドです
* これは、水平方向に拡張するように設計されています。つまり、より多くのインスタンスを展開することで拡張できます。 [「高可用性クラスタの構築」](https://kubernetes.io/docs/setup/independent/high-availability/)を参照してください。

etcd

* すべてのクラスタデータに対してKubernetesのバッキングストアとして使用される、一貫した高可用性キー値ストア
* あなたのKubernetesクラスタ用のetcdのデータのバックアップ計画は常に持っています
*  etcdの詳細については、[etcdのマニュアル](https://github.com/coreos/etcd/blob/master/Documentation/docs.md)を参照してください

kube-sheduler

  • ノードが割り当てられていない新しく作成されたポッドを監視し、podを実行するノードを選択するマスター上のコンポーネント
    • スケジューリングの決定に考慮される要因には、個々のおよび集合的なリソース要件、ハードウェア/ソフトウェア/ポリシー制約、アフィニティおよび非アフィニティ仕様、データローカリティ、ワークロード間の干渉および期限が含まれます

kube-controller

* コントローラーを実行するマスターのコンポーネント
* 論理的には、各コントローラは別々のプロセスですが、複雑さを軽減するために、すべて1つのバイナリにコンパイルされ、1つのプロセスで実行されます
*4つのコントローラ 
    * ノードコントローラ:ノードがダウンしたときに気付いて応答する
    * レプリケーションコントローラ:システム内のすべてのレプリケーションコントローラオブジェクトに対して正しい数のポッドを維持する責任があります
    * Endpoints Controller:Endpointsオブジェクトを生成します(つまり、サービスとpodを結合します)
    * サービスアカウントとトークンコントローラ:新しい名前空間の既定のアカウントとAPIアクセストークンを作成する

cloud-controller-manager

* 基盤となるクラウドプロバイダと対話するコントローラを実行します
* クラウド・コントローラ・マネージャのバイナリは、Kubernetesリリース1.6で導入されたアルファ機能です
* cloud-controller-managerは、クラウドプロバイダー固有のコントローラーループのみを実行します
* これらのコントローラループは、kube-controller-managerで無効にする必要があります。
* kube-controller-managerを起動するときに、--cloud-providerフラグをexternalに設定することで、コントローラループを無効にすることができます
* cloud-controller-managerは、クラウドベンダーのコードとKubernetesコアを互いに独立して進化させることを可能にします
* 以前のリリースでは、コアKubernetesコードは、クラウドプロバイダー固有の機能コードに依存していました
* 将来のリリースでは、クラウドベンダー固有のコードはクラウドベンダー自身が管理し、Kubernetesを実行している間はクラウドコントローラマネージャーにリンクする必要があります
* 次のコントローラには、クラウドプロバイダの依存関係があります
    * ノードコントローラ:クラウドプロバイダがクラウド内のノードが応答を停止した後に削除されたかどうかを確認する 
    * ルートコントローラ:基盤となるクラウドインフラストラクチャのルートを設定する 
    * サービスコントローラー:クラウドプロバイダーロードバランサーの作成、更新、および削除用 
    * ボリュームコントローラー:ボリュームを作成、接続、マウントし、クラウドプロバイダーと対話してボリュームを編成する

ノードコンポーネント

kubelet

  • クラスタ内の各ノードで実行されるエージェント
  • これは、コンテナがポッド内で実行されていることを確認しま
  • kubeletは、さまざまなメカニズムによって提供される一連のPodSpecを取得し、それらのPodSpecに記述されているコンテナが実行中であり、かつ健全であることを保証します
  • kubeletは、Kubernetesによって作成されなかったコンテナを管理しません

kube-proxy

  • kube-proxyは、ホスト上でネットワークルールを維持し、接続転送を実行することによってKubernetesサービスの抽象化を可能にします

Container Runtime

  • コンテナランタイムは、コンテナの実行を担当するソフトウェアです
  • Kubernetesはいくつかのランタイムをサポートしています:Docker、rkt、runc、および任意のOCIランタイム仕様実装

アドオン

  • アドオンは、クラスター機能を実装するポッドとサービスです
  • ポッドは、Deployments、ReplicationControllerなどで管理できます
  • 名前空間のアドオンオブジェクトは、kube-system名前空間に作成されます。
  • 選択されたアドオンについては以下で説明します
  • 利用可能なアドオンの拡張リストについては、Addonsを参照してください。

DNS

  • 他のアドオンは厳密には必要ではありませんが、KubernetesクラスタにはクラスタDNSが必要です
  • 多くの例がそれに依存しています
  • クラスタDNSは、環境内の他のDNSサーバーに加えて、KubernetesサービスのDNSレコードを提供するDNSサーバーです
  • Kubernetesによって開始されたコンテナは自動的にDNS検索にこのDNSサーバーを含めます

WEB UI

  • Dashboardは、Kubernetesクラスタ用の一般的なWebベースのUIです
  • これにより、ユーザーはクラスタ内で実行されているアプリケーションやクラスタ自体の管理やトラブルシューティングを行うことができます