概述
之前在 天翼云上用 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 撰寫.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/548735.html
標籤:其他
下一篇:一個有效的圖表影像資料提取框架
