著者: Qiu Ming、PaaS 製品部門、中国モバイル クラウド機能センター 近年、コンテナ技術は急速に世界を席巻し、アプリケーションの開発、配信、運用モードを覆しています。コンテナ テクノロジーは、クラウド ネイティブ テクノロジーの分野の技術的な基礎として、今日最も人気のあるサーバー側テクノロジーの 1 つでもあります。コンテナとコンテナオーケストレーション技術は、インフラストラクチャ分野で最もホットなキーワードとなっています。コンテナとそれを取り巻くエコシステム技術の活発な発展により、コンテナ コミュニティはオープン ソース コミュニティで最も活発なエコシステムの 1 つになりました。同時に、コンテナ技術を中核とするコンテナエコシステムは、クラウドコンピューティングやインターネットなどの分野で広く利用されるようになりました。 01コンテナの概念コンテナ技術の概念は 2000 年にはすでに登場しており、当初は chroot 環境でのプロセス分離に使用されていました。 2013 年に Docker プロジェクトが正式にリリースされ、Linux コンテナ テクノロジーが徐々に世界を席巻するようになりました。 2014 年に Kubernetes プロジェクトが正式にリリースされ、コンテナ テクノロジはオーケストレーション システムと連携して進歩し始めました。 コンテナの本質は、分離を試み、リソースが制限されているプロセスです。使用される分離テクノロジはすべて Linux カーネルに基づいており、リソースの分離には名前空間が使用され、リソースの制限 (CPU、メモリ、ストレージ、ネットワークの使用制限) には cgroup が使用されます。言及する必要がある分離テクノロジの 1 つは仮想マシンです。以下の仮想マシンとコンテナの比較表から、仮想マシンの動作原理の最も重要な部分はハイパーバイザー層であることがわかります。ハイパーバイザー層は、ハードウェア仮想化機能を実行し、オペレーティング システムの実行に必要なさまざまなハードウェア (CPU、メモリ、I/O デバイスなど) をシミュレートし、これらの仮想ハードウェアにオペレーティング システムのゲスト OS をインストールします。コンテナには独自の OS はありませんが、コンテナ デーモンを通じてホスト カーネルを直接共有します。コンテナ プロセスに対するすべての制限は、ホスト オペレーティング システム自体の機能に基づいています。そのため、コンテナも非常に軽量です。 02ポッドコンセプト2.1 オペレーティングシステムの例まず、仮想マシンで簡単な Java プログラムを実行し、次に pstree コマンドを実行すると、この Java プログラムが実際にはスレッドのグループ (Linux の場合) で構成されており、スレッドがリソースを共有して連携して Java プログラムの業務作業を完了していることがわかります。 2.2 ポッド実装の原則クラウド時代のオペレーティングシステムとして称賛されているKubernetesでは、コンテナはプロセスに例えられますが、ではポッドはどうでしょうか?実際、Pod は単なる抽象的な論理概念です。これは、前の例の Java プログラムと比較できます。これは、同じネットワーク (ネットワーク名前空間)、ストレージ (ボリューム)、およびその他のリソースを共有するグループ (1 つ以上の) コンテナーのコレクションです。 2.2.1 ネットワーク共有まず、Pod 内にインフラストラクチャ コンテナが作成されます。次に、他のコンテナは、ネットワーク名前空間に参加することで、インフラストラクチャ コンテナのネットワークに関連付けられます。これにより、ポッド内のコンテナ間でネットワーク リソースを共有できるようになります。したがって、ベース コンテナは常に Pod 内で最初に作成されるコンテナであり、他のコンテナが参加するのを待機します。 Pod のライフサイクルは、基盤となるコンテナのライフサイクルとのみ一致します。基本的なコンテナは、k8s.gcr.io/pause と呼ばれる非常に小さなイメージで、サイズは約 100 ~ 200 KB です。これはアセンブリ言語で記述されたコンテナであり、常に「一時停止」状態にあります。 2.2.2 ストレージ共有ポッドはボリュームを通じて共有ストレージを実装します。最初にポッドがボリュームにバインドされ、その後、ポッド内のコンテナはボリュームをマウントすることを宣言している限り、ボリュームに対応するホスト ディレクトリを共有できます。すべてのコンテナに表示されるボリューム ディレクトリの内容は同じです。次の YAML ファイルは、単一の Pod で 2 つのコンテナを起動する例を示しています。 APIバージョン: v1 03コンテナデザインパターンKubernetes コミュニティは、Kubernetes クラスターのマイクロサービス モデルに基づいて、一般的な分散システムの問題を解決する一連のコンテナー設計パターンを提案しています。それらは 3 つのカテゴリに分類できます。
3.1 単一コンテナ管理モードKubernetes コンテナ設計モードでは、単一コンテナ管理モードが最もシンプルです。単一のコンテナ マイクロサービス インスタンスを起動するコマンドは、Docker ネイティブ コマンドに似ています。 kubectl run nginx --image=nginx:latest -n qiuqiu を実行します。 3.2 シングルノードマルチコンテナモード関心の分離 (SOC) の原則に基づき、コンテナ化されたアプリケーションはコンテナ間の責任を分離します。各コンテナは、最も得意とする業務のみを実行し、その他の追加タスクは他のコンテナ (サイドカー コンテナ) に割り当てる必要があります。シングルノード マルチコンテナ モードでは、Kubernetes の Pod 内のすべてのコンテナが同じストレージ スペース (ボリューム) とネットワーク アドレス スペース (ネットワーク名前空間) を共有できるという事実を利用して、SOC の原則を完全に反映します。 3.2.1 サイドカーパターンサイドカー モードは、主に同じポッド内のコンテナのストレージ共有機能を活用します。次の図は、アプリケーション ログ収集サービスのシナリオを示しています。アプリケーション サービス A (Nginx など) の場合、ログ (access.log など) の永続的な保存と管理に重点が置かれているわけではありませんが、運用および保守担当者がサービスの異常をトラブルシューティングするためにログを使用する必要がある場合があります。したがって、ログ コレクター サービスは必要な補助ツールです。関心の分離 (SOC) の原則に従って、ログ コレクター サービスのサイドカー コンテナーをアプリケーション サービスの Pod に追加できます。アプリケーション サービス コンテナーはメイン コンテナーとしてビジネスにのみ集中する必要があり、ログ情報はサイドカー コンテナーによって収集および処理されます。実稼働環境では、Filebeat や Logstash などのツールを使用してログを収集し、ElasticSearch クラスターに配布できます。サイドカー モードでは、通常補助ツールとして使用されるサイドカー コンテナー イメージが標準化され、再利用可能になるため、反復的なアップグレードを行うたびにアプリケーション サービスを補助ツールの実行可能ファイルとともにパッケージ化する必要がありません。 次の yaml ファイルは、Pod を定義し、2 つのコンテナ (ベース コンテナを除く) を起動し、emptyDir ボリュームを共有ストレージとして使用します。サイドカー コンテナは通常、定義の 2 番目にリストされるため、kubectl コマンドを実行すると、デフォルトのターゲットはメイン コンテナになります。 Nginx サービスがメイン コンテナとして使用され、生成されたログは共有ストレージ ボリュームにマウントされた /var/log/nginx ディレクトリに書き込まれます。これにより、Nginx サービス ログがコンテナの標準出力形式で出力されるのを防ぎ (つまり、/dev/stdout および /dev/stderr にソフト接続されてコンテナのフォアグラウンド ログに出力されるのを防ぎ)、access.log ファイルと error.log ファイルに書き込みます。最後に、サイドカー コンテナ (busybox) が関連するログを処理します。 APIバージョン: v1 3.2.2 アンバサダーパターンディプロマット モードは、主に同じ Pod 内のコンテナがネットワーク アドレス空間を共有できる機能を使用します。ディプロマット パターンには、ディプロマット コンテナーとも呼ばれるサイドカー コンテナー (SideCar コンテナー) があり、アプリケーション コンテナーから他のサービスへの接続をプロキシする役割を担います。たとえば、ほとんどすべてのアプリケーションでは、ある段階でデータベース接続が必要になります。アプリケーション開発の反復には、開発データベース、テスト データベース、運用データベースなど、複数の環境データベースが存在します。アプリケーションの Pod を作成する場合、開発者/実装者は、環境変数または configMap を通じてデータベース接続構成項目を変更することで、データベースを切り替えることができる必要があります。この場合、実行環境に応じて、外交官モードを使用して、データベース接続を対応するデータベースにプロキシすることもできます。開発者/実装者は、構成項目を変更する必要はありません (開発環境のデータベース構成項目を使用する場合と同様)。テスト環境または本番環境にデプロイされると、Diplomat コンテナーは実行されている環境 (リフレクション モードなど) を検出し、正しいデータベースに接続します。 次の YAML ファイルは、さまざまな環境の Redis ライブラリにアクセスする Redis クライアントの例を示しています。メイン コンテナーは Redis クライアントによって提供され、Diplomat コンテナーは malexer/twemproxy イメージに基づいて起動されるコンテナーであり、Redis データ サービスへのリレー リンクを提供します。 malexer/twemproxy イメージでは、Redis インスタンスを address:port:weight の形式で環境変数として渡す必要があることに注意してください (行 13 ~ 15)。デフォルトでは、コンテナはポート 6380 をリッスンします (追加の高度な構成は github で入手できます: https://github.com/malexer/docker-twemproxy)。 # Redis クライアント yaml 次の図は、アプリケーション (Redis クライアントによってシミュレート) が localhost:6380 への要求を開始し、Diplomat コンテナーが要求を受信して、構成で定義されている Redis サーバーに転送することを示しています。 3.2.3 アダプタパターンアダプタ パターンは主に、標準化および正規化されたアプリケーションを通じてサービス インターフェイスを外部に公開します。各アプリケーションは、さまざまな形式 (JSON、XML、StatsD など) で監視インジケーター データを出力できます。ただし、監視システムは、統一されたデータ モデルでデータを受信することを期待しています。このとき、アダプタ パターンを使用して、同じ Pod 内にアプリケーション コンテナと対応する監視指標データ変換用のアダプタ コンテナを作成し、異なるアプリケーションの異種監視指標データを 1 つの統一されたモデル データに変換することができます。 次の yaml は、Prometheus を使用して Nginx サービスのステータス インジケーターを監視する例です。 Nginx には Web サーバーの状態を照会するためのインターフェースがあり、default.conf ファイルの構成項目を変更するだけで有効にできます。次に、このインターフェースの出力を Prometheus に必要なデータ形式に変換するアダプター コンテナーを追加します。 default.conf ファイルの内容を configMap で設定します。ここで (行 20 ~ 24)、stub_status モジュールを使用して Nginx のステータス情報を表示するインターフェイス (/nginx_status) を定義します。次に、Nginx コンテナとアダプタ コンテナを含む Pod を作成します。アダプター コンテナーは、nginx/nginx-prometheus-exporter イメージを使用して作成されます。このイメージは、Nginx によって /nginx_status インターフェイスで公開されるインジケーター データ形式を Prometheus 形式に変換します。 # Nginx の設定 次の図は検証操作です。yaml を実行してサービスを作成した後、まず Web サーバー Pod にログインし、curl コマンドをインストールして (HTTP リクエストの開始を容易にするため)、/nginx_status インターフェースとアダプター コンテナーの変換インターフェース (9113/metrics) を確認します。 3.3 マルチノードマルチコンテナモード3.3.1 選挙パターン選挙モードは、マルチノードとマルチコンテナの組み合わせモードであり、分散システムでは特に重要です。分散システムでは、高可用性と水平スケーラビリティの問題を解決するためにステートフル アプリケーション サービスを使用する場合、各インスタンスと状態シャード データ (グローバル情報) 間の対応を保存するために外部システムに依存する必要があります。マスターノード選出メカニズムを導入することで、自身のステータスを維持するために外部システムに依存する必要がなくなります。マスター ノードは、アプリケーション サービス コンテナーと再利用可能な選択コンテナー (つまり、選択モード) を組み合わせて、グローバル情報を保存および配布する役割を担います。 次の yaml ファイルは、選挙結果を検出するためのアプリケーション コンテナとして使用される Node.js サービスを提供します (詳細については、Kubernetes コミュニティの contrib プロジェクト election (https://github.com/kubernetes/contrib/tree/master/election) を参照してください) APIバージョン: アプリ/v1 04概要上記では、コンテナとポッドの概念を簡単に紹介し、コンテナとポッドの関係に基づいたコンテナ設計パターンを紹介しました。クロスカントリーモデル、外交官モデル、アダプタモデル、選挙モデルを例とともに紹介します。以下のリストは、上記で紹介したモードの簡単な概要です。 スペースの制限により、読者は、ワーク キュー パターンや Scatter/gather パターンなどの他の優れた設計パターンについて、必要に応じてコミュニティ ドキュメント (https://kubernetes.io/blog) を参照できます。 |
<<: CloudOps: クラウド運用を最適化するための新しいフレームワーク
>>: ガートナーは、重要なセキュリティツールとリスク評価方法とともに、クラウドセキュリティ実装に関する3つの主要な推奨事項をまとめています。
FtpIt は、SSD ハード ドライブ搭載の OVZ や大容量メモリ搭載の KVM を宣伝してきま...
電子商取引大手アマゾンにとって、ここ数カ月は決して楽な時期ではなかった。業績の伸び悩みから、アマゾン...
北京時間3月30日、2011-2012 CBA決勝戦第5戦で、北京チームはホームで広東を124-12...
昨夜8時、羅永浩は予定通りDouyin生放送室に登場した。2回目の放送のデータが急激に落ち込んだ後、...
最近、インターネット金融会社が大量に株式を公開し、市場全体が少し熱くなっています。こうした状況を受け...
OpenObserve は、Rust で開発されたオープンソースの高性能クラウドネイティブ観測プラッ...
クラウド コンピューティングの運用の卓越性とは、組織がその使命と戦略をサポートするために、最適なコス...
2018 年のブラック フライデーが到来し、Bluehost が最新ニュースをお届けします。共有ホス...
AWSは、クラウドサービス製品「Amazon Elasticsearch Service」の名称を「...
「企業は急速な発展の過程で、徐々に洗練された管理を強化し、効率を高め、コストを削減すると同時に、顧客...
19 世紀以降、影響力の拡散媒体の変化とともに、ブランド理論は徐々に一般に知られるようになりました。...
最近のニュース:2017年にオフショアホスティングの運営を開始したこの商人は、支払い方法として「Al...
[[285197]]導入最近は人気のMQがたくさんあります。弊社では技術選定でKafkaを採用する...
itldc (24 年以上運営) は最近、いくつかの新しいデータ センターを追加しました。これまでの...
最近、Baidu にインデックスされているウェブサイトの数の問題で苦労している人を多く見かけます。そ...