在边缘计算场景中,原生的DaemonSet升级模型无法满足某些特定的需求,例如,由于云边网络中断,节点NotReady而导致的DaemonSet滚动升级被阻塞,或者您需要根据实际边缘环境的状态在边缘节点上直接触发应用的升级,而不由云端驱动(例如新能源汽车的OTA升级)。此时,您可以通过配置扩展的DaemonSet升级模型AdvancedRollingUpdate和OTA以解决云边网络中断导致的升级阻塞以及OTA升级问题。
前提条件
适用于v1.26.3-aliyun.1及以上版本的ACK Edge集群。
升级模型说明
AdvancedRollingUpdate升级模型
该升级模型帮您解决云边网络断链时,由于节点状态NotReady而导致的DaemonSet升级阻塞问题。在升级过程中,它会忽略NotReady状态的节点,优先完成状态为Ready的节点上的Pod升级。同时,当节点状态从NotReady转变为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 | 此配置仅在 |
DaemonSet.spec.updateStrategy.type | 必须设置为 |
使用方式
AdvancedRollingUpdate升级模型
以下示例代码为AdvancedRollingUpdate升级示例,在示例中创建了一个名为nginx-daemonset
的DaemonSet,使用AdvancedRollingUpdate
升级模型,并且在滚动升级过程中最多允许30%
的Pod不可用。则该AdvancedRollingUpdate升级使用示例如下。
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升级接口
边缘节点上的edge-hub组件提供了两个与OTA升级相关的REST APIs。
GET /pods
通过此接口可以获取节点上的Pod信息。您可以通过
Pod.status.conditions
中的PodNeedUpgrade
来检查Pod是否可以更新。POST /openyurt.io/v1/namespaces/{ns}/pods/{podname}/upgrade
通过此接口允许触发特定的DaemonSet Pod的更新。路径参数
{ns}
和{podname}
分别代表Pod的命名空间和名称。您可以根据实际需求对指定的Pod执行升级操作。
OTA升级使用示例
创建一个名为
nginx-daemonset
的DaemonSet,使用OTA升级模型,当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 EOF
OTA升级用例
登录边缘节点,执行以下命令,查看节点上的所有Pod是否有升级需求。
curl http://127.0.0.1:10267/pods
若输出结果中
default/nginx-daemonset-bwzss pod.Status.Conditions
的`PodNeedUpgrade=true`
,表明对应的Pod需要升级。执行以下命令,对该Pod进行升级。
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
相关文档
如需确认Pod运行状态,请参见管理容器组(Pod)。