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

Container Service for Kubernetes:YurtAppSetsを使用したACK Edgeクラスターのアプリケーションの管理

最終更新日:Dec 19, 2024

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

ワークロードテンプレート。 値をdeploymentTemplateまたはstatefulSetTemplateに設定します。

必須

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

ワークロードテンプレート。 有効な値: deploymentTemplate and statefulSetTemplate

spec.topology.pools

複数のノードプールの構成。

spec.topology.pools[*].name

ノードプールの名前。

spec.topology.pools[*].nodeSelectorTerm

ノードプールの選択に使用されるノードアフィニティルール。 キーをapps.openyurt.io/nodepoolに設定し、値を使用するノードプールのIDに設定します。

説明

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は変更を検出し、リージョン内のワークロードを自動的に削除します。