k8sのアーキテクチャ
The Linux Foundation より参照
最もシンプルな形式では、 Kubernetes はセントラルマネージャ( 別名:マスタ)と数個のワーカノード(以前はミニオンと呼ばれていました)で構成されています。(これ以降の章で、テストを目的のために 1 つのノードで全てを実行する方法を説明します)。マネージャは、 API サーバ、スケジューラ、さまざまなコントローラ、そしてクラスタの状態、コンテナの設定、ネットワークの設定を格納するストレージシステムを実行しています。
Kubernetes は(API サーバを通して)API を公開します: kubectl というローカルクライアントを用いて、もしくは自分のクライアントを作成し curl コマンドを使用して、API とやり取りができます。Kube-schduler はAPIに届いたコンテナ起動リクエストの転送を受け、コンテナを起動するのにふさわしいノードを見つけます。クラスタ内の各ノードでは kubelet と kube-proxy の 2 つのプロセスが動作します。 kubelet は、コンテナを起動させるリクエストを受け取り、必要なリソースを管理し、そのリソースをローカルノードで監視します。kubelet はローカルのコンテナエンジンと通信します。デフォルトのコンテナエンジンは Docker ですが、人気が高まっている rkt や cri-o を使うこともできます。
kube-proxy は、ネットワーク上でコンテナを公開するためのネットワークのルールを作成し、管理します。
API ベースの通信スキームを使うことで、Linux でないワーカノードとコンテナを使うことができます。Windows Server 2019 のサポートは 1.14 のリリースをもって Stable になりました。ただし、クラスタマスタになれるのは Linux ノードのみです。
Master nodeの構成コンポーネント
kube-apiserver
全ての内外からの処理はこのコンポーネントを通して行われます。全ての処理はこのエージェントを通して、受け取り、検証される。
kube-scheduler
どのノードでPodをホストするかを決定するエージェント。スケジューラーが結びつけるリソースを確認し、成功するまで、Podのデプロイを行う。
etcd database
クラスタの状態やネットワークなどの必要な情報をetcd databaseに格納される。データベースの更新は、エントリを見つけて更新するのではなく、末尾に値をつけることで更新されます。
kube-controller-manager
コントロールプレーン上で動作するコンポーネントで、複数のコントローラープロセスを実行します。
コントローラーには以下が含まれます。
ノードコントローラー:ノードがダウンした場合の通知と対応を担当します。
レプリケーションコントローラー:システム内の全レプリケーションコントローラーオブジェクトについて、Podの数を正しく保つ役割を持ちます。
エンドポイントコントローラー:エンドポイントオブジェクトを注入します(つまり、ServiceとPodを紐付けます)。
サービスアカウントとトークンコントローラー:新規の名前空間に対して、デフォルトアカウントとAPIアクセストークンを作成します。
Worker nodeの構成コンポーネント
全てのWorker nodeはkubelet と kube-proxy、Dockerなどのコンテナエンジンを起動します。
kubelet
クラスター内の各ノードで実行されるエージェントです。各コンテナがPodで実行されていることを保証します。 Podはストレージ、Secret,ConfigMapにアクセスすることが必要になります。Kubeletはそれらのアクセスや制裁を行います。