概述
之前在 天翼雲上用 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 編寫.