升级到最新版本的 Rancher 之后,下游 Kubernetes 集群可以升级为 Rancher 支持的最新的 Kubernetes 版本。

Rancher 将使用 RKE(Rancher Kubernetes Engine)作为库来创建和编辑 RKE 集群。有关为 RKE 集群配置升级策略的更多信息,请参考RKE 文档

新功能

从 Rancher v2.3.0 开始,Rancher 添加了 Kubernetes 元数据功能,该功能允许在不升级 Rancher 的情况下,获取到 Kubernetes 补丁版本。有关详细信息,请参阅关于 Kubernetes 元数据的部分。

从 Rancher v2.4.0 开始,

  • 添加了将 K3s Kubernetes 集群导入 Rancher 的功能,以及在编辑这些集群时升级 Kubernetes 的功能。有关详细信息,请参阅关于导入集群的部分。
  • Rancher UI 中提供了用于配置 RKE 集群升级策略的新高级选项:最大不可用工作节点驱散节点。这些选项利用了 RKE v1.1.0 的新的集群升级功能,其中节点可以进行滚动升级,以便在某些特殊情况下,保障在集群升级期间集群和应用的可用性。

经过测试的 Kubernetes 版本

在发布新版本的 Rancher 之前,将会对 Kubernetes 的最新次要版本进行了测试,以确保兼容性。例如,Rancher v2.3.0 中以及验证了 Kubernetes v1.15.4,v1.14.7 和 v1.13.11。有关在每个 Rancher 版本上测试过哪个版本的 Kubernetes 的详细信息,请参阅支持维护条款

升级的工作原理

RKE v1.1.0 更改了集群升级方式。

在这一部分的 升级原理中,您将了解编辑或升级 RKE Kubernetes 集群时会发生什么。

升级的最佳实践

Rancher v2.4+

升级集群的 Kubernetes 版本时,我们建议您:

  1. 备份集群,保存集群快照。
  2. 启动 Kubernetes 升级。
  3. 如果升级失败,请在 Rancher UI 中编辑集群,将 Kubernetes 版本修改为之前的版本,并单击保存。
  4. 从 etcd 快照还原集群。在还原之前,请确保您的集群正在运行升级之前的 Kubernetes 版本。

还原操作将在处于非健康状态或非 active 状态的集群上进行。

Rancher v2.4 之前的版本

升级集群的 Kubernetes 版本时,我们建议您:

  1. 备份集群,保存集群快照。
  2. 查看集群 YAML,记下当前的 Kubernetes 版本。
  3. 启动 Kubernetes 升级。
  4. 如果升级失败,编辑集群 YAML,修改 Kubernetes 版本到之前的版本。
  5. 从 etcd 快照还原集群。

**注意:**用户无法在 Rancher UI 中通过表单来还原 Kubernetes 版本。

升级 Kubernetes 版本

先决条件:

  1. 全局视图中,找到要升级 Kubernetes 版本的集群。选择 省略号 > 编辑
  2. 点开集群选项
  3. Kubernetes 版本下拉菜单中,选择要用于集群的 Kubernetes 版本。
  4. 单击保存

结果: 集群开始升级 Kubernetes 版本。

滚回 Kubernetes 版本

自 v2.4 起可用

可以使用备份将集群还原到先前的状态,并使用之前的 Kubernetes 版本。有关更多信息,请参阅以下部分:

Rancher v2.4.0 之前的版本中,需要编辑 YAML 才能回滚 Kubernetes 版本。

配置升级策略

从 RKE v1.1.0 开始,升级功能加入了一些新选项,您可以控制升级过程的一些细节,例如,您可以配置最大不可用工作节点数量、先驱散节点再升级集群、保证升级期间应用的可用性、配置升级策略等。如果满足某些条件和要求,则可以使用这些选项在集群升级期间保障集群的 Kubernetes 组件和业务应用的可用性。

可以在 Rancher UI 中通过表单来配置升级策略,也可以通过编辑cluster.yml来配置。通过编辑cluster.yml,可以使用更多高级选项。

在 Rancher UI 中配置最大不可用工作节点数量

从 Rancher UI 中,可以配置最大不可用工作节点的数量。在集群升级过程中,将按此大小批量升级工作节点。

默认情况下,最大不可用工作节点数为所有工作节点的 10%。可以通过百分比或整数的形式配置最大不可用工作节点数。当定义为百分比时,批量处理的节点数会四舍五入到最接近的节点,但最小值不会小于 1。

  1. 转到 Rancher UI 中的集群视图。
  2. 单击省略号>编辑
  3. 高级选项部分中,转到最大不可用工作节点数字段。输入批量升级的工作节点的百分比。(可选)从下拉菜单中选择数量,然后输入最大不可用工作节点的整数。
  4. 单击保存

结果: 集群已更新为使用新的升级策略。

先驱散节点再升级集群

默认情况下,在升级每个节点之前,RKE 会暂停(cordons)节点。默认情况下,不会对节点进行驱散(drain)。如果在集群配置中启用了驱散功能,则 RKE 将在升级节点之前暂停并驱散节点。

  1. 转到 Rancher UI 中的集群视图。
  2. 单击省略号>编辑
  3. 高级选项部分中,转到驱散字段,然后单击
  4. 选择安全或激进的驱散选项。有关每个选项的更多信息,请参考本节
  5. (可选)配置优雅停止时长。优雅停止时长是分配给每个 Pod 进行清理的超时时间,因此 Pod 将有机会优雅地退出。Pod 可能需要完成所有未完成的请求,回滚事务或将状态保存到某些外部存储。如果此值为负数,则将使用每个 Pod 中自己定义的优雅停止时长。
  6. (可选)配置超时,该超时是驱散节点的最长的等待的时间。超过这个时间后,即使无法完成驱散节点,也将对节点进行升级。
  7. 单击保存

结果: 集群已更新为使用新的升级策略。

注意: 从 Rancher v2.4.0 开始,存在一个已知问题,Rancher UI 将不会显示 etcd 节点和控制面节点被驱散了的状态,即使它们已被成功驱散了。

在升级期间保证应用的可用性

自 RKE v1.1.0 起可用

RKE 文档 中,您将了解在升级集群时,为防止应用宕机的要求。

在 cluster.yml 中配置升级策略

通过编辑cluster.yml,可以使用更多高级升级策略配置选项。

有关详细信息,请参阅 RKE 文档中的配置升级策略。其中也包括了用于配置升级策略的cluster.yml示例。

故障排查

如果节点在升级后没有出现,则rke up命令会报错。

如果升级前,不可用节点的数量超过了配置的最大不可用数量,则不会开始进行升级。

如果升级停止了,则可能需要修复不可用的节点或将其从集群中删除,然后才能继续升级。

发生故障的节点可能处于许多不同的状态:

  • 关机
  • 不可用
  • 升级过程中,用户清理了节点,因此节点上没有 kubelet
  • 升级本身失败

如果在升级过程中达到了最大不可用管理面节点数,则 Rancher 中的下游集群将停留在Updating状态,并且不会继续升级任何其他控制平面节点。如果其中一个节点可用,它将继续评估不可用节点的数量。如果无法修复该节点,则必须移除该节点才能继续升级。