ネイティブの DaemonSet アップグレードモデルには、エッジコンピューティングシナリオにおいて制限があります。たとえば、クラウドとエッジ間のネットワークが切断されると、ノードが NotReady になり、DaemonSet のローリングアップグレードがブロックされる可能性があります。また、OTA (over-the-air) アップデートのために、エッジノード上で直接アプリケーションのアップグレードをトリガーする必要がある場合もあります。拡張 DaemonSet アップグレードモデルである AdvancedRollingUpdate と OTA は、これらの問題に対処します。これらのモデルを構成することで、アップグレードのブロックを防ぎ、OTA アップデートを実行できます。
前提条件
v1.26.3-aliyun.1 以降の ACK Edge クラスター。
アップグレードモデルの説明
AdvancedRollingUpdate アップグレードモデル
このモデルは、ネットワーク切断によりノードが NotReady になった場合に、DaemonSet のアップグレードがブロックされるのを防ぎます。アップグレード中、NotReady ノードは無視され、まず Ready ノード上の Pod がアップグレードされます。ノードが再び Ready になると、このモデルはそのノード上の DaemonSet Pod を自動的にアップグレードします。
OTA アップグレードモデル
このアップグレードモデルでは、REST API を呼び出すことで、Pod が更新可能かどうかを確認し、エッジノード上で直接 Pod のアップグレードをトリガーできます。
構成の説明
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-unavailable | この構成は |
spec.updateStrategy.type |
|
使用方法
AdvancedRollingUpdate アップグレードモデル
次のコードは、AdvancedRollingUpdate アップグレードの例を示しています。この例では、nginx-daemonset という名前の DaemonSet が作成されます。これは AdvancedRollingUpdate アップグレードモデルを使用し、ローリングアップグレード中に最大 30% の Pod が利用不可能になることを許可します。
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
EOFOTA アップグレードモデル
OTA アップグレード API
エッジノード上の edge-hub コンポーネントは、OTA アップグレード用の REST API を提供します。
GET /podsノード上の Pod 情報を取得します。
Pod.status.conditions内のPodNeedUpgrade条件を確認することで、Pod が更新可能かどうかを判断できます。POST /openyurt.io/v1/namespaces/{ns}/pods/{podname}/imagepullこの API を使用すると、特定の DaemonSet Pod のイメージプルをトリガーできます。パスパラメーター
{ns}と{podname}は、Pod の名前空間と名前を指定します。起動に時間がかかる大きな Pod イメージの場合、この API を使用してイメージを事前にプルし、起動時間を短縮できます。イメージプル API は、v1.32-aliyun.1 以降のクラスターでのみサポートされています。
POST /openyurt.io/v1/namespaces/{ns}/pods/{podname}/upgradeこの API を使用すると、特定の DaemonSet Pod の更新をトリガーできます。パスパラメーター
{ns}と{podname}は、Pod の名前空間と名前を表します。
OTA アップグレードの例
OTA アップグレードモデルを使用する
nginx-daemonsetという名前の DaemonSet を作成します。DaemonSet のイメージが更新された後、ノード上の Pod は自動的に更新されません。REST API を使用して、エッジノード上で Pod のアップグレードを確認し、トリガーする必要があります。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 EOFOTA アップグレードのユースケース
エッジノードにログオンし、ノード上のいずれかの Pod がアップグレードを必要とするかどうかを確認します。
curl http://127.0.0.1:10267/pods`default/nginx-daemonset-bwzss` の出力に
pod.Status.Conditions内にPodNeedUpgrade=trueが含まれている場合、対応する Pod はアップグレードが必要です。(オプション) イメージを事前にプルします。
curl -X POST http://127.0.0.1:10267/openyurt.io/v1/namespaces/default/pods/nginx-daemonset-bwzss/imagepull期待される出力:
Image pre-pull requested for pod default/nginx-daemonset-bwzssPod をアップグレードします。
curl -X POST http://127.0.0.1:10267/openyurt.io/v1/namespaces/default/pods/nginx-daemonset-bwzss/upgrade期待される出力:
Start updating pod default/nginx-daemonset-bwzss
関連ドキュメント
詳細については、「Pod の管理」をご参照ください。