OpenYurt v1.1.0: 新增 DaemonSet 的 OTA 和 Auto 升级策略
简介: 在 OpenYurt v1.1.0 版本中,我们提供了 Auto 和 OTA 的升级策略。Auto 的升级策略重点解决由于节点 NotReady 而导致 DaemonSet升级阻塞的问题,OTA 的升级策略主要应对边缘侧用户需要自主控制升级时机的场景。以下对这两种策略做简要的介绍。
作者:昌蒲、侯雪城
边缘计算云原生平台、CNCF SandBox 项目 - OpenYurt[1],近期发布了 v1.1.0 版本。
OpenYurt 作为边缘云原生领域的开源项目,采用云管边的云边一体化架构,致力于解决云原生落地边缘计算场景的痛点问题。针对边缘计算场景,重点提供了边缘自治、云边运维通道、资源及流量的单元化管理、设备管理等核心能力。所有功能对原生 Kubernetes 无侵入,全部采用 Addons 的形式安装部署。
版本解析
在 OpenYurt v1.1.0 版本中,我们提供了 Auto 和 OTA 的升级策略。Auto 的升级策略重点解决由于节点 NotReady 而导致 DaemonSet[3]升级阻塞的问题,OTA 的升级策略主要应对边缘侧用户需要自主控制升级时机的场景。以下对这两种策略做简要的介绍。
DaemonSet 的 Auto 升级策略
在云边一体化架构中,边缘节点通常借助公网与云上管控交互。一方面,由于公网的不稳定性通常会导致边缘节点处于 NotReady 的状态,另一方面一些边缘节点处于网络受限的环境内,业务部署之后会断开公网连接。而原生 DaemonSet 滚动升级策略中,会因为节点的 NotReady 而导致老的 Pod 一直处于 Terminating 的状态,新的 Pod 无法创建,从而阻塞整个升级流程,导致集群中 Ready 节点上的 Pod 也无法继续升级。
为了解决上述问题,我们扩展了原生 DaemonSet 的升级模型[2],在 Yurt-Controller-Manager 组件内新增自定义控制器 daemonPodUpdater-controller,提供了 Auto 的升级策略。该策略支持跳过 NotReady 节点上 Pod 的升级,待节点 Ready 之后,会自动触发 Pod 的更新。
如果需要使用 DaemonSet 的 Auto 升级策略,需要将原生的升级策略设置为 OnDelete,便于让 daemonPodUpdater-controller 接管 DaemonSet 的升级。同时,需要增加 annotations apps.openyurt.io/update-strategy: auto 来标名使用 Auto 的升级策略。此外,还可以通过设置 apps.openyurt.io/max-unavailable 的 annotations 来支持升级配置过程中 Pod 最大不可用数。具体的升级策略配置文件示例如下。
apiVersion: apps/v1
kind: DaemonSet
metadata:
# ···
annotations:
apps.openyurt.io/update-strategy: auto
# 该注解用于滚动更新时设置最大不可用 pod 数量,仅在 auto 模式下起作用。
# 该注解支持的配置值与原生 DaemonSet 配置中 maxUnavailable 相同,默认值为10%。
apps.openyurt.io/max-unavailable: 30%
# ···
spec:
# ···
# 使用 auto模型的另一个前提条件是将 updateStrategy 设置为 OnDelete。
updateStrategy:
type: OnDelete
# ···
DaemonSet 的 OTA 升级策略
边缘侧业务所处的环境复杂多样,通过云上做统一升级的方式很难满足所有的业务升级场景。在一些边缘计算场景中,当业务有新版本发布时,用户期望能够自行决定升级的时机。例如,位于汽车上的边缘业务,当汽车正在行驶的过程中,是不能触发业务升级的,如果从云端做统一的升级,会导致业务服务中断,甚至引发交通事故。
为此,我们提供了 OTA 的升级策略,支持云端发布新版本,边缘侧用户自动决定升级时机。该策略由 daemonPodUpdater-controller 和 YurtHub 组件配和实现。在 daemonPodUpdater-controller 中,检测到 DaemonSet 有新版本发布时,会在 DaemonSet 所管理的 Pod 中新增 PodNeedUpgrade 的 condition 来表明此 Pod 有新版本发布,可以升级。在 YurtHub 中提供 Pod 升级相关的 API,边缘侧的用户通过自行调用 YurtHub 提供的 API 来完成业务 Pod 升级。
如果需要使用 OTA 的升级策略,需要将原生的升级策略设置为 OnDelete,同时增加 annotations apps.openyurt.io/update-strategy: ota 来标明使用 OTA 的升级策略没,具体的升级策略配置文件示例如下:
apiVersion: apps/v1
kind: DaemonSet
metadata:
# ···
annotations:
apps.openyurt.io/update-strategy: ota
# ···
spec:
# ···
# 使用ota 升级模型的另一个前提条件是将 updateStrategy 设置为 OnDelete。
updateStrategy:
type: OnDelete
# ···
此外,用户需要自行调用 YurtHub 的 API 来自行发现和升级 Pod,API 设计如下:
1. GET /pods:
通过该接口可以获取到边缘节点上全部 pods 列表信息,通过 pod 的 PodNeedUpgrade 状态判断是否有新版本可升级。
2. POST /openyurt.io/v1/namespaces/{ns}/pods/{podname}/upgrade:
通过该接口用户可以指定升级某个 DaemonSet Pod。路径参数 ns 与 podname 分别代表 Pod 的命名空间以及名称。
其它改动
你可以通过 Github release[4]页面,来查看更多的改动以及它们的作者与提交记录。
社区参与
非常欢迎你通过 Github/Slack/钉钉 等方式加入我们来参与 OpenYurt 开源社区。你是否已经有一些希望与我们社区交流的内容呢?可以在我们的社区周会[6]上分享你的声音,或通过加入社区 Slack channel[5]参与讨论。
相关链接
[1] OpenYurt
[2] 新增DaemonSet的OTA和Auto升级策略Proposal
https://github.com/openyurtio/openyurt/blob/master/docs/proposals/20220718-workload-update-model.md
[3]参考文档
https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
[4]Github release
https://github.com/openyurtio/openyurt/releases
[5] Slack channel
https://join.slack.com/t/openyurt/shared_invite/zt-1aya4w279-Ea7ZbfdhPARpshRdUUxfwg
[6] 社区周会
https://shimo.im/docs/rGK3cXYWYkPrvWp8
如果您对于 OpenYurt 有任何疑问,欢迎使用钉钉扫描二维码加入钉钉交流群。

戳此处,立即了解 OpenYurt 项目!
OpenYurt v1.1.0: 新增 DaemonSet 的 OTA 和 Auto 升级策略的更多相关文章
- 新旧版本功能对比 | v1.5.0 全新升级
Hi~社区的小伙伴们大家好呀! CloudQuery 最新 1.5.0 社区版本即将于 4月14日 发布,正式上线前,我们迫不及待与大家分享与 v1.4 相比,v1.5.0 在性能和功能上有哪些更新和 ...
- Kube-OVN v1.10.0:新增Windows节点支持,用户自定义子网ACL等10+硬核功能
在Kube-OVN社区小伙伴的共同努力下,Kube-OVN v1.10.0于五月份正式发布.Kube-OVN v1.10.0版本中,我们一如既往地对Kube-OVN 的功能.性能.稳定性和易用性进行了 ...
- FineUI(专业版)v1.2.0 和 FineUI(开源版)v4.1.1 同时发布!
FineUI(开源版)v4.1.1 (建议所有 v4.x 升级到此版本):http://fineui.com/demo/ +2014-08-15 v4.1.1 -修正Form中表单字段设 ...
- kubernetes之Kubeadm快速安装v1.12.0版
通过Kubeadm只需几条命令即起一个单机版kubernetes集群系统,而后快速上手k8s.在kubeadm中,需手动安装Docker和kubeket服务,Docker运行容器引擎,kubelet是 ...
- AEAI CRM V1.6.0 升级说明,开源客户关系管理系统
1 升级说明 AEAI CRM v1.6.0版是AEAI CRM v1.5.2版客户关系管理系统的升级版本,本次版本是基于AEAI DP v3.8.0_20170228进行打包部署的,升级内容主要是针 ...
- AEAI HR开源人力资源管理v1.6.0发版公告
1 升级说明 AEAI HR v1.6.0版是AEAI HR v1.5.2版人力资源管理系统的升级版本,本次升级的系统是基于AEAI DP 3.8.0_20170228进行打包部署的,升级内容主要是针 ...
- CentOS 7.4 安装 K8S v1.11.0 集群所遇到的问题
0.引言 最近打算将现有项目的 Docker 部署到阿里云上面,但是之前是单机部署,现在阿里云上面有 3 台机器,所以想做一个 Docker 集群.之前考虑是用 Docker Swarm 来做这个事情 ...
- AEAI WM v1.6.0 升级说明,开源工作管理系统
1 升级说明 AEAI WM v1.6.0版是AEAI WM v1.5.0版工作管理系统的升级版本,本次升级的系统是基于AEAI DP 3.8.0_20170228进行打包部署的,对产品中的功能及BU ...
- 【京东助手】滑稽东试用助手 V1.6.0
很久没写博客了,发个最近在做的一个软件! 滑稽东试用助手现有功能1.自动申请试用2.自动领取京豆3.自动签到领取京豆说明:该软件使用C#开发,若要运行此应用程序,您必须首先安装 .NET4.01.双击 ...
- 从零到一,利用kubeadm在ubuntu server 16.04 64位系统离线安装kubernetes v1.10.0
说明 初步接触kubernets,记录学习过程 本教程目的利用kubeadm在ubuntu server 16.04 64位系统离线安装kubernets v1.10.0 环境信息 节点IP地址 角色 ...
随机推荐
- 基于C#的壁纸管理器(插件版) - 开源研究系列文章
这几天无聊,想到原来的壁纸管理器应用能够实现成插件的形式,然后思考了一下,打算把原来壁纸管理器的代码用插件形式来进行实现,于是经过几天的努力,终于完成了插件版的壁纸管理器.以前有写过C#的插件的例子( ...
- 【atcoder 293 F - Erase Subarrays】【动态规划】
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public ...
- 打造餐饮+元宇宙新体验!实时云渲染赋能DQverse未来世界
随着元宇宙的迅猛发展,实体餐饮产业与虚拟元宇宙之间的交汇愈发频繁.诸如海底捞.奈雪的茶.星巴克.王老吉.肯德基等知名餐饮品牌纷纷加大对元宇宙领域的投资与布局. 图源网络 最初只是线上虚拟餐厅的概念,如 ...
- 调试3D渲染和3D可视化的五个好处
建筑和建筑环境是我们日常生活中不可避免的一部分,直接影响我们和我们的福祉.它可以是我们的家.办公室.附近的教堂或城市的商业综合体;所有这一切的设计和规划都是建筑.然而,具有讽刺意味的是,建筑的交流往往 ...
- Redis数据库安装与使用总结
Redis语句总结 一.基本概念 Redis 全称: Remote Dictionary Server(远程字典服务器)的缩写,以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容. 使用 ...
- Jmeter前言
前言 为什么要撰写这样一个教程呢? 深入学习Jmeter 温故而知新.尽管我已经使用JMeter很长时间,但还有许多元件我并不十分了解,因此,编写教程的过程成为了我的学习过程,通过反复回顾和整理知识, ...
- 快速上手系列:JavaScript进阶
一.基础 1.在firbug调试器的控制台输出内容. function(){ console.log() } 2.argument.没有形参也可表示传进来的参数,用数组表示,如argument[0], ...
- 降低FTP服务器速度的解决方案(Filezilla等)
我最近发现,尽管有70Mbps(8.75MB / s)的互联网连接和1Gbps(125MB / s)的专用服务器可以从中下载,但我似乎只能从FTP服务器上以大约16.8Mbps(2.1MB / s)的 ...
- quartus之LPM_MULT测试
quartus之LPM_MULT测试 1.基本作用 一个专用的乘法器,可以调用DSP单元的IP,可以提高设计中的运算效率. 2.实际操作 `timescale 1ns/1ns module mult_ ...
- 英语文档阅读之Zynq-7000 All Programmable SoC
Read "Zynq-7000 All programmable Soc" 1.Table of Contents 首先是目录,可以看到是标准的总分结构.开头介绍了Zynq的各种功 ...