Skip to content

本文为 SPIRE 官方文档 upgrading.md 的中文译本,以英文原文为准。 🔗 穿越源码分析:整体架构

管理升级 / 降级

本指南介绍如何升级你的 SPIRE 部署,以及 SPIRE 用户可以预期的兼容性保证。

SPIRE 版本号

SPIRE 版本号表示为 x.y.z,其中 x 是主版本号(major),y 是次版本号(minor),z 是补丁版本号(patch),遵循语义化版本(Semantic Versioning)的术语。1.0 之前的最后一批版本是 0.12.x,作为例外,它们与 1.0.x 之间具有兼容性保证。0.12.0 之前的版本与 1.0.x 不兼容。

SPIRE Server 兼容性

在同一个 SPIRE Server 集群内,支持 +/- 1 个次版本的版本偏差(version skew)。换句话说,任一集群中最新与最旧的 SPIRE Server 实例,彼此之间的次版本号差距不得超过一个。作为例外,0.12.x 版本与 1.0.x 版本兼容。

示例 1(0.12.x 例外情形):

  • 最新的 SPIRE Server 实例为 1.0.3
  • 其他 SPIRE Server 实例支持 1.0.x 和 0.12.x

示例 2:

  • 最新的 SPIRE Server 实例为 1.2.3
  • 其他 SPIRE Server 实例支持 1.2.x 和 1.1.x

SPIRE Agent 兼容性

SPIRE Agent 不得比与其通信的最旧 SPIRE Server 更新,且最多可比其旧一个次版本。作为例外,SPIRE Agent 0.12.x 版本与 SPIRE Server 1.0.x 版本兼容。

示例 1(0.12.x 例外情形):

  • SPIRE Server 同时存在 1.0.3 和 1.0.2
  • SPIRE Agent 支持 0.12.0 到 1.0.2

示例 2:

  • SPIRE Server 同时存在 1.2.3 和 1.2.2
  • SPIRE Agent 支持 1.1.0 到 1.2.2

SPIRE 插件兼容性

SPIRE 插件总体上遵循与所有其他 SPIRE 组件相同的保证,只是对于 SPIRE 无法控制的外部插件所做的改动有少许例外。

配置与行为兼容性

当一个内置插件发生向后不兼容的改动(例如配置语义变化、产生的选择器变化等)时,它会记录一条警告,但在改动引入后的一个次版本内仍保持向后兼容,给运维人员留出时间来采纳必要的调整。 对于外部插件的配置或行为兼容性,SPIRE 无法做出任何保证。

接口兼容性

当插件接口引入破坏性改动时,针对旧接口编译的现有插件仍会继续工作一个次版本发布周期,以便运维人员有时间采纳必要的调整。SPIRE 会记录警告,让运维人员知悉该变更。

弃用日志标记

弃用(deprecation)警告包含结构化字段,便于查找和告警。所有弃用告警都包含 alert=true。配置弃用警告包含 alert_type=deprecated_config,而已弃用的插件服务警告包含 alert_type=deprecated_service

支持的升级路径

SPIRE Server 与 Agent 之间受支持的版本偏差,对二者的升级顺序有影响。SPIRE Server 必须先于 SPIRE Agent 升级,且每次升级最多跨越一个次版本(无论补丁版本如何)。跳过两个或更多次版本的升级(例如 1.1.1 到 1.3.0)不受支持。

SPIRE Server 与 Agent 实例可以采用滚动(rolling)方式升级。

例如,从 1.1.1 升级到 1.2.3:

  • 逐个把 SPIRE Server 实例从 1.1.1 升级到 1.2.3
  • 确认 SPIRE Server 集群运行符合预期
  • 逐个或分批把 SPIRE Agent 实例从 1.1.1 升级到 1.2.3

请注意,虽然强烈推荐滚动升级,但它并非严格必需。只要集群中有一个以上的 SPIRE Server,SPIRE Server 就支持零停机(zero-downtime)升级。

支持的降级路径

为应对升级过程中遇到问题的情况,SPIRE 支持降级。由于 Agent 不能比与其通信的最旧 Server 更新,因此在 Agent 已经升级的前提下,必须先降级 Agent,再降级 Server。正因如此,在升级 Agent 之前,最好先确认升级后的 SPIRE Server 运行符合预期。

例如,从 1.2.3 降级到 1.1.1:

  • 逐个或分批把 SPIRE Agent 实例从 1.2.3 降级到 1.1.1
  • 逐个把 SPIRE Server 实例从 1.2.3 降级到 1.1.1

请注意,虽然强烈推荐滚动降级,但它并非严格必需。只要集群中有一个以上的 SPIRE Server,SPIRE Server 就支持零停机降级。

实验性特性

某些 SPIRE 特性被视为实验性(experimental)。这些特性通过配置中的 experimental 部分启用。一个特性之所以以实验性形式引入,可能有多种原因,例如缺乏测试、对底层依赖或平台不够熟悉、对可用性或安全性存在顾虑等。实验性特性在成熟过程中,其行为、配置形态和性能可能经历诸多变化,甚至可能被移除。换言之,这些特性不被视为稳定。

考虑到实验性特性的潜在不稳定性,上述升级与兼容性保证对其并不适用。