OpenYurt v1.1.0: 新增 DaemonSet 的 OTA 和 Auto 升级策略

news2024/9/23 1:31:16

作者:昌蒲、侯雪城

边缘计算云原生平台、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 状态判断是否有新版本可升级。

  1. 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

https://openyurt.io/

[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 项目!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/12586.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

扩充antd的Icon图标库

一、功能介绍 项目中有个菜单图标支持配置的功能,如下 二、遇到的问题 上面的图标都是antdIcon组件自带的,只需要给Icon传不同的type就可以显示出来不同的图标,但是我现在需要将自己的图标也放到这个里面,而且实现通过传个type…

asp.net+sqlserver个人简历生成系统C#项目

目 录 1 项目来源 1 1.1 项目背景 1 1.2目的和意义 1 1.3研究成果 2 2 系统开发环境 3 2.1 Visual Studio.NET开发平台 3 2.2 ASP.NET 2.0开发技术 3 2.3 ADO.NET数据访问技术 4 2.4 Microsoft SQL Server简介 4 2.5 B/S结构 5 3 需求分析 6…

服务端Skynet(五)——如何搭建一个实例

服务端Skynet(五)——如何搭建一个实例 文章目录服务端Skynet(五)——如何搭建一个实例1、配置文件2、服务消息分发与回应(call/send)3、通信(server/client)4、Mysql连接1、配置文件 ​ 搭建一个实例 主要看 config 文件的设置,如下: --config inclu…

RK3399驱动开发 | 15 - RTC实时时钟芯片HYM8563S调试(基于linux5.4.32内核)

文章目录 一、Linux RTC设备驱动框架二、HYM8563实时时钟芯片1. 简介2. 引脚图3. 连接原理图三、设备驱动调试1. 设备树节点描述2. 使能内核驱动3. 测试四、hym8563驱动实现分析1. i2c设备驱动框架2. rtc设备注册流程3. 通过i2c驱动操作硬件一、Linux RTC设备驱动框架 Linux内…

宝塔防火墙必要的快速操作指令

重新启动、禁止固定ip等 重启firewall-cmd --reload 禁止固定ip:firewall-cmd --permanent --add-rich-rulerule family"ipv4" source address"192.168.1.1" reject 取消富规则:firewall-cmd --list-rich-rules 删除富规则&#…

Java#9(文字格斗游戏和对象数组练习)

目录 一.文字格斗游戏 二.对象数组 三.键盘录入练习 四.复杂对象数组练习 题目要求: 一.文字格斗游戏 Role类的代码 package Game;import java.util.Random;public class Role {String name;int blood;public Role() {}public Role(String name, int blood) {this.name na…

Node.js 流 Stream【详解】

什么是流? 流是一种将整体数据分割成多个小块依次进行处理的方式。 举个形象的例子: 山上有1000颗拳头大的小石子,需要搬下山。 传统的处理方式:安排一辆大卡车,一次性将石子全部运下山。流的处理方式:修…

Nginx制作下载站点

nginx使用的是模块ngx_http_autoindex_module来实现的,该模块处理以斜杠(“/”)结尾的请求,并生成目录列表。 nginx编译的时候会自动加载该模块,但是该模块默认是关闭的,使用下来指令来完成对应的配置 autoindex 启用或禁用目录…

医疗器械许可证怎么办理

医疗器械经营许可证申请条件 1.有两个与业务规模和业务范围相适应的质量管理机构或大专以上学历的质量管理人员。质量管理人员应具有国家认可的相关专业资格或职称; 2.具有与经营规模和范围相适应的相对独立的经营场所; 3.具备与经营规模和经营范围相…

解读OpenShift的逻辑架构和技术架构

01 OpenShift的逻辑架构 OpenShift的逻辑架构图如图2-6所示。 ▲图2-6 OpenShift逻辑架构 图2-6中的关键组件介绍如下。 底层基础设施:OpenShift可以运行在公有云(AWS、Azure、Google等)、私有云(OpenStack)、虚拟机(vSphere、RHV、红帽KVM)、X86、IBM Power/Z服务器上。…

跨域及cors解决跨域

1.什么是跨域 出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的…

DJ11 8086系列处理器(第二节课)

目录 一、8088CPU的系统总线 1. 最小模式 2. 最大模式 二、8086/8088 CPU 的功能结构 1. 8086/8088 CPU 的内部结构 2. 8086/8088 CPU 的内部寄存器 1)通用寄存器 2)段寄存器 3)控制寄存器 三、8086/8088 CPU 的存储器组织 1. 物…

超级账本Fabric的世界状态操作与账本操作

在 Hyperledger Fabric 中,账本由两个不同但相关的部分组成 - 世界状态和区块链。 世界状态: 一个数据库,其中存储了一组帐本状态的当前值的缓存。世界状态使程序可以轻松地直接访问状态的当前值,而不必通过遍历整个交易日志来计…

PROTAC与抗体偶联药物的结合

PROTAC 的靶点真核生物的蛋白降解途径主要分为溶酶体途径、泛素蛋白酶体途径、胞液蛋白酶水解途径和线粒体蛋白酶途径等四种 (图1)。其中,PROTAC 所依赖的蛋白酶体途径主要针对细胞周期蛋白、转录因子、细胞表面受体以及胞内变性蛋白等进行降解。 图 1. 不同蛋白降…

《安富莱嵌入式周报》第291期:分分钟设计数字芯片,单片机版JS,神经网络DSP,microPLC,FatFS升级至V0.15,微软Arm64 VS正式版发布

往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版: https://www.bilibili.com/video/BV1Dd4y1b74x 《安富莱嵌入式周报》第291期:分分…

分享几个小技巧教你图片怎么加边框

大家平时出去玩的时候,肯定没少拍摄照片吧?那你们都是怎么对图片进行修饰的呢?我比较喜欢给图片加上一些边框线条,这样子的图片会比较有意境,能凸显我想要表达的意思。那么大家知道怎么在图片里加边框吗?今…

【Vue.js设计与实现】第4章 响应系统的作用与实现

前言: 本文是我看的Vue.js设计与实现这本书第二篇 响应系统 的第4章 响应系统的作用与实现的一些总结与收获。 第4章从宏观视角讲述了Vue.js 3.0中响应系统的实现机制。从副作用函数开始,逐步实现一个完善的响应系统,还讲述了计算属性和watch…

java计算机毕业设计基于安卓Android的在线心理咨询与健康App

项目介绍 本文介绍了心理咨询与健康App软件开发建设的意义和国内外发展现状,然后详细描述了所开发手机APP的可行性分析,并分析了手机APP所要实现的功能。因为心里咨询设施较多,而且人口密集,不能更好的管理健康问题,造成需要时人员不必要的身心伤害,所以采用比较方便的、容易便…

Linux基本指令(下)

Linux基本指令(下)前言cat指令more命令less命令head命令tail命令wc指令date指令cal指令find指令grep指令top命令alias命令zip/unzip命令前言 上一篇Linux基本指令主要讲解了关于文件操作方面的指令,接下来这一片Linux基本指令主要讲解一下关…

聊聊推荐系统的评测(下)

这是鼎叔的第三十九篇原创文章。 行业大牛和刚毕业的小白,都可以进来聊聊。 欢迎关注本人专栏和微信公众号《敏捷测试转型》,大量原创思考文章陆续推出。 上篇请查阅:聊聊推荐系统的评测(上) 下篇,我们…