之前在 天翼云上用 4 台机器安装了一个 1 master(及 etcd) 3 node 的 K3S 集群,并在其上使用 Helm 安装了 Rancher 2.6.3 版本。
前几天发现 Rancher 官方推荐的最新版为:v2.6.4
所以决定先后对 Rancher 和 K3S 集群进行升级。
根据官方推荐,计划:
本文为 Rancher 的升级记录。
本次升级的 Rancher 的基本信息为:
使用 备份应用程序 来备份 Rancher。
如果在升级过程中出现问题,你将使用备份作为恢复点。
备份结果如下图:
更新本地 helm 缓存。
helm repo update
获取用来安装 Rancher 的存储库名称。
关于存储库及其区别,请参见 Helm Chart Repositories。
请将命令中的
,替换为 latest
,stable
或 alpha
。
$ 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
从 Helm chart 库中获取最新的 chart 来安装 Rancher。
该命令将提取最新的 chart,并将其作为 .tgz
文件保存在当前目录中。可以通过添加 --version=
标记来获取要升级到特定版本的 chart。如下:
helm fetch rancher-stable/rancher --version=v2.6.4
使用 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,确认升级成功。
但是,验证过程中也发现几个问题,下面一一描述及解决。
rendered manifests contain a resource that already exists
home-k3s
无法连接。报错如下:
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'
以被移除。