Kubernetes

k8sアーキテクチャ

f:id:lucky0523:20200905205729p:plain

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はそれらのアクセスや制裁を行います。

  • Podspecを使用する

  • PodにVolumeをマウントする

  • Secret をダウンロード

  • ローカルコンテナにリクエストをそうしん

  • クラスタにPodとNodeの情報をレポートする。

kube-proxy