共計 4688 個字符,預計需要花費 12 分鐘才能閱讀完成。
本篇文章為大家展示了如何將 Rancher2.5.x 遷移至任意 K8S 發行版,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
Rancher v2.5 之前的版本是不支持將 Rancher 遷移到其他集群的,但可以利用一些“黑科技”實現將 Rancher 遷移到新的集群。
從 Rancher v2.5 開始,可以使用 rancher-backup operator 來備份和恢復 Rancher,rancher-backup 工作時不需要暴露 etcd,因為 operator 通過調用 kube-apiserver 來收集資源。我們可以利用此特性將 Rancher 遷移到任何標準 Kubernetes 發行版的集群中。
遷移過程概要:
創建 Rancher 備份,并將備份上傳到備份存儲位置
創建 Rancher local 集群
使用 Restore 自定義資源從備份中還原到 local 集群
使用 Helm 安裝 Rancher
遷移先決條件:
Rancher 版本必須是 v2.5.0 及以上。
如果你要將 Rancher 遷移到一個新的 Kubernetes 集群,你不需要先在新集群上安裝 Rancher。如果將 Rancher 還原到一個已經安裝了 Rancher 的新集群上,可能會引起問題。
要求使用與第一個集群中設置的服務器 URL 相同的 hostname,本例為:rancher.kingsd.top。
備份存儲位置:
Rancher v2.5 備份支持將備份文件推送到兼容 S3 的對象存儲(比如:MinIO 或阿里云 OSS),也可以存儲在一個 Persistent Volumes 中。考慮到一些用戶是離線環境,而且跨集群使用 Persistent Volumes 的方式比較麻煩,所以本文采用將備份推送到 MinIO 的方式。
MinIO 安裝參考 MinIO 官網 (https://docs.min.io/) 即可。本文已安裝的 MinIO 地址為:https://rancher.kingsd.top。
安裝單節點 Rancher
為了更好的展現遷移效果,本文將演示“單節點”遷移到“高可用”的場景,當然,也支持“高可用”遷移到“高可用”的場景,步驟基本相同。
由于在上面“遷移先決條件”中提到的“要求使用與第一個集群中設置的服務器 URL 相同的 hostname”,所以原集群不能是“使用 Rancher 默認的自簽名證書”的方式安裝,因為該方式將自動為 Rancher 簽發證書。本文采用“使用已有的可信證書”方式安裝 Rancher:
Rancher 單節點安裝指南:
https://docs.rancher.cn/docs/rancher2/installation_new/other-installation-methods/single-node-docker/_index
sudo docker run -d --privileged --restart=unless-stopped \
-p 80:80 -p 443:443 \
-v /opt/rancher.kingsd.top.pem:/etc/rancher/ssl/cert.pem \
-v /opt/rancher.kingsd.top.key:/etc/rancher/ssl/key.pem \
rancher/rancher:v2.5.5 \
--no-cacerts
然后在 DNS 服務器上將域名 rancher.kingsd.top 映射到你的 Rancher 服務器的 IP,隨后你就可以通過 https://rancher.kingsd.top 訪問到你的單節點 Rancher UI 了。為了測試遷移之后依然可以管理下游業務集群,我們需要創建一個自定義集群,并創建幾個測試 workload,以便遷移之后做驗證。
備份 Rancher 創建 MinIO Secret
將備份上傳到 MinIO 需要設置 MinIO 的用戶名和密碼,在 Rancher 中是以 Secret 的形式存儲的,所以需要在 local 集群中提前創建:
安裝 rancher-backup operator
在 Rancher UI 的 Cluster Manager 中,選擇名為 local 的集群
在右上角單擊 Cluster Explorer
單擊 Apps
單擊 Rancher Backup operator
所有選項默認即可,直接點擊 Install 創建 Rancher Backup operator
rancher-backup 和 rancher-backup-crd 狀態為 Deployed,代表 rancher-backup operator 成功部署。
創建備份
在 Cluster Explorer 中,進入左上角的下拉菜單,單擊 Rancher Backups
選擇 Backups,然后點擊右側 Create
輸入 Backups 的配置參數:
備份創建成功后,備份狀態為 Completed,備份文件名稱為 rancher-backup-1-8f21c185-3caf-4a82-ab8c-8ba425a6667b-2021-01-19T07-12-30Z.tar.gz
MinIO 頁面也會顯示對應的備份文件:
至此,Rancher 的備份已經創建成功,并且將備份文件推送到了 MinIO。
遷移 Rancher
遷移 Rancher,其實就是利用在 MinIO 上的備份,將 Rancher 恢復到新的 Kubernetes 集群上,所以我們需要先創建一個 Kubernetes 集群做為 Rancher 的 local 集群,本例使用 K3s 作為 local 集群。
創建 K3s 集群作為 Local 集群
由于在撰寫文章使用的 Rancher 版本為 v2.5.5,此版本不支持 =v1.20 版本的 Kubernetes 集群作為 local 集群,所以需要指定 K3s 版本為 v1.19.7+k3s1:
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION= v1.19.7+k3s1 sh -
安裝 rancher-backup Helm chart
helm repo add rancher-charts https://charts.rancher.io
helm repo update
helm install rancher-backup-crd rancher-charts/rancher-backup-crd -n cattle-resources-system --create-namespace
helm install rancher-backup rancher-charts/rancher-backup -n cattle-resources-system
使用 Restore 自定義資源從備份中還原
本例使用兼容 S3 的對象存儲 MinIO 作為備份源,并且需要使用你的 MinIO 憑證進行還原,所以需要在這個集群中創建一個 MinIO Secret。Secret 數據必須有兩個 key,accessKey 和 secretKey,包含 MinIO 憑證,像這樣:
apiVersion: v1
kind: Secret
metadata:
name: minio-creds
type: Opaque
data:
accessKey: Enter your access key
secretKey: Enter your secret key
這個 secret 可以在任何命名空間中創建,上面的例子中,它將在 default 的命名空間中創建。
在 Restore 自定義資源中,prune 必須設置為 false。創建一個像下面例子一樣的 Restore 自定義資源:
# migrationResource.yaml
apiVersion: resources.cattle.io/v1
kind: Restore
metadata:
name: restore-migration
spec:
backupFilename: rancher-backup-1-8f21c185-3caf-4a82-ab8c-8ba425a6667b-2021-01-19T07-12-30Z.tar.gz
prune: false
# encryptionConfigSecretName: encryptionconfig
storageLocation:
s3:
credentialSecretName: minio-creds
credentialSecretNamespace: default
bucketName: rancher-backup
# folder: ecm1
# region: us-west-2
endpoint: minio.kingsd.top
查看 Restore 結果:
kubectl get restore
NAME BACKUP-SOURCE BACKUP-FILE AGE STATUS
restore-migration S3 rancher-backup-1-8f21c185-3caf-4a82-ab8c-8ba425a6667b-2021-01-19T07-12-30Z.tar.gz 52s Completed
如果 Restore 有異常,可以通過 cattle-resources-system 命名空間下的 rancher-backup-xxx 查看日志。
使用 Helm 安裝 Rancher
從 ResourceSets(https://github.com/rancher/backup-restore-operator/blob/master/crds/resourceset.yaml)中可以看到在備份和恢復過程中,并沒有將 Rancher 的 Pod 備份和恢復,所以需要使用 Helm 安裝與第一個集群相同版本的 Rancher。
# 如果是從 HA 遷移到 HA,不需要重新創建此 secret
kubectl -n cattle-system create secret tls tls-rancher-ingress \
--cert=/opt/rancher.kingsd.top.pem \
--key=/opt/rancher.kingsd.top.key
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
helm install rancher rancher-latest/rancher \
--namespace cattle-system \
--set hostname=rancher.kingsd.top \
--set ingress.tls.source=secret \
--set rancherImageTag=v2.5.5
此時,你需要在 DNS 服務器上將域名 rancher.kingsd.top 映射到新的 Rancher 服務器的 IP,本例為 K3s master 所在的服務器 IP,你也可以映射到 LB 的 IP。等待 DNS 配置生效,再次使用 https://rancher.kingsd.top 訪問 Rancher,可以看到 local 集群已經替成剛才安裝的 v1.19.7+k3s1 版本的 K3s,并且創建的測試 workload 正常工作,遷移成功。
上述內容就是如何將 Rancher2.5.x 遷移至任意 K8S 發行版,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注丸趣 TV 行業資訊頻道。