共计 2972 个字符,预计需要花费 8 分钟才能阅读完成。
简介:在 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] OpenYurthttps://openyurt.io/ [2] 新增 DaemonSet 的 OTA 和 Auto 降级策略 Proposalhttps://github.com/openyurtio… [3]参考文档 https://kubernetes.io/docs/co… [4]Github releasehttps://github.com/openyurtio… [5] Slack channelhttps://join.slack.com/t/open… [6] 社区周会 https://shimo.im/docs/rGK3cXY… 如果您对于 OpenYurt 有任何疑难,欢送应用钉钉扫描二维码退出钉钉交换群。
戳此处,立刻理解 OpenYurt 我的项目!原文链接:https://click.aliyun.com/m/10… 本文为阿里云原创内容,未经容许不得转载。