[K8S] Kubernetesはアーキテクチャを理解します

  同様のリソース管理、タスクスケジューリングKubernetesだろうビットを学ぶために時間を割いて、感じて、このようなビッグデータとしてクラスタ領域は、簡単にメモをまとめます。

[コンセプト]

  Kubernetesは、工業用グレードのコンテナオーケストレーションプラットフォーム、少し長い言葉で、共通K8Sに代わって言いました。

  その主な機能は以下のとおりです。

  • スケジュール:ポッドを展開するとき、例えば、ポッドは、マシンよりアイドルのノードに展開。
  • 自動回復:たとえば、マシン・ヘルス・チェック・ノード、マシン通常のノードに障害が発生したマシンの移行ポッドノード。  
  • 伸縮性:例えば、トラフィック負荷チェック、CPU /メモリ使用率が高すぎる、または予め設定された前提条件が成立し、自動拡張しているときのようなポッドサービスの応答時間が長すぎます。

 PS:   

  ポッドは、容器の非常に密接に関連セットの集まりである、例えばコンテナ間でいくつかの名前空間を共有し、直接ファイル交換のために必要な、非常に頻繁にRPCコールの間などがあります。ポッドは、代わりに、容器の、K8S原子スケジューリング単位です。

 

[アーキテクチャ]公式

[概要]

  公式の数字はK8S技術アーキテクチャである、実際には、技術的なアーキテクチャの前に、より簡易な論理アーキテクチャがあるはずな基盤をK8S。出力は次のように理解します:

  

  • etcd

  また、イベントサブスクリプションとリスニング能力のリーダー選挙があり、クラスタの状態のすべてを格納するために使用される分散ストレージコンポーネント、です。

  イベントとリスナーの登録:相互API呼び出しが行われていないが、状態はetcd書かれていると他のさまざまなコンポーネントの通信、その他のコンポーネントはetcdをサブスクライブすることにより、状態の変化を監視して、フォローアップ治療を行い、その後再び更新しますデータがetcd書かれています。

  リーダー選挙:高可用性を実現行うには、このようなスケジューラなどのコンポーネントは、マスターを行うに選出された複数(通常は3)の例からetcdによって、他の人がスタンバイしています。

 

  • APIサーバー

  上記の直接アクセスが、されないetcd APIサーバーによる訪問した後、デリゲート。APIサーバーAPIゲートウェイは同等であり、それはインターフェースが標準のRESTfulなAPIであるetcdパッケージを呼び出します。

  此外,API Server还实现了一些附加功能,例如身份认证、缓存等。

 

  • Controller Manager:

  实现任务调度。直接请求Kubernetes做调度的都是任务,例如Deployment、Deamon Set或者Job,每一个任务请求发送给Kubernetes 之后,都是由 Controller Manager 来处理的。

  每一种任务类型对应一个 Controller Manager,例如:Deployment对应Deployment Controller,ReplicaSet对应ReplicaSet Controller。

 

  • Scheduler:

  实现资源调度。Controller Manager会把任务对资源Pod的要求,写入到etcd。Scheduler监听到有新的资源Pod要求被调度,会根据整个集群的各个节点的资源情况,将Pod分配到较为空闲合适的节点上。

 

  • Kubelet:

  是一个Agent,运行在每一个节点上,它会监听etcd中的Pod的信息,发现有分配给它所在节点的Pod需要运行,就在节点上运行相应的Pod,并且把状态更新回到etcd。

 

  • Kubectl:

  是一个提供给用户的命令行工具,用户通过它调用API Server,发送请求写入状态到etcd,或者查询etcd中的状态。

 

【举例】

   假如要运行一个多个实例的Nginx,那么在 Kubernetes内部,流程如下: 

  1. 通过 kubectl 命令行,创建一个包含Nginx 的Deployment对象。kubectl会调用 API Server 往 etcd里面写入一个Deployment 对象。
  2. Deployment Controller监听到有新的 Deployment 对象被写入,就获取到对象信息,根据对象信息来做任务调度,创建对应的 Replica Set 对象。
  3. Replica Set Controller 监听到有新的对象被创建,也读取到对象信息来做任务调度,创建对应的 Pod 。
  4. Scheduler监听到有新的Pod被创建,读取到 Pod 对象信息,根据集群状态将 Pod 调度到某一个节点上,然后更新 Pod(内部操作是将 Pod 和节点绑定)。
  5. Kubelet 监听到当前的节点被指定了新的 Pod,就根据对象信息运行 Pod。

おすすめ

転載: www.cnblogs.com/wwcom123/p/10963136.html