要約: コンテナの作成やアプリケーションのデプロイ設定は複雑で変化しやすく、システムの柔軟性と再利用性を確保するために、この記事では、テンプレート エンジンをコアとして統合されたコンテナ デプロイ フレームワークを構築する方法に焦点を当てます。
コンテナを使用するプロセスでは、誰もが経験することになるコンテナの構成項目は 40 ~ 50 個あり、それらを理解するには一定の技術的背景が必要です。デプロイメントプロセス中、ユーザーは構成パラメーターの理解不足により、コンテナーの開始、アプリケーションのデプロイメント、またはアップグレード時にさまざまな問題に遭遇することがよくあります。ユーザーがさまざまなパラメータを迅速に理解し、さまざまなアプリケーションの種類やシナリオに応じて拡張できる方法について、この記事ではこれらの問題の調査と解決に焦点を当てます。
コンテナの作成やアプリケーションのデプロイ設定は複雑で変化しやすいため、システムの柔軟性と再利用性を確保するために、テンプレート エンジンを中心とした統合コンテナ デプロイ フレームワークを構築することにしました。この記事では、テンプレート エンジンの構築方法と、テンプレート エンジンをコアとしてコンテナ デプロイメント フレームワークを構築する動作原理に焦点を当てます。テンプレート エンジンでは、特定の形式仕様に準拠したファイルが基礎となり、展開プロセスに応じて変更される可能性がある場所、または変更する必要がある場所については、パラメーターを使用してサイトを識別します。パラメータ識別子の定義は、パラメータ識別子の意味変換を実行するためにテンプレート ファイルの末尾に追加されます。テンプレートの特定の内容またはパラメータ識別は、特定の構成ファイルを通じてクライアント要求パラメータから読み取ったり受信したりできます。
テンプレート エンジンは、テンプレート定義、テンプレート解析、テンプレート変換、およびテンプレート実行の 4 つのモジュールで構成されます。テンプレート定義はコンテナ クラスターの管理フレームワークに依存しており、実行可能ファイルではありません。テンプレート パーサーは、テンプレートを 2 つの部分に分割する役割を果たします。1 つの部分は実行不可能な展開テンプレートを形成し、もう 1 つの部分は展開テンプレート内のパラメーターの定義記述を形成します。パラメーター定義の記述は、テンプレート内のサイト識別子と統合されます。一意のサイト識別子を介した展開テンプレート。テンプレート コンバーターはパラメーター値を受け入れ、パーサーで生成されたデプロイメント テンプレートと組み合わせます。パラメーター値の識別子は、テンプレート内のプレースホルダー識別子に置き換えられて、実行可能ファイルが生成されます。テンプレート エグゼキュータは、テンプレートに基づいてオブジェクトを作成する役割を担っており、通常はスケジューリング フレームワークまたはコンテナ エンジンを担当します。
テンプレート エンジンの実行原理を図 1 に示します。
テンプレート定義には、展開テンプレートの識別と、デプロイ パラメータの識別という 2 種類の情報が含まれます。
kubernetes のデプロイメント テンプレートを例に挙げます。デプロイメント テンプレートには、リソース、バージョン、情報の説明、データ構成という 4 つの異なるタイプの定義が含まれます。
リソース: kubernetes で定義されたオブジェクト タイプを表します。
バージョン: オブジェクトのバージョンを示します。
情報の説明: オブジェクト名、ラベル、コメントなどが含まれ、オブジェクトの検索またはスケジュールのインデックスを提供します。
データ構成: ポート、環境変数、リソース、スケジューリング、ヘルスチェックなど、コンテナーが実行中に従う標準を定義する責任があります。
パラメータ識別子は、パラメータ、名前、説明、表示名、値、タイプの 6 つの属性で構成されます。
parameters: パラメータ定義開始フラグ
description: パラメータプロンプト情報
displayname: 特定の意味情報
name: 参照パラメータ名に対応し、記述情報が対応する参照であることを示すパラメータ
value: パラメータのデフォルト値
type: さまざまなスタイルを表し、クライアントはタイプに応じて特定のスタイルを提示します
kubernetes の名前空間オブジェクトを例にとると、テンプレートの完全な定義は次のコードに示されています:
apiVersion: v1kind: Namespacemetadata: name: ${name } --- {"parameters": [ { "description": "命名空间", "displayName": "命名空间", "name": "name", "value": "", "type": "String" } ]}
上記のコードには、デプロイメント テンプレートとパラメーターの説明の 2 つの部分が含まれています。
デプロイメント テンプレートは、次のコード ブロックに示されています。
apiVersion: v1kind: Namespacemetadata: name: ${name }
デプロイメント テンプレートは、オブジェクトによって作成されるすべてのコンテンツを定義します。 テンプレート内のフィールドの意味は次のように説明されます。
apiVersion: 共通オプション、定義。バージョン情報
Kind: オブジェクトのタイプを定義し、さまざまなオブジェクトを区別します
Metadata: デプロイ時に指定されたパラメータのキーと値のペアを定義します
${}: パラメータの参照値を表します。パラメータを置き換えます
クライアントのダイナミクスを定義するパラメータ識別子 パラメータを取得した後の表示フォーム、次のコード例のパラメータ識別子定義:
{"parameters": [ { "description": "命名空间", "displayName": "命名空间", "name": "name", "value": "", "type": "String" } ]}
パラメータ識別子は、統一された形式を定義します。セマンティック変換を通じて、複雑な構成がユーザーにとって理解しやすい方法に変換されます。クライアントはパラメータ識別子を読み取り、テンプレート パーサーを通じて入力パラメータを抽象化し、必要なフォーム フォームを表示し、ユーザー入力機能を提供します。
テンプレート定義は、Kubernetes または Docker に精通した専門家によって作成されます。特定のビジネス シナリオに基づいてリアルタイムで動的な調整を行うことができ、導入の柔軟性と拡張性を確保できます。同時に、システムはさまざまなオブジェクトに基づいた基本テンプレートを提供します。ユーザーは、特定の知識背景に基づいてテンプレートを作成および維持することもできます。
は、入出力ストリームを通じてテンプレート内のパラメータ識別子を取得し、セマンティック変換を実行して、わかりやすい構成パラメータを取得します。テンプレート パーサーの動作原理を以下の図 2 に示します。
サーバーがリクエストを受信した後、クライアントはオブジェクトを作成するリクエストを開始します。 、要求されたオブジェクトの型自己関連付けベース テンプレートに基づいてオブジェクトが作成されます。基本テンプレートは、読み取りプロセス中に、パラメーターの説明情報を取得するための開始点として使用されます。解析が完了すると、パラメーターは Json 文字列の形式でクライアントに返されます。クライアントは、Json 文字列に基づいてユーザーが入力する必要があるフォームを動的に生成します。フォームの内容について。
テンプレート パーサーは、テンプレート定義内のパラメーター識別子の解析に重点を置いています。意味変換と情報プロンプトを通じて、簡単に識別できる入力項目が形成されます。ユーザーにとっては、分析が完了した後は複雑なテクニカル指標を隠すことができ、ユーザーの焦点はテクノロジーからビジネス構成に移ります。使用コストを最小限に抑え、使いやすさを向上させます。
テンプレート コンバータはテンプレート エンジンの中核であり、展開テンプレートの取得、パラメータと値の変換、実行可能ファイルの構築という 3 つの問題の解決に重点を置いています。クライアントはテンプレート パーサー内のパラメーターに実際の値を割り当て、サーバーに渡します。サーバーはテンプレートのコンテンツを読み取り、パラメーターのフラグ ビットを検出すると終了します。ファイル ストリームを使用してデプロイメント ファイルを生成し、デプロイメント ファイル内のパラメータをパラメータ値に置き換えて、最終的な実行可能ファイルを生成します。テンプレート コンバーターの動作原理を図 3 に示します。
導入テンプレートの取得: テンプレートに含まれるテンプレート定義から確認できます。 2 つの部分: デプロイメント テンプレートとパラメータ識別子。テンプレート コンバータは、まずテンプレートをデプロイし、ファイル ストリームを通じてテンプレート定義内のデプロイメント テンプレートを読み取り、読み取りプロセス中にパラメータ識別子で分割してデプロイメント テンプレートを取得する必要があります。
参数值转化:核心是解决参数与占位符关联和赋值问题。模板转换器通过模板参数定义的name属性key关联,模板转化器拿到参数值以后,获取参数值对应的key(key在部署模板唯一),并且根据key,替换部署模板中占位标识,完成参数替换。
构建可执行文件:通过文件流的方式,把前两部转化的字符流输出到文件,构建出可执行文件。
模板转换器执行以后,生成的可执行文件如下所示:
apiVersion: v1kind: Namespacemetadata: name: ruffy
模板执行器接收可执行的部署文件,对于文件中定义的部署类型进行解析,拆分成若干个可执行任务。容器引擎根据收到的任务执行操作,最终协同完成部署工作。模板执行器往往依赖于容器调度和执行引擎。以Kubernetes容器编排框架为例,模板转化器生成的可执行文件,以字符流的方式传输到Kubernetes的Server端,Kubernetes根据传入文件,自动解析文件内容,并且做出相关操作。对于模板引擎而言,无论是Kubernetes还是Swarmkit都能够得到友好的支持。模板执行器的工作原理如图4所示:
テンプレート エグゼキューターが実行された後の結果を図 5 に示します。
コンテナ構成はテンプレート エンジンを通じて実行できますコンテナーのデプロイメントであっても、他のリソース テーマ オブジェクトの作成であっても、柔軟に使用できるように、対応するテンプレート サポートがあります。テンプレート処理エンジンは、テンプレートの変更に応じてコードを常に変更する必要はありません。同時に、ユーザーは特定の技術的な詳細や実装方法に注意を払うことなく、理解しているセマンティクスから構成情報に集中できるため、操作動作が簡素化され、使用コストが削減されます。
以上がテンプレート エンジンに基づく PHP デザイン パターン コンテナ デプロイメント フレームワークの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。