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

Container Service for Kubernetes:manage ack edge applications using yurtappset

最終更新日:Mar 07, 2026

ACK Edge クラスターでは、アプリケーションセット(YurtAppSet)を使用して、複数のノードプールにまたがってアプリケーションをデプロイします。YurtAppSet は、ノードプールのラベル変更を検知する柔軟な応答メカニズムを提供し、インスタンス数やソフトウェアバージョンなど、ワークロード構成を複数のノードプールで統一的に管理できるようにします。本トピックでは、YurtAppSet を使用して ACK Edge クラスター内のアプリケーションを効率的に管理およびデプロイする方法について説明します。

背景情報

従来のソリューション

エッジコンピューティングのシナリオでは、コンピュートノードが地域ごとに異なる分布特性を持つことが多く、同一アプリケーションを異なる地域のコンピュートノードにデプロイする必要がある場合があります。たとえば、Deployment を使用する場合、従来のアプローチでは、まず同一地域のコンピュートノードに同一のラベルを割り当て、その後、NodeSelector を使用して異なるラベルを対象とする複数の Deployment を作成します。これにより、同一アプリケーションを複数の地域にデプロイできます。

image

地域の分布範囲が拡大し、アプリケーション要件が地域ごとに異なってくるにつれて、運用・メンテナンスの複雑さが増します。この複雑さは、以下の点に現れます。

  • 煩雑な更新:アプリケーションのバージョンが変更された場合、各地域間で一貫性を保つために、すべての Deployment を手動で更新する必要があります。これにより、更新効率が低下します。

  • 複雑な管理:管理対象の地域数が増加すると、各地域ごとに Deployment を区別・維持する必要があります。これにより、運用・メンテナンスの負荷が増加します。

  • 冗長な構成:複数の地域にわたる Deployment 構成は類似度が非常に高いため、構成管理が煩雑になり、ミスが発生しやすくなります。

アプリケーションセット管理ソリューション

アプリケーションセット(YurtAppSet)は、Container Service for Edgeが提供する機能であり、Deployment リソースなどの複数のワークロードを包括的に管理するための上位レベルの抽象化を実現することで、エッジコンピューティングにおける分散デプロイメントを簡素化します。これには、ワークロードの作成、更新、削除が含まれます。

YurtAppSet は、従来のソリューションで見られる低効率な更新、複雑な管理、冗長な構成といった課題に対処し、運用・メンテナンス効率およびアプリケーションデプロイメントの柔軟性を向上させます。

  • workloadTemplate:統一テンプレート定義

    YurtAppSet を使用すると、複数の地域にまたがるワークロードを管理するための単一の workloadTemplate を定義できます。これにより、重複する Deployment 構成が削減され、作成・更新・削除などのバッチ操作がより効率的かつ一貫性を持って実行できるようになります。

  • nodepoolSelector:自動デプロイメント

    YurtAppSet は、nodepoolSelector メカニズムを用いて、ターゲットとなるノードプールを柔軟に選択します。これはノードプールの動的な変更にも同期します。新しいノードプールが作成されたり、既存のノードプールが削除されたりした場合、nodepoolSelector は最新の適合ノードプールを自動的に検出し、ワークロードの配信およびデプロイメントにマッチさせます。これにより、運用・メンテナンスの負担が軽減されます。

  • workloadTweaks:地域固有のカスタム構成

    アプリケーション要件が地域ごとに異なる場合、YurtAppSet は workloadTweaks 機能を提供します。これにより、個別のワークロードを独立して管理・更新することなく、特定の地域でのワークロードをカスタマイズし、地域固有の要件を満たすことができます。

image

アプリケーションセットインスタンスの作成

  • ACK Edge クラスターのバージョンが 1.26 以降の場合、YurtAppSet を使用してアプリケーションをデプロイします。

  • ACK Edge クラスターのバージョンが 1.26 より前の場合、UnitedDeployment を使用してアプリケーションをデプロイします。

バージョン 1.26 以降

Deployment ワークロードテンプレートを使用する YurtAppSet アプリケーションセットインスタンスを作成します。

完全な YAML 例テンプレートは以下のとおりです。

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

以下の表に、関連するフィールドを示します。

フィールド

説明

必須

spec.pools

アプリケーションをデプロイするノードプール名のリスト(slice 型)を指定します。ノードプールの指定には、nodepoolSelector の使用を優先してください。

いいえ

spec.nodepoolSelector

labelSelector を使用して、アプリケーションをデプロイするノードプールを選択します。pools と nodepoolSelector の両方が指定されている場合は、その和集合が使用されます。

nodepoolSelector は、NodePool リソースのラベル(metadata.Labels)に一致するノードプールを選択します。これらのラベルを変更するには、クラスター コンソールの [カスタムリソース] ページから対応する NodePool の YAML を検索して編集してください。

いいえ

spec.workload.workloadTemplate

管理対象のワークロードテンプレートを指定します。現在、deploymentTemplate および statefulSetTemplate テンプレートがサポートされています。

はい

spec.workload.workloadTweaks

ワークロードに対するカスタム変更を指定します。

いいえ

spec.workload.workloadTweaks[*].pools

この変更を適用するノードプール(slice 型)を指定します。

いいえ

spec.workload.workloadTweaks[*].nodepoolSelector

labelSelector を使用して、変更対象のノードプールを選択します。

いいえ

spec.workload.workloadTweaks[*].tweaks.replicas

変更後のワークロードのレプリカ数を指定します。

いいえ

spec.workload.workloadTweaks[*].tweaks.containerImages

変更後のワークロードのコンテナイメージを指定します。

いいえ

spec.workload.workloadTweaks[*].tweaks.patches

`patch` フィールドを使用して、workloadTemplate の任意のフィールドを変更します。

いいえ

spec.workload.workloadTweaks[*].tweaks.patches[*].path

workloadTemplate 内で変更するフィールドのパスを指定します。

いいえ

spec.workload.workloadTweaks[*].tweaks.patches[*].operation

パスに対して実行する操作を指定します(現在は add/remove/replace をサポート)。

いいえ

spec.workload.workloadTweaks[*].tweaks.patches[*].value

変更後の最新値を指定します(add/replace 操作のみ有効)。

いいえ

status.conditions

YurtAppSet の現在のステータス(ノードプール選択ステータスおよびワークロードステータスを含む)を示します。

status.readyWorkloads

YurtAppSet が管理するワークロードのうち、すべてのレプリカが準備完了状態であるワークロードの数を示します。

status.updatedWorkloads

YurtAppSet が管理するワークロードのうち、すべてのレプリカが最新バージョンに更新済みであるワークロードの数を示します。

status.totalWorkloads

YurtAppSet が管理するワークロードの総数を示します。

バージョン 1.26 より前の場合

Deployment ワークロードテンプレートを使用する UnitedDeployment インスタンスを作成します。

完全な YAML 例テンプレートは以下のとおりです。

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

以下の表に、関連するフィールドを示します。

フィールド

説明

spec.workloadTemplate

サポートされるワークロードテンプレートを表します。ノードプールでは現在、deploymentTemplate/statefulSetTemplate テンプレートがサポートされています。

spec.topology.subsets

複数のノードプールを指定します。

spec.topology.subsets[*].name

ノードプールの名前です。

spec.topology.pools[*].nodeSelectorTerm

NodePool とのホスト親和性構成を対応付けるために、apps.openyurt.io/nodepool を Key、ノードプール ID を Value として使用します。

説明

[ノードプール] ページで、対応するクラウドおよびエッジノードプールの [名前] の下に表示されるノードプール ID を確認できます。

spec.topology.pools[*].tolerations

ノードプールのホスト許容構成です。

spec.topology.pools[*].replicas

各ノードプール下の Pod インスタンス数です。

アプリケーションセットを用いたエッジアプリケーションの管理

  • アプリケーションのバージョンアップグレード:アップグレードプロセスをトリガーするために、spec.workload.workloadTemplate のフィールドを変更します。コントローラーは、更新されたテンプレートを各ノードプールのワークロードに適用し、その後、ノードプールコントローラーが Pod のアップグレードを実行します。

  • 地域ごとの段階的アップデートの実行:対応するノードプール内のアプリケーション Pod のイメージ更新をトリガーするために、spec.workload.workloadTweak[*].containerImages 構成を変更します。

  • 地域ごとのアプリケーションのスケーリング:対応するノードプール内のアプリケーション Pod のスケーリング操作をトリガーするために、spec.workload.workloadTweak[*].replicas 構成を変更します。

  • 新規地域へのアプリケーションのデプロイ:spec.nodepoolSelector のラベルに一致する新しいノードプールを作成します。YurtAppSet はノードプールリソースの変更を検出し、そのノードプール向けに自動的にワークロードを作成します。その後、その地域のノードをノードプールに追加します。

  • 地域ごとのアプリケーションのオフライン化:対応する地域のノードプールを削除します。YurtAppSet は、その地域に関連付けられたワークロードを自動的に削除します。