Rancher 系列文章-Rancher 升級

東風微鳴發表於2023-03-30

概述

之前在 天翼雲上用 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。

如果在升級過程中出現問題,你將使用備份作為恢復點。

備份結果如下圖:

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,確認升級成功。

Rancher 升級 v2.6.4 成功

???

但是,驗證過程中也發現幾個問題,下面一一描述及解決。

升級後出現的問題

  • 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:

Rancher 介面 systemDefaultRegistry 顯示

最終發現是配置在這裡:

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' 以被移除。

問題解決。

?️參考文件

三人行, 必有我師; 知識共享, 天下為公. 本文由東風微鳴技術部落格 EWhisper.cn 編寫.

相關文章