Rancher 系列文章-Rancher 升级

概述

之前在 天翼云上用 4 台机器安装了一个 1 master(及 etcd) 3 node 的 K3S 集群,并在其上使用 Helm 安装了 Rancher 2.6.3 版本。

前几天发现 Rancher 官方推荐的最新版为:v2.6.4

所以决定先后对 Rancher 和 K3S 集群进行升级。

根据官方推荐,计划:

  1. 将 Rancher 从 v2.6.3 升级到 v2.6.4
  2. 将 K3S 集群从 v1.21.7+k3s1 升级到 v1.22.5+k3s2

本文为 Rancher 的升级记录。

相关信息

本次升级的 Rancher 的基本信息为:

  1. Rancher v2.6.3
  2. 使用 Helm 3, 在线安装
  3. 使用 cert-manager(v1.7.1) + let's encrypt 管理证书

升级步骤

一、备份运行 Rancher Server 的 Kubernetes 集群

使用 备份应用程序 来备份 Rancher。

如果在升级过程中出现问题,你将使用备份作为恢复点。

备份结果如下图:

二、更新 Helm Chart repository

  1. 更新本地 helm 缓存。

    复制代码
    helm repo update
  2. 获取用来安装 Rancher 的存储库名称。

    关于存储库及其区别,请参见 Helm Chart Repositories

    • Latest:推荐用于尝试最新功能
    • Stable:推荐用于生产环境 (📝 我用的是这个)
    • Alpha:即将发布的版本的实验性预览

    请将命令中的 <CHART_REPO>,替换为 lateststablealpha

    复制代码
    $ helm repo list
    
    NAME                    URL
    bitnami                 https://charts.bitnami.com/bitnami
    grafana                 https://grafana.github.io/helm-charts
    aliyuncs                https://apphub.aliyuncs.com
    rancher-stable          http://rancher-mirror.oss-cn-beijing.aliyuncs.com/server-charts/stable
    prometheus-community    https://prometheus-community.github.io/helm-charts
  3. 从 Helm chart 库中获取最新的 chart 来安装 Rancher。

    该命令将提取最新的 chart,并将其作为 .tgz 文件保存在当前目录中。可以通过添加 --version= 标记来获取要升级到特定版本的 chart。如下:

    复制代码
    helm fetch rancher-stable/rancher --version=v2.6.4

三、升级 Rancher

使用 Helm 升级 Rancher 的普通(互联网连接)安装。

从当前安装的 Rancher Helm chart 中获取用 --set 传递的值。

复制代码
$ helm get values rancher -n cattle-system
USER-SUPPLIED VALUES:
hostname: rancher.ewhisper.cn
ingress:
  tls:
    source: letsEncrypt
replicas: 1
systemDefaultRegistry: registry.cn-hangzhou.aliyuncs.com

🐾 Notes:

因为我的集群是测试或 Demo 用途,所以 replicas 设置为 1

将上一步中的所有值用--set key=value 追加到命令中。

复制代码
helm upgrade rancher rancher-stable/rancher \
  --namespace cattle-system \
  --set hostname=rancher.ewhisper.cn \
  --set ingress.tls.source=letsEncrypt \
  --set replicas=1 \
  --set systemDefaultRegistry=registry.cn-hangzhou.aliyuncs.com \
  --version=2.6.4

四、验证升级是否成功

登录 Rancher,确认升级成功。

🎉🎉🎉

但是,验证过程中也发现几个问题,下面一一描述及解决。

升级后出现的问题

  • helm 升级失败,报错 rendered manifests contain a resource that already exists
  • 受管集群 home-k3s 无法连接。

Helm 升级 Rancher 失败

问题

报错如下:

复制代码
Error: UPGRADE FAILED: rendered manifests contain a resource that already exists. 
Unable to continue with update: Secret "bootstrap-secret" in namespace "cattle-system" exists and cannot be imported into the current release: invalid ownership metadata; 
label validation error: missing key "app.kubernetes.io/managed-by": must be set to "Helm"; 
annotation validation error: missing key "meta.helm.sh/release-name": must be set to "rancher"; 
annotation validation error: missing key "meta.helm.sh/release-namespace": must be set to "cattle-system"

解决办法

GitHub 搜索相关 Issue, 发现是 v2.6.4 的 Bug, Workaround 措施:

首先删除密钥,然后再次运行 helm 安装:

复制代码
kubectl delete secret -n cattle-system bootstrap-secret

helm upgrade rancher rancher-stable/rancher \
  --namespace cattle-system \
  --set hostname=rancher.ewhisper.cn \
  --set ingress.tls.source=letsEncrypt \
  --set replicas=1 \
  --set systemDefaultRegistry=registry.cn-hangzhou.aliyuncs.com \
  --version=2.6.4

问题解决。

受管集群 home-k3s 无法连接

问题

升级后发现:受管集群 home-k3s 无法连接,如下图:

登录受管集群,查看 cattle-cluster-agent 的日志,发现报错提示 镜像的格式不对,拉取的为 x86_64 格式的镜像。

这是因为前面 Helm 安装的时候增加了 systemDefaultRegistry=registry.cn-hangzhou.aliyuncs.com 这个参数,而 registry.cn-hangzhou.aliyuncs.com 镜像库只有 x86_64 格式的镜像,没有 arm64 格式的镜像,而我的 home-k3s 是安装在 树莓派 4 上面的。

解决办法

移除 Helm 的systemDefaultRegistry=registry.cn-hangzhou.aliyuncs.com 配置,执行 upgrade, 如下:

复制代码
helm upgrade rancher rancher-stable/rancher \
  --namespace cattle-system \
  --set hostname=rancher.ewhisper.cn \
  --set ingress.tls.source=letsEncrypt \
  --set replicas=1

执行成功后,发现 Helm 的配置已变更,但是 Rancher 的 systemDefaultRegistry 却仍是 registry.cn-hangzhou.aliyuncs.com.

这里发现 Rancher 界面显示如下 - set by env value:

最终发现是配置在这里:

复制代码
apiVersion: management.cattle.io/v3
kind: Setting
metadata:
  name: system-default-registry
customized: false
default: ''
source: ''
value: 'registry.cn-hangzhou.aliyuncs.com'

删除这个 yaml 或将 value 改为:value: '', 并重启 Rancher, 重启后生效,发现 'registry.cn-hangzhou.aliyuncs.com' 以被移除。

相关推荐
iCxhust1 小时前
c# U盘映像生成工具
开发语言·单片机·c#
yangzhi_emo2 小时前
ES6笔记2
开发语言·前端·javascript
emplace_back3 小时前
C# 集合表达式和展开运算符 (..) 详解
开发语言·windows·c#
jz_ddk3 小时前
[学习] C语言数学库函数背后的故事:`double erf(double x)`
c语言·开发语言·学习
萧曵 丶3 小时前
Rust 所有权系统:深入浅出指南
开发语言·后端·rust
xiaolang_8616_wjl3 小时前
c++文字游戏_闯关打怪2.0(开源)
开发语言·c++·开源
收破烂的小熊猫~3 小时前
《Java修仙传:从凡胎到码帝》第四章:设计模式破万法
java·开发语言·设计模式
nananaij4 小时前
【Python进阶篇 面向对象程序设计(3) 继承】
开发语言·python·神经网络·pycharm
阿蒙Amon4 小时前
为什么 12 版仍封神?《C# 高级编程》:从.NET 5 到实战架构,进阶者绕不开的必修课
开发语言·c#