グラフィカルなkubernetesポッド作成プロセスの大きな秘密
https:// www.kubernetes.org.cn/6766.html
kubernetesでのコンテナの作成は、間違いなく複雑なプロセスであり、さまざまな内部コンポーネントの統合コラボレーションや、外部CRIランタイムとのドッキングが含まれます。この記事では、コンテナ作成プロセスのさまざまな詳細を探索し、さまざまなコンポーネントのコラボレーションプロセスを理解しようとしています。したがって、フォローアップに問題がある場合は、少し方向を確認できる場合があります。
1.基礎工事
1.1コンテナ管理スレッドモデル
1.2イベント駆動型の最終的な整合性
1.3コンポーネントのコラボレーションプロセス
2.Kubeletコンテナー作成プロセス
2.1アドミッションチェック用のポッドの取得
kubeletのイベントソースには主に2つの部分が含まれます:静的ポッドとApiserver、ここでは通常のポッドのみを考慮し、管理のためにPodManagerにポッドを直接追加し、アドミッションチェックを実行します
アドミッションチェックには、主に2つの主要なコントローラーが含まれます。エビクション管理と事前選択チェックエビクション管理は、主に現在のリソースプレッシャーに基づいて、対応するポッドが現在のリソースプレッシャーを許容するかどうかを検出します。事前選択チェックは、現在アクティブなコンテナーと現在のノードに基づいています。アフィニティチェックなど、現在のポッドの基本的な動作環境を満たしているかどうかを確認するための情報。現在のポッドの優先度が特に高い場合、または静的なポッドの場合は、リソースのプリエンプトを試み、QOSレベルに従ってグレード付けされます。動作環境を満たすための優先権
2.2イベントパイプラインとコンテナ管理のメインスレッドを作成する
kubeletは、新しく作成されたポッドを受信すると、最初にそのポッドのイベントパイプラインを作成し、コンテナー管理のメインスレッドを開始してパイプラインのイベントを消費し、最後の同期時間(ローカルから)に基づいて現在のkubeletの最新のイベントを待ちますpodCacheから取得)、新しく作成されたポッドの場合、主にPLEGの更新時間操作を介して行われ、ブロードキャストのデフォルトの空の状態が最新の状態として使用されます。
2.3最新のステータスを同期する
イベントソースから取得した最新のステータス情報とポッド情報がローカルのpodCacheから取得されると、statusManagerおよびprobeManagerのポッド内のコンテナーの現在のステータスと連動して更新され、現在認識されている最新のポッドステータスが取得されます
2.4アクセス制御検査
前の承認チェックは、ポッドが実行するリソースのハード制限のチェックであり、ここでの承認チェックは、コンテナランタイムと一部のソフトウェア動作環境チェックのバージョンであるソフト状態です。チェックがここで失敗すると、対応するコンテナのステータスについて話しますブロックに設定
2.5コンテナのステータスを更新する
承認チェックに合格した後、statusManagerが呼び出されて、最新のPOdステータスを同期します。これは、apiserverと同期される場合があります
2.6 Cgroup設定
更新が完了すると、PodCOntainerManagerが起動します。主な機能は、QOSレベルに従って対応するポッドのCgroup設定を更新することです。
2.7ポッド基本運用環境の準備
次に、kubeletは、ポッドデータディレクトリの作成、ミラーキーの取得、ボリュームマウントの完了の待機などを含む、ポッド作成のための基本的な環境を準備します。ポッドデータディレクトリの作成は、主にポッド、プラグイン、ボリュームディレクトリ、およびキー情報は、ポッド構成のイメージプルキーを介して生成されます。kubeletによるコンテナーの作成作業は、基本的にこの時点で完了しています。
3.ContainerRuntime
3.1ポッドコンテナーの変更を計算する
計算コンテナーの変更には、主に次のものが含まれます:ポッドのサンドボックスが変更されたかどうか、短い宣言サイクルコンテナー、初期化コンテナーが完了し、ビジネスコンテナーが完了しました。それに応じて、いくつかの対応するコンテナーのリストを取得します。強制終了する必要があるコンテナーのリスト、必要性開始されたコンテナーのリスト。最初のコンテナーが完了していない場合、実行するビジネスコンテナーは、開始する必要のあるコンテナーのリストに追加されません。この場所は2つの段階にあることがわかります
3.2初期化に失敗し、終了しようとしました
以前の初期化コンテナーの失敗が以前に検出された場合、現在のポッドのすべてのコンテナーとサンドボックスに関連付けられているコンテナーをチェックします。実行中のコンテナーがある場合、それらはすべてKill操作を実行し、操作が完了するまで待機します
3.3不明な状態のコンテナの補償
いくつかのポッドコンテナーが既に実行されているが、それらのステータスがまだ不明である場合、この場所で統合プロセスが実行され、すべてが強制終了され、次の再起動のためにクリーンアップされます。ここで、3.2はブランチのみを実行します、しかし、中心的な目標は、失敗したか、ステータスを取得できないコンテナをクリーンアップすることです
3.4コンテナサンドボックスを作成する
ポッドコンテナを開始する前に、まずサンドボックスコンテナが作成されます。現在のポッドのすべてのコンテナは、ポッドに対応するサンドボックスと同じネームスペースを共有して、ネームスペース内のリソースを共有します。サンドボックスの作成はより複雑で、後で紹介します。
3.5ポッド関連のコンテナーを起動する
ポッドコンテナーは現在、3つのカテゴリに分類されます:短ライフサイクルコンテナー、初期化コンテナー、ビジネスコンテナーです。起動シーケンスも左から右です。コンテナーの作成が失敗した場合、コンテナーの作成はバックオフメカニズムによって遅延されます。ここでcontainerRuntimeの下でコンテナーを開始するプロセスを紹介しましょう
3.5.1コンテナイメージがプルされているかどうかを確認する
イメージのプルは、最初に対応するコンテナーイメージをスプライスし、次に、以前に取得したプルのキー情報とイメージ情報をCRIランタイムに渡して、基になるコンテナーイメージをプルします。もちろん、ここにはさまざまなバックオフがあります。 kubeletのパフォーマンスに影響を与える頻繁なプルエラーを回避するメカニズム
3.5.2コンテナ構成の作成
コンテナー構成の作成とは、主にコンテナーの操作に対応する構成データを作成することで、主に次のものが含まれます:Podホスト名、ドメイン名、マウントされたボリューム、configMap、シークレット、環境変数、マウントされたデバイス情報、マウントされるディレクトリ情報、ポートマッピング情報、環境に応じて生成および実行されるコマンド、ログディレクトリ、その他の情報
3.5.3 runtimeServiceを呼び出してコンテナーの作成を完了する
runtimeServiceを呼び出してコンテナー構成情報を渡し、CRIを呼び出し、最後にコンテナーの作成インターフェースを呼び出してコンテナーの状態を完了します
3.5.4 runtimeServiceを呼び出してコンテナーを開始する
以前に作成されたコンテナーによって返されたコンテナーIDを使用して、対応するコンテナーを開始し、コンテナーの対応するログディレクトリを作成します。
3.5.5コンテナのコールバックフックを実行する
コンテナーがPostStartフックで構成されている場合、対応するフックがここで実行されます。フックタイプがExecクラスの場合、CNIのEXIインターフェースが呼び出され、コンテナーでの実行が完了します
4.サンドボックスコンテナを実行する
4.1サンドボックスイメージのプル
まず、サンドボックスの画像を取得します
4.2サンドボックスコンテナを作成する
4.2.1アプリケーションSecurityContext
コンテナーが作成される前に、コンテナーSecurityContextの構成は、主に特権レベル、読み取り専用ディレクトリ、実行中のアカウントグループなどの情報を含むSecurityContextの割り当て情報に従って構成されます。
4.2その他の基本情報
SecurityContextのアプリケーションに加えて、切断、OOMScoreAdj、Cgroupドライバーなどの情報をマップすることもできます。
4.3コンテナを作成する
上記のさまざまな構成情報に従って、コンテナを作成します
4.3チェックポイントを作成する
チェックポイントは、主に現在のサンドボックスの設定情報をシリアル化し、現在のスナップショット情報を保存することです
4.4サンドボックスコンテナを起動する
サンドボックスコンテナーが開始されると、StartContainerが直接呼び出され、以前に作成されたコンテナーによって返されたIDが渡されてコンテナーの開始が完了し、コンテナーをオーバーライドするDNS構成ファイルがこの時点で上書きされます。
4.5コンテナのネットワーク設定
コンテナーのネットワーク構成は、主にCNIプラグインを呼び出してコンテナーネットワークの構成を完了することです。
5.ポッドコンテナーの起動の概要
この記事はベーシックバージョンであり、今後もこのバージョンにさまざまな詳細を重ねていく予定です。興味のある友人がサポートしてくれます。ありがとうございます。
電子書籍のアドレスを読むk8sソースコード:https ://www.yuque.com/baxiaoshi/tyado3