YurtAppSetを使用して、ACK Edgeクラスター内の複数のノードプールにアプリケーションを配布できます。 YurtAppSetsは、ノードプールラベルの変更にすばやく対応できます。 これにより、YurtAppSetsは、複数のノードプールに分散されるワークロードの構成 (ポッド数やアプリケーションバージョンなど) を一元管理できます。 このトピックでは、YurtAppSetsを使用してACK Edgeクラスターのアプリケーションを管理する方法について説明します。
背景情報
従来のアプリケーション展開
エッジコンピューティングシナリオでは、コンピューティングノードは、複数の領域にわたって展開され得、アプリケーションは、異なる領域内のノード上で実行する必要があり得る。 デプロイメントを使用して、異なるリージョンにアプリケーションをデプロイするとします。 従来、同じリージョン内のノードに同じラベルを追加し、異なるノードセレクタで構成されたデプロイを重複して作成していました。 このように、システムは、ノード・ラベルをノード・セレクタと照合することによって、異なるリージョン内のノードへのデプロイメントをスケジュールする。
地域の数と異なる地域のアプリケーションに対する差別化された要件が増加するにつれて、アプリケーションの管理とメンテナンスはより複雑になります。 次のリストは、主な課題を説明しています。
複雑な更新手順: アプリケーションを更新するときは、異なるリージョンのすべてのデプロイメントを手動で更新する必要があります。 これは、更新効率を低下させる。
複雑なアプリケーションのメンテナンス: さまざまなリージョンのデプロイメントを手動で区別してメンテナンスする必要があります。 これは、領域の数が増加するにつれて、厄介なアプリケーションO&Mにつながる。
冗長なアプリケーション構成: 異なるリージョンのデプロイメントの構成は非常に類似しているため、複雑でエラーが発生しやすい構成管理が行われます。
YurtAppSetsに基づくアプリケーションのデプロイ
YurtAppSetsは、エッジコンピューティングシナリオでの分散デプロイの複雑さを軽減するために、ACK Edgeによって提供されます。 YurtAppSetsは、複数のワークロードを一元管理できる上位層の抽象化です。 たとえば、YurtAppSetsを使用して、複数のデプロイメントを一元的に作成、更新、および削除できます。
YurtAppSetsは、非効率的なアプリケーション更新、複雑なアプリケーションメンテナンス、冗長なアプリケーション構成など、従来の展開モードの欠点に対処するための次の機能をサポートしています。
統合テンプレート定義 (workloadTemplate)
YurtAppSetsの設定でworkloadTemplateパラメーターを使用して、同じアプリケーションを複数のリージョンにデプロイするために使用するテンプレートを指定できます。 これにより、アプリケーションの構成と展開の重複を防ぎ、作成、更新、削除などの効率的で一貫性のあるバッチ操作を保証します。
自動デプロイ (nodepoolSelector)
YurtAppSetsの設定でnodepoolSelectorパラメーターを使用して、ノードプールの選択に使用するラベルを指定できます。 これにより、アプリケーションとノードプールの同期が維持されます。 ノードプールを作成または削除すると、nodepoolSelectorパラメーターに基づいて一致するノードプールが自動的に選択され、ワークロードがデプロイされます。 これにより、O&M作業が簡素化されます。
地域別デプロイ (workloadTweaks)
YurtAppSetsの設定でworkloadTweaksパラメーターを使用して、特定のリージョンでワークロードをカスタマイズできます。 リージョン内の各ワークロードを管理または更新する必要はありません。
YurtAppSetの作成
KubernetesバージョンのACK Edgeクラスターが1.26以降の場合は、YurtAppSetを作成します。
ACKエッジクラスターのKubernetesバージョンが1.26より前の場合は、UnitedDeploymentを作成します。
Kubernetes 1.26以降
配置テンプレートを定義するYurtAppSetを作成します。
次のYAMLテンプレートはその例です。
apiVersion: apps.openyurt.io/v1beta1
種類: YurtAppSet
メタデータ:
name: 例
namespace: デフォルト
spec:
revisionHistoryLimit: 5
プール:
-np1xxxxxx
-np2xxxxxx
nodepoolSelector:
matchLabels:
yurtappset.openyurt.io/type: "nginx"
ワークロード:
workloadTemplate:
deploymentTemplate:
metadata:
labels:
app: 例
仕様:
レプリカ:2
セレクタ:
matchLabels:
app: 例
テンプレート:
metadata:
labels:
app: 例
仕様:
containers:
-イメージ: nginx:1.19.1
imagePullPolicy: Always
name: nginx
workloadTweaks:
-プール:
-np2xxxxxx
微調整:
replicas: 3
containerImages:
- name: nginx
targetImage: nginx:1.20.1
パッチ:
-パス: /metadata/labels/test
操作: 追加
値: テスト
次の表に、YAMLテンプレートのパラメーターを示します。
パラメーター | 説明 | 必須 |
spec. プール | アプリケーションがデプロイされているノードプール。 値はスライスタイプでなければなりません。 nodepoolSelectorパラメーターを使用してノードプールを選択することを推奨します。 | 任意 |
spec.nodepoolSelector | アプリケーションをデプロイするノードプールを選択するために使用されるラベルセレクタ。 このパラメーターとspec.poolsパラメーターを同時に指定した場合、両方のパラメーターに一致するノードプールが選択されます。 | 任意 |
spec.workload.workloadTemplate | ワークロードテンプレート。 値を | 必須 |
spec.workload.workloadTweaks | 特定のワークロードに対するカスタム変更。 | 任意 |
spec.workload.workloadTweaks[*].pools | カスタム変更が適用されるアプリケーションをホストするノードプール。 値はスライスタイプでなければなりません。 | 任意 |
spec.workload.workloadTweaks[*].nodepoolSelector | カスタム変更が適用されるアプリケーションをホストするノードプールを選択するために使用されるラベルセレクタ。 | 任意 |
spec.workload.workloadTweaks[*].tweaks. レプリカ | 変更後にワークロード用に作成されたレプリケートされたポッドの数。 | 任意 |
spec.workload.workloadTweaks[*].tweaks.containerImages | 変更後のワークロードのデプロイに使用されるイメージ。 | 任意 |
spec.workload.workloadTweaks[*].tweaks.patches | このパラメーターを使用して、workloadTemplateパラメーターのフィールドを変更できます。 | 任意 |
spec.workload.workloadTweaks[*].tweaks.patches[*].path | workloadTemplateパラメーターのフィールドのパス。 | 任意 |
spec.workload.workloadTweaks[*].tweaks.patches[*].operation | パスで実行する操作。The operation to perform on the path. 有効な値: add、remove、replace。 | 任意 |
spec.workload.workloadTweaks[*].tweaks.patches[*].value | 変更後の値。 このパラメーターは、追加または置換操作でのみ有効です。 | 任意 |
status.conditions | ノードプールが選択されているかどうか、ワークロードのステータスなど、YurtAppSetのステータス情報。 | |
status.readyWorkloads | レプリケートされたポッドがすべて準備完了状態にあるワークロードの数。 | |
status.updatedWorkloads | レプリケートされたポッドがすべて最新バージョンに更新されているワークロードの数。 | |
status.totalWorkloads | YurtAppSetによって管理されるワークロードの数。 |
1.26より前のKubernetesバージョン
配置テンプレートを定義するUnitedDeploymentを作成します。
次のYAMLテンプレートはその例です。
apiVersion: apps.openyurt.io/v1alpha 1
kind: UnitedDeployment
メタデータ:
name: 例
namespace: デフォルト
spec:
revisionHistoryLimit: 5
セレクタ:
matchLabels:
app: 例
workloadTemplate:
deploymentTemplate:
metadata:
creationTimestamp: null
labels:
app: 例
仕様:
レプリカ:2
セレクタ:
matchLabels:
app: 例
テンプレート:
metadata:
creationTimestamp: null
labels:
app: 例
仕様:
containers:
-イメージ: nginx:1.19.3
imagePullPolicy: Always
name: nginx
dnsPolicy: ClusterFirst
restartPolicy: Always
トポロジ:
プール:
-name: クラウド
nodeSelectorTerm:
matchExpressions:
-キー: apps.openyurt.io/nodepool
operator: In
values:
-np4b9781c40f0e46c581b2cf2b6160 ****
レプリカ:2
-name: エッジ
nodeSelectorTerm:
matchExpressions:
-キー: apps.openyurt.io/nodepool
operator: In
values:
-np47832359db2e4843aa13e8b76f83 ****
レプリカ:2
tolerations:
- effect: NoSchedule
キー: apps.openyurt.io/taints
演算子: 存在
次の表に、YAMLテンプレートのパラメーターを示します。
パラメーター | 説明 |
spec.workloadTemplate | ワークロードテンプレート。 有効な値: |
spec.topology.pools | 複数のノードプールの構成。 |
spec.topology.pools[*].name | ノードプールの名前。 |
spec.topology.pools[*].nodeSelectorTerm | ノードプールの選択に使用されるノードアフィニティルール。 キーを 説明 ACKコンソールの [ノードプール] ページで、ノードプールの名前の下にノードプールのIDを表示できます。 |
spec.topology.pools[*].tolerations | ノードプールの許容範囲。 |
spec.topology.pools[*]. レプリカ | 各ノードプールに作成されるポッドの数。 |
YurtAppSetsを使用してエッジでアプリケーションを管理する
アプリケーションのバージョンを更新する:
spec.workload.workloadTemplate
パラメーターのフィールドを変更して、アプリケーションの更新をトリガーします。 YurtAppSetは、それに応じてすべてのノードプールのすべてのワークロードのテンプレートを更新します。 次に、ノードプールコントローラーはワークロードのポッドを更新します。
特定のリージョンにカナリアリリースを実装する:
spec.workload.workloadTweak[*].containerImages
パラメーターを変更して、特定のリージョンのポッドのイメージ更新をトリガーします。特定のリージョンでポッドをスケーリングする:
spec.workload.workloadTweak[*].replicas
パラメーターを変更して、特定のリージョンでポッドのスケーリングをトリガーします。新しいリージョンにアプリケーションをデプロイする: 新しいノードプールを作成し、アプリケーション設定のspec.nodepoolSelectorパラメーターと一致するラベルをノードプールに追加します。 YurtAppSetは変更を検出し、新しいノードプールにワークロードを自動的にデプロイします。 次に、リージョン内のノードをノードプールに追加します。
特定のリージョンでアプリケーションをオフラインにする: そのリージョンでアプリケーションがデプロイされているノードプールを削除します。 YurtAppSetは変更を検出し、リージョン内のワークロードを自動的に削除します。