私はずっと前に掘った穴を埋めるためにこの記事を書きました[1]。 この記事で取り上げるコンポーネントのソース コード バージョンは次のとおりです。
コンテナ ランタイムは、コンテナの管理と実行を担当するコンポーネントです。コンテナ イメージをホスト上で実行される実際のコンテナ プロセスに変換し、イメージ管理、コンテナ ライフサイクル管理、リソース分離、ファイル システム、ネットワーク構成などの機能を提供します。 写真 一般的なコンテナ ランタイムには、さまざまなレベルの機能とパフォーマンスを提供する次のものがあります。ただし、それらはすべて Container Runtime Interface (CRI) に準拠しているため、Kubernetes またはその他のコンテナ オーケストレーション システムと統合してコンテナをスケジュールおよび管理できます。
CRI を使用すると、Kubernetes を再コンパイルせずに、複数のコンテナ ランタイムを「自由に」切り替えることもできます。簡単に言えば、CRI はコンテナ上のすべての操作を定義し、コンテナ オーケストレーション システムとコンテナ ランタイム間の標準インターフェイスとして存在します。 CRIの過去と現在写真 CRIはKubernetes 1.5[6]で初めて導入され、最初のバージョンはv1alpha1でした。これまで、Kubernetes は kubelet ソース コードで各コンテナ ランタイムのサポートを維持する必要がありました。 CRI を使用する場合、kubelet で CRI をサポートするだけで、中間層の CRI shim (grpc サーバー) を介してコンテナ ランタイムと対話できます。現時点では、さまざまな企業のコンテナ ランタイム実装がまだ CRI をサポートしていないためです。 昨年リリースされたKubernetes 1.24では、Dockershim[7]が正式に削除され、ランタイムとのやり取りが簡素化されました。 Kubernetes は現在、CRI の v1alpha2 と v1 をサポートしています。 v1 バージョンは Kubernetes 1.23 で導入されました。 kubelet が起動するたびに、最初に v1 API を使用してコンテナ ランタイムに接続しようとします。それが失敗した場合は、v1alpha2 を試します。 Kubelet と CRIこれまで行ってきたkubeletソースコード分析[8]では、ファイル、apiserver、httpからの変更を継続的に監視し、ポッドのステータスを更新します。その記事を書いたとき、分析はここで終了していました。この後の作業はコンテナランタイム[9]に引き渡され、サンドボックスと各種コンテナの作成と操作が完了します。`kubeGenericRuntimeManager#SyncPod()`[10]を参照してください。 kubeletが起動すると、CRIクライアント[11]を初期化し、コンテナランタイムとの接続を確立し、CRIのバージョンを確認します。 ポッド作成プロセス中、CRI はコンテナ ランタイムと対話します。
参照ソースコード
次に、Containerd を例にして、kubelet リクエストを処理する方法を見てみましょう。 Containerd と CRIContainerdの`criService`[15]は、CRIインターフェース`RuntimeService`[16]と`ImageService`[17]のRuntimeServiceServerとImageServiceServerを実装しています。 cirServiceはさらに`instrumentedService`[18]にパッケージ化され、すべての操作がk8s.io名前空間で実行されるようにします。 ランタイムサービスサーバーイメージサービスサーバーイメージサービスサーバー[20] Containerd のソースコードを見るために、サンドボックスの作成を例に挙げてみましょう。 Containerd ソースコード分析サンドボックスコンテナを作成する要求は、CRI UDS(Unixドメインソケット)[21]インターフェース/runtime.v1.RuntimeService/RunPodSandboxを介してcriServiceの処理フローに入ります。 criService#RunPodSandbox() では、サンドボックス コンテナの作成と実行、およびコンテナの状態が正常であることを確認する役割を担います。
参照ソースコード
要約するCRI は、基盤となるコンテナ ランタイムと対話するための標準化されたインターフェースを提供します。これは、Kubernetes エコシステムの開発と成長にとって非常に重要です。
参考文献[1] 昔私が掘った落とし穴: https://atbug.com/how-kubelete-container-runtime-work-with-cni/#Create-pod [2] コンテナ: https://kubernetes.io/docs/setup/production-environment/container-runtimes/#containerd [3] CRI-O: https://kubernetes.io/docs/setup/production-environment/container-runtimes/#cri-o [4] Dockerエンジン: https://kubernetes.io/docs/setup/production-environment/container-runtimes/#docker [5] Mirantis コンテナ ランタイム: https://kubernetes.io/docs/setup/production-environment/container-runtimes/#mcr [6] Kubernets 1.5: https://kubernetes.io/blog/2016/12/container-runtime-interface-cri-in-kubernetes/ [7] Dockershimは正式に削除されました: https://kubernetes.io/blog/2022/05/03/dockershim-historical-context/ [8] Kubeletソースコード分析: https://mp.weixin.qq.com/s/O7k3MlgyonNtOUxNPrN8lg [9] コンテナランタイム: https://kubernetes.io/docs/setup/production-environment/container-runtimes/ [10] kubeGenericRuntimeManager#SyncPod(): https://github.com/kubernetes/kubernetes/blob/023d6fb8f4a7d130bf5c8e725ca310df9e663cd0/pkg/kubelet/kuberuntime/kuberuntime_manager.go#L711 [11] CRIクライアントを初期化する: https://github.com/kubernetes/kubernetes/blob/14fcab83adf319b8ef8e82e1054412309c46f535/pkg/kubelet/kubelet.go#L285 [12] pkg/kubelet/kuberuntime/kuberuntime_sandbox.go#L39: https://github.com/kubernetes/kubernetes/blob/ea929715339da4553589df61c8638bac3bcae618/pkg/kubelet/kuberuntime/kuberuntime_sandbox.go#L39 [13] pkg/kubelet/kuberuntime/kuberuntime_container.go#L176: https://github.com/kubernetes/kubernetes/blob/3946d99904fe37ea04b231a8d101085b9b80b221/pkg/kubelet/kuberuntime/kuberuntime_container.go#L176 [14] pkg/kubelet/images/image_manager.go#L89: https://github.com/kubernetes/kubernetes/blob/de37b9d293613aac194cf522561d19ee1829e87b/pkg/kubelet/images/image_manager.go#L89 [15] criサービス: https://github.com/containerd/containerd/blob/1764ea9a2815ddbd0cde777b557f97171b84cd02/pkg/cri/server/service.go#L77 [16] ランタイムサービス: https://github.com/kubernetes/cri-api/blob/master/pkg/apis/runtime/v1/api.proto#L34 [17] イメージサービス: https://github.com/kubernetes/cri-api/blob/master/pkg/apis/runtime/v1/api.proto#L128 [18]instrumentedService: https://github.com/containerd/containerd/blob/d3c7e31c8a8f7dc3f0ef0d189fda5a7caca42ce2/pkg/cri/server/instrumented_service.go#L32 [19] ランタイムサービスサーバー: https://github.com/kubernetes/cri-api/blob/v0.25.0/pkg/apis/runtime/v1/api.pb.go#L9301 [20] イメージサービスサーバー: https://github.com/kubernetes/cri-api/blob/v0.25.0/pkg/apis/runtime/v1/api.pb.go#L10131C9-L10131C9 [21] UDS(Unixドメインソケット): https://en.wikipedia.org/wiki/Unix_domain_socket [22] ソースコード分析:kubeletとコンテナランタイムの観点からCNIを使用する:https://atbug.com/how-kubelete-container-runtime-work-with-cni/#Create-sandbox-container [23] pkg/cri/server/sandbox_run.go#L61: https://github.com/containerd/containerd/blob/f2376e659ffa55e4ff2578baf4e4c7aab54042e4/pkg/cri/server/sandbox_run.go#L61 [24] services/tasks/local.go#L156: https://github.com/containerd/containerd/blob/bbe46b8c43fc2febe316775bc2d4b9d697bbf05c/services/tasks/local.go#L156 |
<<: Kubernetesストレージ101: データ駆動型のパワーを解き放つKubernetesストレージの概念の簡単な紹介
>>: k8sでのPrometheusの導入と実践的な運用の上級記事
【51CTO.comオリジナル記事】 [[329511]]突然の流行病に多くの企業が不意を突かれ、閉...
月給5,000~50,000のこれらのプロジェクトはあなたの将来ですマーケティング プロセスでは、広...
電子商取引を行う人なら誰でも、新規顧客をポータル広告、入札広告、またはその他のマーケティング手法で獲...
Turnkeyinternet は 1999 年に設立された IDC で、米国の老舗 IDC と言え...
2009年、「マイクロブログ」という新しい言葉が圧倒的な勢いで世界を席巻し、オバマやH1N1などの言...
[概要] これらの膨大な量のデジタル通貨は昨年10月に押収され、6月27日からオークションにかけられ...
市場の細分化が進むにつれて、インターネット マーケティング、SEO 最適化、SEM 最適化はより専門...
ウェブマスターの友人は皆、検索エンジンが常に更新され、価値のあるページが常に追加され、価値のないペー...
中国人は一般的にアメリカの西海岸に集まるのが好きで、東海岸にはあまり注意を払いません。 Vultr ...
1年以上前、まだインターンだった頃、私は偶然 SEO の道に足を踏み入れました。本当にその道を進みた...
今日はドイツのコンタボから超巨根の金持ち2人を紹介します。超高構成、超安価、1Gbps無制限のトラフ...
タオバオアフィリエイトは2009年に登場しました。安定性、収益性、評判の良さ、プロモーション方法の多...
myserverplanet は、オプションのコンピュータ ルーム 4 台を備えた特別価格のサーバー...
マルチクラウド、5G の登場、コンテナ化の終焉により、クラウド コンピューティングは大きな混乱に見舞...
インターネット企業に勤めているあなたは、たくさんのウェブサイトを見て、自分なりの美的ビジョンを持って...