Kubernetes の内部アーキテクチャと動作メカニズム

Kubernetes は、実稼働レベルのコンテナ オーケストレーション プラットフォームであり、コンテナの作成とスケジュール、サーバーの監視と管理ができるクラスタ管理システムです。

オペレーティング システムの重要な機能は抽象化です。これは、退屈な基礎トランザクションからいくつかの単純な概念を抽象化し、これらの概念に基づいてシステム リソースを管理します。

同じことが Kubernetes にも当てはまります。その管理目標は大規模なクラスターとアプリケーションです。システム モデルを簡素化し、システムの精神的負担を軽減するために、システムを十分に高いレベルまで抽象化し、いくつかの疎結合オブジェクトを分解できなければなりません。ユーザー。

Kubernetes は一般的な「コントロール プレーン / データ プレーン」アーキテクチャを採用しています。クラスタ内のコンピュータは「ノード」と呼ばれ、実マシンまたは仮想マシンにすることができます。少数のノードが使用され、管理を実行するためのコントロール プレーンとして使用されます。クラスターのメンテナンスとその他のノードのほとんどは、ビジネス アプリケーションを実行するためのデータ プレーンとして分類されます。

コントロールプレーン上のノードはKubernetesではマスターノードと呼ばれ、一般的には略してマスターと呼ばれており、クラスター全体の中で最も重要な部分であり、Kubernetesの頭脳であり心臓部とも言えます。

データプレーン上のノードはワーカーノードと呼ばれ、一般にワーカーまたはノードと呼ばれ、Kubernetesの手足に相当し、マスターの指揮の下で動作します。

マスターには、apiserver、etcd、スケジューラー、およびコントローラーマネージャーという 4 つのコンポーネントがあります。

Apiserver はマスター ノードであり、Kubernetes システム全体への唯一の入り口です。Apiserver は一連の RESTful API を公開し、認証や認可などの機能を追加します。他のすべてのコンポーネントは Apiserver と直接通信することしかできません。 Kubernetes 連絡担当者です。

etcd は、可用性の高い分散 Key-Value データベースであり、さまざまなリソース オブジェクトや状態をストレージ システムに永続化するために使用されます。これは、Kubernetes の構成管理者に相当します。API サーバーとの直接接続のみがあることに注意してください。つまり、etcd でデータの読み取りまたは書き込みを行う他のコンポーネントは、API サーバーを経由する必要があります。

スケジューラはコンテナの配置を担当し、ノードのリソースのステータスを確認し、最適なノードでポッドが実行されるようにスケジュールを設定します。これはデプロイメント担当者に相当します。ノードのステータスとポッド情報は etcd に保存されるため、スケジューラは apiserver 経由で取得する必要があります。

コントローラーマネージャーは、コンテナやノードなどのリソースの状態を維持し、障害検出、サービスの移行、アプリケーションのスケーリングなどの機能を実装する責任を負い、運用保守担当者の監視に相当します。同様に、リソースに対するさまざまな操作を実現するには、etcd に格納されている情報を apiserver 経由で取得する必要があります。

Node の 3 つのコンポーネントは、kubelet、kube-proxy、container-runtime です。

Kubelet は Node のエージェントであり、Node に関連するほとんどの操作の管理を担当しており、Node 上で APIserver との通信、ステータス報告、コマンド配信、コンテナーの起動と停止などの機能を実現できる唯一のエージェントです。 Node 上の「小さな家政婦」に相当します。

kube-proxy の役割は少し特殊です。これは Node のネットワーク プロキシであり、コンテナのネットワーク通信の管理のみを担当します。簡単に言えば、Pod の TCP/UDP データ パケットを転送します。 -タイム「小さな郵便配達員」。

コンテナーランタイム コンテナーとイメージの実際のユーザーであり、kubelet のコマンドの下でコンテナーを作成し、ポッドのライフサイクルを管理します。これは、作業の本当の「クールな」作業です。

これら 3 つのコンポーネントのうち、kube-proxy のみがコンテナー化されています。kubelet はノード全体を管理する必要があるため、コンテナー化によって機能が制限され、コンテナー ランタイムの外部で実行する必要があります。

Kubernetes の一般的なワークフローは次のとおりです。

  • 各ノードの kubelet は定期的にノードのステータスを apiserver に報告し、apiserver はそれを etcd に保存します。
  • 各ノードの kube-proxy は TCP/UDP リバース プロキシを実装し、コンテナが安定したサービスを外部に提供できるようにします。
  • スケジューラーは API サーバーを通じて現在のノードのステータスを取得し、ポッドをスケジュールします。その後、API サーバーがノードの kubelet にコマンドを送信し、kubelet がコンテナー ランタイムを呼び出してコンテナーを起動します。
  • また、コントローラーマネージャーは、API サーバーを通じてリアルタイムのノードステータスを取得し、起こり得る異常な状況を監視し、対応する手段を使用して調整および回復します。

したがって、これらのコンポーネントは、たゆまぬ無数の運用保守エンジニアのようなもので、元の退屈で非効率な人間の作業を高効率のコンピュータに移すことで、いつでもクラスタ内の変化や異常を発見し、相互に連携して保守を行うことができます。クラスターの健全性ステータス。

この記事は7月9日目の学習メモです 内容はGeek Timeの「Kubernetes入門実践講座」から引用しています この講座はオススメです。

おすすめ

転載: blog.csdn.net/key_3_feng/article/details/131623645