クラウドネイティブのローリングアップデートモデルは、クラウドエッジのコラボレーションシナリオでのアプリケーション更新の要件を満たすことができません。 たとえば、エッジネットワークがクラウドから切断されると、ノードが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-利用できません | このパラメーターは、 |
DaemonSet.spec.updateStrategy.type | 値を |
更新モデルの使用
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更新モデルのユースケース
エッジノードにログインし、次のコマンドを実行して、ノードで更新が必要なポッドを確認します。
curl http://127.0.0.1:10267/pods
出力の
default/nginx-daemonset-bwzss pod.Status.Conditions
フィールドに'PodNeedUpgrade=true'
が表示されている場合、ポッドは更新が必要です。次のコマンドを実行してポッドを更新します。
curl -X POST http://127.0.0.1:10267/openyurt.io/v1/namespaces/default/pods/nginx-daemonset-bwzss/upgrade
次のコマンドを実行して、DaemonSet設定を更新します。
Start updating pod default/nginx-daemonset-bwzss
関連ドキュメント
ポッドのステータスを確認する方法の詳細については、「Kubernetes クラスターのポッドを表示する」をご参照ください。