DaemonSet 升级模型
背景介绍
在边缘化场景下,原生 DaemonSet 升级模型无法满足用户现有需求。在云边网络断连的情况下,DaemonSet 升级流程可能被阻塞。除此之外,原生升级模型并未提供相应的升级操作接口,节点上用户无法自主控制应用升级。
为了解决上述问题,我们对原生 DaemonSet 升级模型进行扩展,新增自定义控制器daemonPodUpdater-controller
,提供 AdvancedRollingUpdate 与 OTA 两种升级模型。
- AdvancedRollingUpdate 模型:解决云边断连时,节点
Not-Ready
导致的 DaemonSet 升级阻塞问题,在升级过程中会忽略Not-Ready
节点,从而保证升级流程的顺利完成,并且在节点状态从Not-Ready
转变为Ready
后,自动完成 DaemonSet 应用的升级。 - OTA 模型:新增 Pod status condition
PodNeedUpgrade
来表明更新可用信息。YurtHub OTA 升级组件可以通过该 condition 判断 DaemonSet 应用是否存在新版本。
配置
# AdvancedRollingUpdate 或 OTA 升级模型配置文件示例
apiVersion: apps/v1
kind: DaemonSet
metadata:
# ···
annotations:
# 该注解是使用 AdvancedRollingUpdate 或者 OTA 升级模型的前提条件之一,目前支持的配置值为"AdvancedRollingUpdate" 或者 "OTA"。
apps.openyurt.io/update-strategy: AdvancedRollingUpdate
# 该注解用于滚动更新时设置最大不可用 pod 数量, 仅在 AdvancedRollingUpdate 模式下起作用。
# 该注解支持的配置值与原生 DaemonSet 配置中 maxUnavailable 相同,默认值为10%。
apps.openyurt.io/max-unavailable: 30%
# ···
spec:
# ···
# 使用 AdvancedRollingUpdate 或者 OTA 升级模型的另一个前提条件是将 updateStrategy 设置为 OnDelete。
updateStrategy:
type: OnDelete
# ···
总的来说,如果你希望使用 AdvancedRollingUpdate 或者 OTA 升级模型,那么你需要将注解 apps.openyurt.io/update-strategy
设置为 "AdvancedRollingUpdate" 或者 "OTA", 并且将 .spec.updateStrategy.type
设置为 "OnDelete"。
用户使用:
1)安装Yurt-Manager组件
daemonpodupdater
控制器集成于Yurt-Manager
组件,使用 AdvancedRollingUpdate 或 OTA 升级模型前需要安装部署Yurt-Manager
,相关操作可以参照部署OpenYurt组件