引用
前回の記事では、Kubernetes とは何かを紹介しましたが、コンテナーをオーケストレーションすることができ、つまりコンテナーのマネージャーであり、コンテナーのロード バランシング、ストレージ システムのマウント、自動デプロイメントとロールバック、自己修復、自動化が可能です。それでは、Kubernetes はどのようにしてこれを行うのでしょうか? これには、Kubernetes の次の重要なコンポーネントについて言及する必要があります。
- クラスタコンポーネント
- 核となるアイデア
- クラスターのインストール
1. クラスターのコンポーネント
MySQL、Redis... では、クラスタリングの概念に触れてきました。サービスの信頼性を確保するには、クラスタリングは重要なソリューションです。Kubernetes クラスタにもさまざまな役割があり、それぞれが独自の義務を実行します。
-
クラスタ クラスタ: 同じソフトウェア サービスの複数のノードをまとめて組織し、システムにサービスを提供するプロセスは、ソフトウェアのクラスタと呼ばれます。
-
k8s クラスター内のノードには 2 つの役割があります。
- マスターノード/コントロールプレーン制御ノード。主にコンテナ管理、スケジューリング、リソース割り当てに使用されます。
- 作業ノード 作業ノードは実際にコンテナを実行します
Kubernetes をデプロイすると、コンテナー化されたアプリケーションを実行する、ノードと呼ばれるワーカー マシンのセットである完全なクラスターが完成します。各クラスターには少なくとも 1 つのワーカー ノードが必要です。作業ノードはポッドをホストします。ポッドはアプリケーション ロードのコンポーネントです。これはコンテナではなく、コンテナのパッケージ化層です。コントロール プレーンは、クラスター内の作業ノードとポッドを管理します。
この写真は Kubernetes の公式 Web サイトからのものです。この図では、Kubernetes クラスター内に、表示されているノード ノードに加えて、コントロール プレーン (kube-apiserver、etcd、kube-scheduler、 kube-controller-manager、kube-controller-manager)
以下では、Kubernetes クラスターのさまざまなコンポーネントとその機能を紹介します。
1.1 コントロールプレーンのコンポーネント
コントロール プレーン コンポーネントは、リソースのスケジュール設定、クラスター イベントの検出と応答など、クラスターに関するグローバルな決定を行います。
コントロール プレーン コンポーネントはクラスターのどのノードでも実行できますが、通常、すべてのコントロール プレーン コンポーネントは同じマシン上で起動され、ユーザー コンテナーはこのマシン上では実行されません。
-
kube-apiserver
API サーバーは、Kubernetes コントロール プレーンのコンポーネントです。実際、これは Kubernetes によって提供されるメイン API エントリです。Kubernetes を操作するために作成したコマンドは、API サーバーによって直ちに受信され、API サーバーの処理を担当します。 kube-apiserver は API ですサーバーの主な実装、つまり主な用途は kube-apiserver です。これは、水平スケーリングを実現し、複数のインスタンスを実行して負荷分散を実現できるためです。 -
etcd は
、一貫性があり可用性の高いキーと値のストアであり、Kubernetes のすべてのクラスター データ (クラスター メタデータ) のバックグラウンド データベースとして使用され、クラスターの関連情報はこのデータベースに保存されます。 -
kube-scheduler は
、コンポーネントのスケジューリング、実行中のノードを指定していない新しく作成された Pod の監視、および実行する Pod へのノードの割り当てを担当します。- ポッドのリソース要件、ハードウェアとソフトウェア、およびポリシーの制約
- アフィニティと反アフィニティの仕様 (実際には、Pod を実行するときにどのノードで実行できるかを指定するのがアフィニティであり、どのノードで実行できないかを指定するのが反アフィニティです)
- データの場所
- 作業量と期限の間の干渉
-
Kube-controller-manager は
kube-apiserver に似ています。kube-controller-manager はコントローラー マネージャーの主要な実装であり、主にコントローラー プロセス
コントローラーの実行を担当します。Kubernetes には次の 4 つのコントローラーがあり、Pod コントローラーを実行しています。のときに指定できる- ノード コントローラー: ノードに障害が発生した場合の通知と応答を担当します。
- ジョブ コントローラー: 1 回限りのタスクのジョブ オブジェクトを検出し、それらのタスクを実行するポッドを作成します。
- エンドポイント スライス コントローラー (EndpointSlice コントローラー): サービスとポッド間の接続を通じてポッドの外部サービスを公開します。
- サービス アカウント コントローラー (ServiceAccount コントローラー): 新しい名前空間の既定のサービス アカウントを作成します
。論理的には、各コントローラーは別個のプロセスですが、複雑さを軽減するために、それらはすべて同じ実行可能ファイルにコンパイルされ、同じプロセスで実行されます。
-
cloud-controller-manager
これは、特定のクラウド プラットフォームの制御ロジックを組み込む、つまりクラスターをクラウド プロバイダーの API に接続するオプションのコンポーネントです。そのため、独自の環境またはローカル コンピューターで学習環境を実行する場合、デプロイされたクラスターにはこのコンポーネントは必要ありません。kube-controller-manager と同様に、コントローラー プロセスの実行も担当します。次の
コントローラーにはすべて、クラウド プラットフォーム ドライバーへの依存関係が含まれています。- ノード コントローラー: クラウド プロバイダーをチェックして、ノード終了応答後にノードが削除されたかどうかを判断するために使用されます。
- ルーティング コントローラー: 基盤となるクラウド インフラストラクチャでルーティングを設定するために使用されます。
- サービス コントローラー: クラウド プロバイダーのロード バランサーの作成、更新、削除に使用されます。
1.2 ノードのコンポーネント
ノード コンポーネントは各ノードで実行され、実行中のポッドの保守と Kubernetes オペレーティング環境の提供を担当し、ポッドの保守と実行を担当します。つまり、コンテナの操作はノード コンポーネントが担当します。
- Kubelet
は各ノードで実行され、すべてのコンテナーが Pod で実行されていることを確認し
ます。つまり、kubelet はさまざまなメカニズムによって提供される構成ファイルを受け入れ、これらの構成ファイルで記述されたコンテナーが正常に実行できることを確認します。 - kube-proxy は、
内部および外部のネットワーク相互作用のルールを実装するために使用されます。サービスを提供するために Pod を外部に公開する場合、つまり、コンテナーと外部の世界の間のネットワーク通信を担当する場合は、次のことを行う必要があります。クラスターからの内部ネットワークまたは外部ネットワークを許可するようにネットワーク ルールを構成します。ネットワーク通信用のコンテナー - コンテナ ランタイム (コンテナ ランタイム)
ポッドはコンテナをラップする必要があるため、コンテナ環境を実行する必要があります。
Kubernetes は、Containerd、CRI-0、Docker、およびその他の Kubernetes CRI 実装など、多くのコンテナ ランタイム環境をサポートします。
1.3 アドオン
- DNS は
プラグインですが、必須のコンポーネントであると言え、ほとんどすべての Kubernetes クラスターには DNS サービスが備わっています。 - Web インターフェイス (ダッシュボード)
ダッシュボードは、Kubernetes クラスターの共通の Web ベースのユーザー インターフェイスであり、クラスター内で実行されているアプリケーションを管理するためのプログラムです。 - コンテナー リソースの監視
コンテナー リソースの監視では、いくつかの一般的な時系列メトリクスを一元化されたデータに保存し、これらのデータを参照するための視覚的なページを提供します。 - クラスター レベルのログ
クラスター レベルのログは、集中ログ ストレージにログ データを保存し、検索および参照するためのインターフェイスを提供する役割を果たします。
2. クラスター構築
- minikube は
単なる Kubernetes エミュレーターであり、ノードが 1 つだけあるクラスターであり、そのマスターとワーカーはテストのために一緒にあります。 - ベアメタルのインストールに
は少なくとも 2 台のマシン (マスター ノード 1 台とワーカー ノード 1 台) が必要で、Kubernetes コンポーネントを自分でインストールする必要があり、設定がより面倒です。 短所: 設定が面倒、エコロジカル サポートの欠如、ロード バランサがない、クラウド ストレージ - クラウド プラットフォーム Kubernetes を直接使用して視覚的に構築し、わずか数ステップでクラスターを作成できる利点: 簡単なインストール、完全なエコロジー、ロード バランサー、クラウド ストレージ
- k3s
- 簡単なインストール、自動スクリプト完了利点: 軽量、低い構成要件、簡単なインストール、完全なエコロジー
ここにはクラスターの構築方法のデモはありません。Minikube は Docker の視覚化ツールを使用して自動的に構築され、ベアメタル インストールは一般に学習と使用のために使用されます。ブロガーはベアメタル上に構築されており、大量の実行メモリを必要とします。またはクラウドサーバーを使用する
要約する
このブログでは、Kubernetes のコンポーネントと、Kubernetes クラスターの各コンポーネントの機能をより深く理解しています。一般的に、コンポーネントには、コントロール プレーン コンポーネント、ノード ノード、プラグインの 3 種類があります。
- コントロール プレーン コンポーネントは通常、ポッドを展開せずに単一のマシン上で実行されます。
- Node ノードは、Pod の通常の操作とメンテナンスを行うためのものです。
- プラグインは人によって異なりますが、DNSプラグインは必須のプラグインと言え、その後の検討では応答時間の確認に別のプラグインを使用します