Kubernetes ポッドオーケストレーションとライフサイクルの詳細な説明

Kubernetes ポッドオーケストレーションとライフサイクルの詳細な説明

K8Sマスター基本アーキテクチャ

K8S クラスターの動作は、マスターノードとノードノード間の通信に依存します。パート 4 では、ポッドのライフサイクルをよりよく理解するために、まず K8S マスターの簡単なアーキテクチャ図を示します。以降の記事では、マスター、ノード、ポッドの関係を分析します。

マスターアーキテクチャ図:

で:

API サーバーは HTTP REST インターフェイスを提供します。これは、k8s 内のすべてのリソースを追加、削除、変更、およびチェックするための唯一のエントリ ポイントであり、クラスター制御のエントリ ポイントでもあります。

スケジューラは、リソースのスケジュール設定を担当するプロセスです。

コントローラ マネージャーは、すべてのリソース オブジェクトの自動化制御センターです。

Etcdはリソースオブジェクトのデータストレージサービスを提供します

各コンポーネントには多くの知識ポイントがあります。ここではマクロ的な印象を持つだけで十分です。今後の記事では、それらを 1 つずつ分析します。

ポッドオーケストレーションコンセプト

前回の記事の最後で、アプリケーションをk8sに移行する際の注意点について触れました。ここでもう一度強調しておきますが、仮想マシン上のアプリケーションを k8s に移行する場合は、Pod を使用してアプリケーション モジュールを構築する必要があります。この時点では、コンテナと仮想マシンの設計パターンが異なるため、アプリケーション モジュールを分割することの方が重要ですが、両者の関係をよりよく理解して比較するために、次の対応を想像することができます。

k8s-----オペレーティング システム

ポッド - 仮想マシン

コンテナプロセス

1. k8sは物理マシンのオペレーティングシステムに相当し、Podのk8s管理は仮想マシンを管理する物理マシンのオペレーティングシステムに相当する

2. Pod は仮想マシンに相当します。Pod には、仮想マシン内の多数のプロセスに対応する複数のコンテナを含めることができます。

3. コンテナはプロセスと同等です。コンテナの本質は実際にはプロセスです。

この概念により、Pod をより鮮明に理解できるかもしれません。アプリケーションの移行に戻りましょう。アプリケーションが存在すると仮定します。

Web サービス、ログ分析、MySQL データベース

3 つの主要モジュール:

ログ分析モジュールは Web サービス モジュールによって生成されたログを消費するため、Web サービスとログ分析は「非常に密接な関係」があり、同じサーバーに展開する必要があります。逆に、Web サービスと MySQL データベースは TCP-IP 経由でアクセスできるため、同じマシンに展開する必要はありません。このアプリケーションをコンテナ内で実行する場合、Web サービスはログ分析モジュールと同じ Pod にパッケージ化する必要があり、MySQL データベース サービスは別の Pod にデプロイできます。アプリケーションを k8s に移行すると、次のような構造になります。

異なるプロセスまたはタスクを同じ Pod 内に配置することは、基本的に Pod 配置の概念です。

Pod オブジェクトのプロパティとコンテナのプロパティは何ですか?

上記の分析から、コンテナが Pod に属する要素であることは簡単にわかります。YAML ファイルから見ると、コンテナは Pod の YAML ファイル全体のフィールドです。それでは、ポッドとコンテナの重要なプロパティを見てみましょう。

まず、ポッドのプロパティを見てみましょう。

1. スケジューリング、ネットワーク、ストレージ、セキュリティに関連するすべての属性は、基本的に Pod に関連しています。

スケジューリングは言うまでもありません。Pod は k8s の最小のスケジューリング単位です。ネットワークでは、同じ Pod 内のコンテナが Pod のネットワークを共有します。ストレージでは、異なるコンテナが Pod にボリュームをマウントすることで Pod のストレージを共有できます。セキュリティも Pod ディメンションに基づいて制御されます。

2. コンテナの Linux 名前空間に関連するすべての属性も Pod レベルにあります。

Pod 設計の本来の目的は、コンテナ間で名前空間を共有することです。

3. Pod 内のすべてのコンテナは、Pod レベルでホストのネームスペースを共有する必要があります。

これは理解しやすいです。Pod はホストのネームスペースを共有する必要があるため、Pod 内のコンテナは同じネームスペースを共有する必要があり、この設定は Pod レベルで行う必要があります。

コンテナの 2 つの重要なプロパティを見てみましょう。

1. ImagePullPolicy: この属性は、イメージのプル ポリシーを定義します。デフォルト値は always で、これは Pod が作成されるたびにイメージがプルされることを意味します。他に never と ifnotpresent という 2 つの値があります。これら 2 つの値は理解しやすいです。1 つはイメージをプルしないこと、もう 1 つはイメージが存在しない場合にのみイメージをプルすることです。ここで注意すべき点は、バージョン番号が最新に設定されている場合、ImagePullPolicy は常にデフォルト値に設定されることです。

2. ライフサイクル: 名前が示すように、コンテナのライフサイクル中に特定のアクションを実行します。コンテナの起動後または終了前に実行される特定の操作である postStart と preStop という 2 つの共通パラメータがあります。

ポッドのライフサイクル

Pod のライフサイクルは、主に Pod API のステータス部分に反映されます。Pod のライフサイクルには、開始から終了までの次のプロセスが含まれます。

1. 保留中。Pod の yaml ファイルが k8s に引き渡され、etcd に保存されたことを示します (etcd は k8s のメタ情報リポジトリです)。しかし、スケジュールの都合がつかなかったなどの理由で作成されませんでした。

2. 実行中。この言葉は誤解を招きやすいです。これは、Pod が正常にスケジュールされ、特定のノード サーバーにバインドされていることを意味します。Pod 内のすべてのコンテナーが正常に実行されているわけではありませんが、少なくとも 1 つは実行されています。

3. 成功: このステータスは、すべてのコンテナが起動され、終了したことを意味します。

4. 失敗: これは簡単に理解できます。これは、ポッド内のコンテナの少なくとも 1 つがゼロ以外のステータスで終了した、つまり異常終了したことを意味します。

5. 分からない。これは異常な状態であり、現在の Pod ステータスを kube-apiserver に正常に報告できないことを示しています。これは、マスター ノードとスレーブ ノード間の通信に問題がある可能性があります。

以下は実行状態の Pod です。

[root@VM-16-13-centos ~]# kubectl ポッドを取得します
名前 準備完了 ステータス 再起動 年齢
mysql-pd7jr 1/1 実行中 0 118d
myweb-60r22 1/1 実行中 0 80d

[root@VM-16-13-centos ~]#
 [root@VM-16-13-centos ~]# kubectl get pod mysql-pd7jr -o yaml
APIバージョン: v1
種類: ポッド
メタデータ:
  ...
仕様:
  ...
状態:
  ...
  ホストIP: 127.0.0.1
  フェーズ: 実行中
  ポッドIP: 172.17.0.2
  開始時間: 2020-11-20T09:01:39Z

以上がkubernetes podのオーケストレーションとライフサイクルの詳細な説明です。kubernetes podのオーケストレーションとライフサイクルの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • クラウドネイティブテクノロジーKubernetesスケジューリングユニットポッドの使用の詳細な説明
  • Kubernetesでポッドを作成する方法
  • Kubernetesでポッドを作成する方法
  • クラウドネイティブテクノロジー Kubernetes (K8S) の紹介
  • kubernetes k8s 入門 ポッドの定義

<<:  ウェブページを作るときに注意すべき5つのポイント

>>:  計算プロパティとリスナーの詳細

推薦する

MySQL 8.0.15 のダウンロードとインストールの詳細なチュートリアルは初心者にとって必須です。

この記事では、MySQL 8.0.15をダウンロードしてインストールするための具体的な手順を参考まで...

Struts2 ジャンプ後に CSS と JS が無効になる問題の解決策のアイデアと実装手順

struts2 アクションの実行後にジャンプした jsp が表示されると、css が機能しません。問...

ウェブサイトのビジュアルデザイン(画像とテキスト)における情報伝達の役割と方法

現代の Web ビジュアル デザインは、初期の情報の積み重ねから、その後のグラフィックスと抽象化、そ...

DockerがElasticsearch7.xを起動してエラーを報告する問題を解決する

Docker実行コマンドの使用docker run -d -p 9200:9200 -p 9300:...

Node.js でのクラスター作成に関する簡単な説明

目次クラスタクラスターの詳細クラスター内のイベントクラスター内のメソッドクラスター内の属性クラスター...

基本的なウェブページパフォーマンス最適化ルールの簡単な概要

ブラウザのウェブページを最適化するためのいくつかのルールページの最適化静的リソース圧縮ビルド ツール...

Vue 円形パーセンテージ プログレスバー コンポーネントの機能の実装

必要な方はどなたでも参考にしてください。試してみて問題が見つかった場合は、メッセージを残してお知らせ...

JavaScript配列の一般的なメソッドの詳細な説明

目次元の配列を変更しない方法1. 連結文法:パラメータ:戻り値: 2. 参加する文法:パラメータ:戻...

MySQL ストアド プロシージャのエラー処理例の詳細な説明

この記事では、例を使用して MySQL ストアド プロシージャのエラー処理について説明します。ご参考...

MySQL データベース クエリ パフォーマンス最適化戦略

クエリを最適化するExplain ステートメントを使用してクエリ ステートメントを分析するExpla...

MySQL 5.7.16 無料インストール版のインストールと設定方法のグラフィックチュートリアル

この記事ではMySQL 5.7.16のインストールと設定方法を記録します。具体的な内容は以下のとおり...

この記事はJavaScriptの変数とデータ型を理解するのに役立ちます

目次序文:親切なヒント:変数1. 免責事項2. 譲渡3. 2つの小さな文法上の詳細変数の命名規則なぜ...

Web デザイン: Web ミュージックの実装テクニック

<br />Web ページに音楽を挿入する場合、サフィックスに応じて異なるコードを記述す...

vue3のテレポート瞬間移動機能の使い方を詳しく解説

vue3テレポート瞬間移動機能の使用は参考用です。具体的な内容は次のとおりです。テレポートは通常、瞬...

MySQL全文インデックスを使用して検索エンジンのサンプルコードの簡易版を実現する

序文全文インデックスを使用できるのは Innodb と MyISAM ストレージ エンジンのみです ...