Rancher 系列文章-Rancher 升级
概述
之前在 天翼云上用 4 台机器安装了一个 1 master(及 etcd) 3 node 的 K3S 集群,并在其上使用 Helm 安装了 Rancher 2.6.3 版本。
前几天发现 Rancher 官方推荐的最新版为:v2.6.4
所以决定先后对 Rancher 和 K3S 集群进行升级。
根据官方推荐,计划:
- 将 Rancher 从 v2.6.3 升级到 v2.6.4
- 将 K3S 集群从 v1.21.7+k3s1 升级到 v1.22.5+k3s2
本文为 Rancher 的升级记录。
相关信息
本次升级的 Rancher 的基本信息为:
- Rancher v2.6.3
- 使用 Helm 3, 在线安装
- 使用 cert-manager(v1.7.1) + let's encrypt 管理证书
升级步骤
一、备份运行 Rancher Server 的 Kubernetes 集群
使用 备份应用程序 来备份 Rancher。
如果在升级过程中出现问题,你将使用备份作为恢复点。
备份结果如下图:


二、更新 Helm Chart repository
更新本地 helm 缓存。
helm repo update
获取用来安装 Rancher 的存储库名称。
关于存储库及其区别,请参见 Helm Chart Repositories。
- Latest:推荐用于尝试最新功能
- Stable:推荐用于生产环境 ( 我用的是这个)
- Alpha:即将发布的版本的实验性预览
请将命令中的
<CHART_REPO>,替换为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
三、升级 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' 以被移除。
问题解决。
️参考文档
- Support matrix - Rancher v2.6.4
- 升级指南 | Rancher 文档
- Secret "bootstrap-secret" in namespace "cattle-system" exists and cannot be imported seen when upgrading/re-installing Rancher when bootstrap-secret is not created by Helm · Issue #37060 · rancher/rancher (github.com)
- v2.6.4 Milestone (github.com)
三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.
Rancher 系列文章-Rancher 升级的更多相关文章
- Rancher中的服务升级实验
个容器副本,使用nginx:1.13.0镜像.假设使用一段时期以后,nginx的版本升级到1.13.1了,如何将该服务的镜像版本升级到新的版本?实验步骤及截图如下: 步骤截图: 个容器,选择镜像ngi ...
- Velero 系列文章(二):使用 Helm 安装 Velero
概述 本文是通过 Helm 3 来安装 Velero, 只做最基本的安装.并计划将 YAML (只备份 YAML, 不备份 Volume) 备份到腾讯云的 COS(兼容 S3, 所以可以通过 AWS ...
- 转:Android IOS WebRTC 音视频开发总结 (系列文章集合)
随笔分类 - webrtc Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译和整理的,译 ...
- 一、VUE项目BaseCms系列文章:项目介绍与环境配置
一.项目效果图预览: 二.项目介绍 基于 elementui 写一个自己的管理后台.这个系列文章的目的就是记录自己搭建整个管理后台的过程,希望能帮助到那些入门 vue + elementui 开发的小 ...
- MySQL优化篇系列文章(二)——MyISAM表锁与InnoDB锁问题
我可以和面试官多聊几句吗?只是想... MySQL优化篇系列文章(基于MySQL8.0测试验证),上部分:优化SQL语句.数据库对象,MyISAM表锁和InnoDB锁问题. 面试官:咦,小伙子,又来啦 ...
- IT编程相关内容汇总 - 进阶者系列 - 学习者系列文章
笔者工作了十多年了,对于技术也有一定的经验,但是IT编程技术的更新是挺快的,特别是各种框架,各种中间件啥的都涌现出来了.这篇博文笔者打算将IT编程的前端.后端.数据库和移动端做一个博文知识汇总,让阅读 ...
- Grafana 系列文章(十):为什么应该使用 Loki
️URL: https://grafana.com/blog/2020/09/09/all-the-non-technical-advantages-of-loki-reduce-costs-stre ...
- 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录
ABP相关岗位招聘:给热爱.NET新技术和ABP框架的朋友带来一个高薪的工作机会 ABP交流会录像视频:ABP架构设计交流群-7月18日上海线下交流会的内容分享(有高清录像视频的链接) 代码自动生成: ...
- 【NLP】蓦然回首:谈谈学习模型的评估系列文章(一)
统计角度窥视模型概念 作者:白宁超 2016年7月18日17:18:43 摘要:写本文的初衷源于基于HMM模型序列标注的一个实验,实验完成之后,迫切想知道采用的序列标注模型的好坏,有哪些指标可以度量. ...
- 【微信小程序开发•系列文章六】生命周期和路由
这篇文章理论的知识比较多一些,都是个人观点,描述有失妥当的地方希望读者指出. [微信小程序开发•系列文章一]入门 [微信小程序开发•系列文章二]视图层 [微信小程序开发•系列文章三]数据层 [微信小程 ...
随机推荐
- 【逆向】x64dbg设置条件断点 比较内存字符串是否相等
前言 在OD中可以设置条件断点,通过表达式对字符串数据进行比较,比如在CreateFile打开某个特定文件的时候让调试器中断.但是在x32dbg.x64dbg中因为表达式只支持整数,不支持字符串和其它 ...
- uniapp中使用AntV F6 + table表格插件使用
首先看页面效果: AntV官网下载F6文件到项目中与uViewUI插件 <template> <view class="page"> <!-- 导航栏 ...
- C#下解析、生成JAVA的RSA密钥、公钥
1.从 https://www.nuget.org/packages/BouncyCastle/下载对应的nupkg包,放到本地一个文件夹中 2.打开VS2010,工具->NuGet程序包管理器 ...
- Vuex----Actions
Actions用于处理异步任务. 如果通过异步操作变更数据,必须通过 Action,而不能使用Mutation,但是在 Action中还是要通过触发Mutation的方式间接变更数据. 注意: 在Ac ...
- jsp+servlet+mysql
前后端很容易因为编码的问题引起乱码 所以一定要搞清charset的几个值 charset=iso-8859-1 西欧的编码,英文编码 charset=gb2312 中文编码 charset=utf- ...
- 06 HBase安装与伪分布式配置
1.下载压缩文件 2.解压 3.修改文件夹名 4.修改文件夹权限 5.配置环境变量 6.伪分布式配置文件 7.启动HDFS,启动Hbase 8.进入shell界面 9.停止Hbase,停止HDFS运行
- windows 获取USB,发现安卓设备,转载自www.jb51.net/article/164456.htm
转载 作者:jgw2008 import win32com.client def CheckDev(): wmi = win32com.client.GetObject ("winmgmts ...
- CF1408
CF1408 那个博客搭好遥遥无期. A: 直接做就行了,我没智力还写 \(dp\) . #include<bits/stdc++.h> using namespace std; #def ...
- spring-boot-devtools热部署揭秘
前言 在开发项目过程中,当修改了某些代码后需要本地验证时,需要重启本地服务进行验证,启动这个项目,如果项目庞大的话还是需要较长时间的,spring开发团队为我们带来了一个插件:spring-boot- ...
- mergehex tools安装
(1)nRF5x command line tools包括Jlink驱动以及Nordic自己开发的一些命令行工具,具体包括Jlink驱动,nrfjprog,nrfutil以及mergehex等. 下载 ...