すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:manage ack edge applications using yurtappset

最終更新日:Sep 10, 2026

YurtAppSet を使用すると、単一の構成から ACK Edge クラスター内の複数のノードプールにまたがるアプリケーションをデプロイおよび管理できます。YurtAppSet はノードプールのラベルの変更を監視し、ワークロードの同期を自動的に維持します。これにより、各ノードプールを個別に操作することなく、クラスター全体でバージョンを更新したり、アプリケーションをスケーリングしたりできます。

前提条件

開始する前に、以下をご確認ください。

  • ACK Edge クラスター

  • クラスターに接続するように構成された kubectl

  • クラスターでカスタムリソースを作成および管理する権限

アプローチの選択

クラスターバージョン 推奨リソース
1.26 以降 YurtAppSet (apps.openyurt.io/v1beta1)
1.26 より前 UnitedDeployment (apps.kruise.io/v1alpha1)

背景情報

エッジコンピューティングでは、通常、同じアプリケーションが複数のリージョンのノードで実行されます。従来のアプローチでは、各リージョンのノードにラベルを割り当て、リージョンごとに個別の Deployment を作成していましたが、リージョンの数が増えるにつれて管理が困難になります。

Traditional multi-region deployment
  • 面倒な更新:バージョンの変更ごとに、すべての Deployment を手動で更新する必要があります。

  • 複雑な管理:リージョンが増えるにつれて、個別の Deployment の追跡と維持にエラーが発生しやすくなります。

  • 冗長な構成:リージョン間の Deployment はほぼ同じ仕様を共有しているため、変更が面倒になります。

YurtAppSet は、次の 3 つのコアメカニズムでこれらの問題を解決します。

メカニズム 目的
workloadTemplate すべてのターゲットノードプールに適用される単一のワークロードテンプレートを定義します
nodepoolSelector ラベルによってターゲットノードプールを選択します。新規作成または削除されたノードプールを自動的に検出します
workloadTweaks 個別のワークロードを作成することなく、個々のノードプールの特定のフィールド (レプリカ、コンテナイメージ、任意のパッチ) をオーバーライドします
YurtAppSet architecture

YurtAppSet (クラスターバージョン 1.26 以降)

YurtAppSet インスタンスの作成

次の YAML は、2 つのノードプールに nginx ワークロードをデプロイする YurtAppSet を作成します。np1xxxxxx ノードプールは nginx:1.19.1 のレプリカを 2 つ使用し、np2xxxxxx ノードプールはデフォルトをオーバーライドして nginx:1.20.1 のレプリカを 3 つ使用します。

apiVersion: apps.openyurt.io/v1beta1
kind: YurtAppSet
metadata:
  name: example
  namespace: default
spec:
  revisionHistoryLimit: 5
  pools:
  - np1xxxxxx
  - np2xxxxxx
  nodepoolSelector:
    matchLabels:
      yurtappset.openyurt.io/type: "nginx"
  workload:
    workloadTemplate:
      deploymentTemplate:
        metadata:
          labels:
            app: example
        spec:
          replicas: 2
          selector:
            matchLabels:
              app: example
          template:
            metadata:
              labels:
                app: example
            spec:
              containers:
              - image: nginx:1.19.1
                imagePullPolicy: Always
                name: nginx
    workloadTweaks:
    - pools:
      - np2xxxxxx
      tweaks:
        replicas: 3
        containerImages:
        - name: nginx
          targetImage: nginx:1.20.1
        patches:
        - path: /metadata/labels/test
          operation: add
          value: test

YAML フィールドリファレンス

Spec フィールド

フィールド 説明 必須
spec.pools デプロイ先のノードプール名のリスト。pools と nodepoolSelector の両方が設定されている場合は、その和集合 (UNION) が使用されます。 いいえ
spec.nodepoolSelector NodePool リソースの metadata.labels に一致するラベルによってノードプールを選択します。一致する新しいノードプールを自動的に含め、削除されたノードプールを除外します。 いいえ
spec.workload.workloadTemplate デプロイするワークロードテンプレート。deploymentTemplate と statefulSetTemplate をサポートします。 はい
spec.workload.workloadTweaks workloadTemplate の上に適用されるノードプールごとのオーバーライド。 いいえ
ほとんどのデプロイメントでは、nodepoolSelector を pools よりも優先して使用することを推奨します。ラベルベースの選択は、YurtAppSet 構成を変更することなく、新しく追加または削除されたノードプールを自動的に処理します。NodePool のラベルを変更するには、クラスターコンソールの [カスタムリソース] ページで、対応する NodePool の YAML を編集します。

workloadTweaks フィールド

フィールド 説明 必須
workloadTweaks[*].pools このオーバーライドが適用されるノードプール (名前別)。 いいえ
workloadTweaks[*].nodepoolSelector このオーバーライドが適用されるノードプール (ラベル別)。 いいえ
workloadTweaks[*].tweaks.replicas 選択したノードプールのレプリカ数をオーバーライドします。 いいえ
workloadTweaks[*].tweaks.containerImages 選択したノードプールのコンテナイメージをオーバーライドします。 いいえ
workloadTweaks[*].tweaks.patches 選択したノードプールの workloadTemplate に任意のフィールドパッチを適用します。 いいえ
tweaks.patches[*].path workloadTemplate 内で変更するフィールドの JSON パス。 いいえ
tweaks.patches[*].operation パッチ操作:add、remove、または replace。 いいえ
tweaks.patches[*].value 設定する値。add および replace 操作にのみ適用されます。 いいえ

Status フィールド

フィールド 説明
status.conditions ノードプールの選択ステータスやワークロードのステータスなど、YurtAppSet の現在のステータス。
status.readyWorkloads すべてのレプリカが準備完了状態にある管理対象ワークロードの数。
status.updatedWorkloads すべてのレプリカが最新バージョンに更新された管理対象ワークロードの数。
status.totalWorkloads この YurtAppSet によって管理されるワークロードの総数。

UnitedDeployment (クラスターバージョン 1.26 より前)

UnitedDeployment インスタンスの作成

apiVersion: apps.kruise.io/v1alpha1
kind: UnitedDeployment
metadata:
  name: example
  namespace: default
spec:
  revisionHistoryLimit: 5
  selector:
    matchLabels:
      app: example
  template:
    deploymentTemplate:
      metadata:
        creationTimestamp: null
        labels:
          app: example
      spec:
        selector:
          matchLabels:
            app: example
        template:
          metadata:
            creationTimestamp: null
            labels:
              app: example
          spec:
            containers:
            - image: nginx:1.19.3
              imagePullPolicy: Always
              name: nginx
            dnsPolicy: ClusterFirst
            restartPolicy: Always
  topology:
    subsets:
    - name: cloud
      nodeSelectorTerm:
        matchExpressions:
        - key: alibabacloud.com/nodepool-id
          operator: In
          values:
          - np4b9781c40f0e46c581b2cf2b6160****
      replicas: 2
    - name: edge
      nodeSelectorTerm:
        matchExpressions:
        - key: alibabacloud.com/nodepool-id
          operator: In
          values:
          - np47832359db2e4843aa13e8b76f83****
      replicas: 2
      tolerations:
      - effect: NoSchedule
        key: apps.openyurt.io/taints
        operator: Exists

YAML フィールドリファレンス

フィールド 説明
spec.workloadTemplate デプロイするワークロードテンプレート。deploymentTemplate と statefulSetTemplate をサポートします。
spec.topology.subsets デプロイ先のノードプールのリスト。
spec.topology.subsets[*].name ノードプールの名前。
spec.topology.subsets[*].nodeSelectorTerm ノードアフィニティ構成。キーとして alibabacloud.com/nodepool-id を使用し、値としてノードプール ID を使用します。ノードプール ID を見つけるには、[ノードプール] ページに移動し、[名前] 列を確認します。
spec.topology.subsets[*].tolerations ノードプールの Toleration 構成。
spec.topology.subsets[*].replicas ノードプール内の Pod レプリカの数。

エッジアプリケーションの管理

YurtAppSet が実行されると、すべてのライフサイクル操作は spec を変更することによって機能します。YurtAppSet コントローラーは、変更を各ノードプールのワークロードに自動的に伝播します。

アプリケーションバージョンのアップグレード

新しいコンテナイメージまたは他のテンプレートの変更で spec.workload.workloadTemplate を更新します。コントローラーは更新されたテンプレートをすべての管理対象ワークロードに適用し、各ノードプールでローリングアップデートをトリガーします。

特定リージョンでのグレースケールアップデートの実行

ターゲットノードプールの spec.workload.workloadTweaks[*].containerImages を更新します。そのノードプール内の Pod のみが新しいイメージを受け取り、他のノードプールは影響を受けません。

特定リージョンでのアプリケーションのスケーリング

ターゲットノードプールの spec.workload.workloadTweaks[*].tweaks.replicas を更新します。これにより、そのノードプールに対してのみ workloadTemplate で定義されたレプリカ数がオーバーライドされます。

新しいリージョンへのデプロイ

spec.nodepoolSelector に一致するラベルを持つ新しいノードプールを作成します。YurtAppSet は新しい NodePool リソースを検出し、そのためのワークロードを自動的に作成します。その後、そのリージョンのノードをノードプールに追加します。

nodepoolSelector を使用する場合、YurtAppSet 構成への変更は不要です。

特定リージョンでのアプリケーションのオフライン化

ターゲットリージョンのノードプールを削除します。YurtAppSet は削除を検出し、そのノードプールに関連付けられたワークロードを自動的に削除します。