零停机 Crossplane v1 至 v2 迁移:在生产规模下原地采纳

发布日期:2026-06-26 10:02:43   浏览量 :3
发布日期:2026-06-26 10:02:43  
3

克罗斯普莱恩 v2(于 2025 年末发布)引入了更简洁、基于命名空间的资源模型,并移除了大量围绕声明和集群范围组合资源的 v1 版本繁琐流程。将控制平面升级到 v2 通常是无痛苦的——如果您没有使用那些发生变化的 v1 功能,得益于向后兼容性,您现有的声明将继续正常工作。

困难的部分在于下一步:将现有的 v1 风格工作负载迁移到 v2 风格的命名空间资源上。目前这里仍然缺乏一个连贯的、端到端的解决方案——这也是我花费大部分精力,将整个生产环境的弹性容器服务集群舰队彻底完成迁移的地方。

这篇文章是我希望当时能拥有的现场指南:原地采用方法、如何在接触任何内容之前进行验证,以及会在生产环境中给您带来麻烦的三种故障模式。

这里的任何操作都不会销毁或重建云基础设施。其核心目的是保持每个现有的亚马逊网络服务资源原封不动,仅更改哪个克罗斯普莱恩资源拥有它

设置(通用术语)

  • 一个运行克罗斯普莱恩的控制平面,端到端地管理亚马逊弹性容器服务集群
  • 每个集群由一个克罗斯普莱恩组合资源表示,该组合资源进而拥有约 90–100 个托管资源:身份和访问管理角色/策略、弹性容器服务集群、弹性容器服务插件、托管节点组、启动模板、安全组及规则、开放身份连接提供商,以及一堆通过provider-kubernetes管理的Object对象。
  • 几种不同的集群架构类型,每种类型都由其自身的组合定义支持(例如:通用工作负载集群、入口/网关集群和有状态集群)。迁移机制相同,但资源集略有不同。
  • 由吉特奥普斯驱动:吉特仓库作为单一事实来源,由吉特奥普斯控制器进行协调。

塑造所有决策的限制条件:不重建资源、不轮换节点、零停机时间。

为何“删除并重建”不可行

naive 的迁移方式是:删除 v1 组合资源,创建 v2 组合资源,让提供商重建所有内容。在生产环境中,这是不可行的:

  • 您不能在流量运行时销毁虚拟私有云、弹性容器服务控制平面或活跃的节点组并重新构建它们。
  • 即使是克罗斯普莱恩的Observe(观察)/导入流程,也会留下一个资源短暂处于未管理状态或被重建的时间窗口。
  • 任何重建节点组的操作都会触发节点轮换——集群上的每个 Pod 都会被驱逐并重新调度。这是一个客户可见的事件,您不希望它作为内部重构的副作用出现。

因此,目标不是“创建 v2 资源”。而是“让 v2 组合资源采用 v1 组合资源已经拥有的确切资源,且没有任何可观察到的变化”。

克罗斯普莱恩如何决定创建还是采用

两个事实使得原地采用成为可能:

  1. 外部名称是真实云资源的事实来源。克罗斯普莱恩根据其crossplane.io/external-name注解标识的实际亚马逊网络服务对象,对托管资源进行协调。如果由 v2 拥有的托管资源具有与实时亚马逊网络服务资源相同的外部名称,克罗斯普莱恩会观察它,而不是创建一个新的资源。

  2. 所有权通过标签 + 所有者引用来表达。组合后的托管资源通过以下方式指向其拥有的组合资源:

    • crossplane.io/composite标签,以及
    • 指向拥有组合资源(名称 + UID)的库伯内蒂斯ownerReference
  3. 在组合定义中,每个托管资源由“组合资源名称”键控——即crossplane.io/composition-resource-n

    免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据