この記事では、K8s-Pod の意味と原理を深く理解することができます。

この記事は、breakDawn による Huawei クラウド コミュニティ「K8s-Pod の意味と原理の詳細な理解」から共有されたものです。

Kubernetes の概念には次の 5 つの概念があります。

  • コンテナ:画像管理の最小単位
  • 実稼働タスク Pod: リソース スケジューリングの最小単位であるコンテナ グループ
  • ノード ノード: クラスタ内の単一マシンに対応し、ハードウェア単位の最小単位です。
  • クラスター: クラスター全体に対応し、メタデータを処理するための最小単位です。
  • クラスター フェデレーション: 複数のクラスターに対応し、アベイラビリティ ゾーン全体のマルチ アクティビティおよびリージョン間の災害復旧の要件を満たします。

ポッドの概念は Kubernetes とともに導入されました。

Kubernetes プロジェクトは、Borg システムの経験と設計概念に基づいて作成されました。Borg システムでは、Pod の概念が重要な部分を占めています。したがって、Pod は 2014 年 6 月の Kubernetes プロジェクトの立ち上げ以来存在していると言えます。Pod を理解するには、まず、なぜ Pod の概念が必要なのかを理解する必要があります。

単一コンテナーと単一アプリケーションの理由

トラフィックの多い Web アプリケーション サーバーがあり、詳細なアクセス ログとエラー ログを記録する必要があるとします。同時に、分析、監視、異常時の即時アラートなどのために、これらのログをリアルタイムで処理したいと考えています。アプリケーション サーバーとログ プロキシ サービスを 2 つのプロセスとして扱いますが、このとき、これら 2 つのプロセスをコンテナーに配置できるかどうかを検討する必要があります。たとえば、次のような dockerfile を記述します。

Pythonから:3.8

# 依存関係をインストールする

pip install xxxxx を実行します

# ファイルをコピーする

コピー web_service.py /web_service.py

COPY log_processor.py /log_processor.py

# スクリプトを開始し、Web サービスとログ処理を同時に実行します (非推奨)

CMD Python /web_service.py および Python /log_processor.py

これはプロジェクトの初期段階でよく行われる方法ですが、おそらくログ機能を迅速に開発するために、dockefile で直接実行されます。

しかし、これは推奨される方法ではありません。

まず、dockerfile ではエントリポイントが 1 つだけ許可されます。

この「エントリポイント」は、コンテナーの起動時に実行され、コンテナー内の最初のプロセス (つまり、PID 1 のプロセス) になる、指定されたコマンドまたはスクリプトです。Docker の設計では、通常、各コンテナーはメインのアプリケーションまたはサービスを実行し、このアプリケーションまたはサービスはエントリーポイントを通じて開始されます。

一方、コンテナーでは、PID 1 のプロセスは、コンテナーを実行するときに Dockerfile の ENTRYPOINT または CMD 命令で指定されたプロセスです。このプロセスは、コンテナーのライフサイクルにおける init プロセスと同様の役割を果たします。PID 1 のプロセスが終了すると、Docker はコンテナーが作業を完了したか、何らかの理由で失敗したことを認識し、コンテナーを再起動するか、単に終了ステータスをログに記録するかを決定できます。

上記の 2 点に基づいて、コンテナーはデフォルトでメイン プロセス (PID が 1) のステータスを監視して、コンテナーを再起動する必要があるかどうかを判断することしかできません。

このとき、2番目のログ処理に問題があると、特別なヘルス処理を行わないと状態を検知できず、スケジューリングシステムに再度コンテナを引き上げさせることができなくなります。

したがって、コンテナ監視を有効にするには、単一のコンテナと単一のアプリケーションの特性を常に維持し、1 つのアプリケーションをコンテナ化することが推奨される戦略です。

空間共有、効率的なコミュニケーション

上記の例のもう 1 つの問題は、これら 2 つのコンテナが境界点を越えて割り当てられた場合、結果はどうなるかということです。

1 つは、2 つのノード間の通信がネットワークを通過するため、ネットワークの遅延と帯域幅が発生し、遅延が増加することです。ログ収集のような頻繁な操作の場合、わずかな遅延であっても、積み重なると重大なパフォーマンスの低下につながる可能性があります。

2 つ目はデータの一貫性です。ネットワークの問題により、特に適切な信頼性が保証されていないシステムでは、転送中にログ データが失われる可能性があります。または、ノードの時刻同期の問題により、ログ レコードと実際のイベントの間に時刻の不一致が生じる可能性があります。

したがって、これら2 つのコンテナを同じノードに割り当てる必要があります。

そこで、POD という概念が登場しました。これは 2 つのコンテナをカプセル化するために使用され、それらが常に同じノードにスケジュールされるようにします。

データ ファイルの読み取りと書き込みに加えて、同じ POD 内の 2 つのコンテナーは、オペレーティング システム ベースの信号通信 (ネットワークを経由しない) もサポートします。これには、2 つのコンテナーが同じ IPC 名前空間に依存する必要があります。

要約すると、ポッドは次のコンテンツを共有できます。

  • UTS 名前空間: すべてのコンテナは同じホスト名とドメイン名を持ちます。
  • ネットワーク名前空間: すべてのコンテナは同じネットワーク カード、ネットワーク スタック、IP アドレスなどを共有します。同じポッド内のコンテナが占有しているポートは競合できません。
  • IPC 名前空間: セマフォまたは POSIX 共有メモリを使用できます。
  • 時間名前空間: 同じシステム時間を共有します。

    注: ただし、POD 内の PID 名前空間とファイル名前空間は依然として分離されています。

POD共有スペースの原理

前述の POD は共有名前空間を提供でき、その機能は一時停止コンテナーを通じて実装されます。

一時停止コンテナは通常、非常に小さなコンテナ イメージです。その主なタスクは永続的な「一時停止」操作を実行することであるため、多くのリソースを消費せず、各ポッドの最初に開始されるコンテナーでもあります。

Pause コンテナは継続的に実行されるプロセスとして機能し、 Pod 内の他のコンテナに共通の親プロセスを提供します。これにより、すべてのコンテナが同じネットワーク名前空間 (つまり、すべてのコンテナが同じネットワーク インターフェイスや IP アドレスなどを参照できる) と IPC 名前空間を共有できるようになります。

一時停止コンテナはほとんどの時間を一時停止状態で過ごしますが、ポッドのライフサイクル中に状態の配信と調整の役割を果たします。たとえば、Pod が再起動または削除されたときに、状態の一貫性を調整して維持するのに役立ちます。

 

クリックしてフォローし、できるだけ早くHuawei Cloudの新しいテクノロジーについて学びましょう~

ブロードコム、既存のVMwareパートナープログラム終了を発表 . サイトBが2度クラッシュ、テンセントの「3.29」レベル1インシデント…2023年のダウンタイムインシデントトップ10を棚卸し、 Vue 3.4「スラムダンク」リリース、 ヤクルトが95Gデータ流出を確認 MySQL 5.7、Moqu、Li Tiaotiao... 2023 年に「停止」される (オープンソース) プロジェクトと Web サイトを棚卸す 「2023 中国オープンソース開発者レポート」が正式リリース 30 年前の IDE を振り返る: のみTUI、明るい背景色…… Julia 1.10が正式リリース Rust 1.75.0がリリース NVIDIAがGeForce RTX 4090 Dを中国で特別販売開始
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/u/4526289/blog/10558001