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

Container Service for Kubernetes:DaemonSet更新の問題に対処し、OTA更新を有効にするためにDaemonSet更新モデルを設定する

最終更新日:Oct 28, 2024

クラウドネイティブのローリングアップデートモデルは、クラウドエッジのコラボレーションシナリオでのアプリケーション更新の要件を満たすことができません。 たとえば、エッジネットワークがクラウドから切断されると、ノードがNotReady状態にあるため、DaemonSetのローリング更新がスタックする可能性があります。 グリーン車両の無線 (OTA) 更新などのシナリオでは、エッジノードでローリング更新をトリガーする必要がある場合もあります。 前述の問題に対処するために、AdvancedRollingUpdateおよびOTA更新モデルが導入されています。

前提条件

DaemonSet更新モデルは、Kubernetes 1.26.3-aliyun.1を実行するACK Edgeクラスターでサポートされています。

DaemonSet更新モデル

  • AdvancedRollingUpdate

    この更新モデルを使用して、ノードがNotReady状態であるためにDaemonSetの更新が停止する問題に対処できます。 更新プロセス中、このモデルは最初にReady状態のノードを更新し、NotReady状態のノードをスキップします。 ノードのステータスがNotReadyからReadyに変わると、ノードのDaemonSetポッドは自動的に更新されます。

  • OTA

    この更新モデルでは、エッジノードでREST APIを呼び出して、ポッドが更新可能かどうかを確認し、ポッドの更新をトリガーできます。

更新モデルの設定

apiVersion: apps/v1
kind: DaemonSet
metadata:
  annotations:
    apps.openyurt.io/update-strategy: AdvancedRollingUpdate
    apps.openyurt.io/max-unavailable: 30%
spec:
  updateStrategy:
    type: OnDelete

パラメーター

説明

apps.openyurt.io/update-strategy

更新モデル拡張を有効にします。 有効な値: AdvancedRollingUpdateおよびOTA。

apps.openyurt.io/max-利用できません

このパラメーターは、AdvancedRollingUpdateモデルを有効にした場合にのみ有効になります。 このパラメーターは、AdvancedRollingUpdate更新モデルが使用されている場合に、更新プロセス中に使用できないポッドの最大数を指定します。 値は、更新するDaemonSetのmaxUnavailableパラメーターの値と同じである必要があります。 デフォルト値: 10%

DaemonSet.spec.updateStrategy.type

値をOnDeleteに設定します。 新しいバージョンを実行するポッドを作成する前に、手動でポッドを削除する必要があります。

更新モデルの使用

AdvancedRollingUpdate

次のコードブロックでは、nginx-DaemonSetという名前のdaemonsetを作成し、DaemonSetのAdvancedRollingUpdate更新モデルを有効にする方法の例を示します。 ローリングアップデート中は、ほとんど30% のDaemonSetポッドを使用できなくすることができます。 次のコードは例です。

cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx-daemonset
  annotations:
    apps.openyurt.io/update-strategy: AdvancedRollingUpdate
    apps.openyurt.io/max-unavailable: 30%
spec:
  selector:
    matchLabels:
      app: nginx
  updateStrategy:
    type: OnDelete
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.19.4
EOF

OTA

  • OTAアップデート用のREST API

    エッジノードのエッジハブコンポーネントは、次のREST APIを呼び出してOTA更新を有効にできます。

    • GET /ポッド

      このREST APIは、ノード上のポッドに関する情報を照会するために使用されます。 レスポンスのPod.status.conditionsセクションのPodNeedUpgradeパラメーターは、ポッドが更新可能かどうかを示します。

    • POST /openyurt.io/v1/namespaces/{ns}/pods/{podname}/upgrade

      このREST APIは、指定されたDaemonSetポッドの更新をトリガーするために使用されます。 {ns} パラメーターと {podname} パラメーターを設定して、更新するポッドを指定できます。 これにより、ビジネス要件に基づいて個々のポッドを更新できます。

  • OTA更新モデルのユースケース

    nginx-DaemonSetという名前のdaemonsetを作成し、DaemonSetのOTA更新モデルを有効にします。 DaemonSetで使用されるイメージが更新されると、DaemonSetポッドは自動的に更新されません。 エッジノードでREST APIを呼び出して、ポッドが更新可能かどうかを確認し、更新をトリガーする必要があります。

    cat <<EOF | kubectl apply -f -
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: nginx-daemonset
      annotations:
        apps.openyurt.io/update-strategy: OTA
    spec:
      selector:
        matchLabels:
          app: nginx
      updateStrategy:
        type: OnDelete
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.19.4
    
    EOF
  • OTA更新モデルのユースケース

    1. エッジノードにログインし、次のコマンドを実行して、ノードで更新が必要なポッドを確認します。

      curl http://127.0.0.1:10267/pods

      出力のdefault/nginx-daemonset-bwzss pod.Status.Conditionsフィールドに 'PodNeedUpgrade=true' が表示されている場合、ポッドは更新が必要です。

    2. 次のコマンドを実行してポッドを更新します。

      curl -X POST http://127.0.0.1:10267/openyurt.io/v1/namespaces/default/pods/nginx-daemonset-bwzss/upgrade
    3. 次のコマンドを実行して、DaemonSet設定を更新します。

      Start updating pod default/nginx-daemonset-bwzss

関連ドキュメント

ポッドのステータスを確認する方法の詳細については、「Kubernetes クラスターのポッドを表示する」をご参照ください。