クラウドネイティブテクノロジーKubernetesスケジューリングユニットポッドの使用の詳細な説明

クラウドネイティブテクノロジーKubernetesスケジューリングユニットポッドの使用の詳細な説明

k8s の最小のスケジューリング単位 --- pod

前回の記事では、k8s が解決できる問題を簡単に紹介しました。簡単に言うと、k8s が解決する問題は、コンテナのオーケストレーションとスケジューリングです。その核となる価値は、大規模クラスターで実行されるタスク間には実際にはさまざまな関係があることにあります。これらの関係の処理は、タスク オーケストレーションとシステム管理の最も難しい部分です。k8s は、この問題のために生まれました。

この文章は理解するのが難しいです。まずは既存の知識から始めて、それを解き明かしながらゆっくりと理解していきます。コンテナの本質はプロセスであり、次の 3 つの部分から構成されることはすでにわかっています。

コンテナがクラウド環境内のプロセスである場合、k8s はクラウド環境内のオペレーティング システムと考えることができます。

オペレーティング システムでは、プロセスは常に独立して実行されるわけではなく、プロセス グループとして実行されることがよくあります。実際にアプリケーションをデプロイする場合、アプリケーションは Docker コンテナ内で分離された形で実行されることはあまりありません。アプリケーション間にはさまざまな関係があります。場合によっては、バンドルと同様に、同じマシン上で実行し、相互にアクセスする必要があります。たとえば、2 つのコンテナがファイルを交換したり、特定の Linux 名前空間を共有したりする必要がある場合などです。このような関係を「超親密な関係」と呼びます。

上記の前提に基づいて、k8s は設計当初からこれを考慮に入れました。そのため、設計時にはコンテナを最小のスケジューリング単位として使用せず、新しい概念のポッドを k8s の最小のスケジューリング単位として使用しました。各ポッドには複数のコンテナを含めることができます。このように、コンテナにデプロイされたアプリケーションはバンドルされており、つまり、1 台のマシンにのみデプロイでき、デプロイは成功または失敗のいずれかであり、中間状態の可能性はありません。

Pod とコンテナの関係は何ですか?

Pod は論理的な概念であり、その本質は特定のリソースを共有するコンテナのグループであることに注意してください。正確に言うと、同じポッド内のコンテナは同じネットワーク名前空間を共有し、もちろんマウントされたボリュームなどのリソースも共有できます。

いわゆる共有は依存ではなく平等です。

2 つのコンテナ A と B があり、A が B に依存している場合は、A を B の後に起動する必要があります。 A と B のステータスが等しい場合、A と B の起動順序に厳密な要件はありません。これが真の共有です。では、共有ネットワーク リソースを事前に作成するのは誰でしょうか?

Pod に複数のアプリケーション コンテナが含まれている場合、これらのアプリケーション コンテナを関連付けるにはインフラ コンテナが必要です。次のようになります:

K8S では、インフラ コンテナーはリソースをほとんど消費しません。pause と呼ばれるイメージを実行するだけなので、pause コンテナーとも呼ばれます。占有するディスク サイズは 100 ~ 200 KB です。インフラの目的は、ネットワーク名前空間を作成し、アプリケーション コンテナ A とアプリケーション コンテナ B をこのネットワーク名前空間に追加することです。

ポッド内のコンテナ A とコンテナ B の場合:
1. localhost を使用して直接通信できます。
2. それらが認識するネットワーク デバイスは、インフラ コンテナーが認識するネットワーク デバイスとまったく同じです。
3. ポッドには IP アドレスが 1 つだけあり、これはポッドのネットワーク名前空間に対応する IP アドレスです。
4. もちろん、他のすべてのネットワーク リソースは 1 つの Pod と Pod 内のすべてのコンテナによって共有されます。
5. Pod のライフサイクルは Infra コンテナとのみ一致し、コンテナ A および B とは関係ありません。
6. 同じポッド内のすべてのユーザーコンテナについては、そのインバウンドおよびアウトバウンドトラフィックもインフラコンテナを介して完了するとみなすことができます。

この設計モードでは、同じボリュームをマウントするのは非常に簡単です。Pod の初期化 yaml ファイルでボリューム パラメータを構成するだけです。具体的な内容は後で共有します。

コンテナの場合、コンテナはアプリケーションではなく 1 つのプロセスのみを管理できます。アプリケーションをクラウドに移行する場合、アプリケーションをいくつかのプロセスに分割し、アプリケーション モジュール間に「超密接な関係」があるかどうかを検討する必要があります。超密接な関係にあるプロセスは 1 つの Pod にデプロイし、他のプロセスは別の Pod にデプロイすることができます。このアイデアを使用してアプリケーションを分割することは、コンテナ設計の本来の意図と一致しています。

上記は、クラウドネイティブテクノロジーKubernetesスケジューリングユニットポッドの使用に関する詳細な説明の詳細な内容です。Kubernetesスケジューリングユニットポッドの使用の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Kubernetes YAMLファイルの使用
  • Kubernetes 環境に単一ノードの Redis データベースをデプロイする方法
  • client-go ツールを使用して kubernetes API インターフェースを呼び出す詳細なチュートリアル (v1.17 バージョン)
  • Kubernetes プローブの紹介

<<:  MySQL pt-slave-restart ツールの使い方の紹介

>>:  Jsonフォーマットの詳細な説明

推薦する

MySQLが基礎データ構造としてB+ツリーを使用する理由

MySQL の基盤となるデータ構造が B+ ツリーであることは誰もが知っていますが、ではなぜ赤黒ツリ...

docker のインストールが完了し、bridge-nf-call-iptables が無効であると報告される問題を解決します

Centos マシンで docker のインストールが完了したら、docker info コマンドを...

VueでEchartsチャートの幅と高さの適応を実現する実践

目次1. インストールとインポート2. 手ぶれ補正機能を定義する3. チャートコードを描くinit ...

docker の run/cmd/entrypoint の違いの詳細な説明

Dockerfile では、run、cmd、entrypoint はすべてコマンドを実行するために使...

MySQL における in と exists の使い方と違いの紹介

まずコードを書いて (int i=0;i<1000;i++){ (int j=0;j<5...

あまり多くのコードを書かずに、ハイパーリンクを使ってシンプルで美しいカスタムチェックボックスを実装できます。

今日ふと、HTML でチェックボックスのスタイルを変更できる範囲が限られていることと、チェックボック...

正の整数かどうかを判断するMYSQLカスタム関数の例コード

関数を記述できます。主に正規表現を使用して判断を行います。入力文字が空の場合は、「-」を使用して置き...

JavaScript マクロタスクとマイクロタスクの実行順序についての簡単な説明

目次1. JavaScriptはシングルスレッドです1. 同期タスク2. 非同期タスク2. タスクキ...

Docker のコンテナ データ ボリュームの概要

目次Dockerコンテナのデータ量データボリュームの使用方法1: コマンド-vを使用して直接マウント...

HTML+CSSプロジェクト開発経験概要(推奨)

ここ数日ブログを更新していませんでした。簡単な HTML+CSS プロジェクトを終えたところです。数...

MySQLのビューとインデックスの使い方と違いの詳細な説明

MySQL ビュー簡単に言えば、MySQL ビューは SELECT コマンドを定義するためのショート...

Vue ポーリング リクエスト ソリューションの完全な例

世論調査の理解実際、ポーリングの焦点はループ自体ではなく、実行間の間隔にあります。 Ajax は非同...

MySQL インデックスの詳細な説明

目次1. インデックスの基本1.1 はじめに1.2 インデックスの仕組み1.3 インデックスの種類1...

JavaScript プロトタイプの詳細

目次1. 概要1.1 プロトタイプとは何ですか? 1.2 プロトタイプを入手する2. プロトタイプの...

CSS3のtransform属性で実装される4つの機能

CSS3 では、transform 関数を使用して、テキストや画像の回転、拡大縮小、傾斜、移動という...