Skip to content

antony@notes:~/data-platform$ cat "Rancher-Backup-and-Restore-RKE2-DownStream-Cluster-with-Minio.md"

Rancher Backup and Restore RKE2 DownStream Cluster with Minio

2024-04-19· data-platform ·minio ·系統工程

Rancher Backup and Restore RKE2 DownStream Cluster with Minio

Preface

本篇文章會介紹

  • 如何透過 Rancher 將下游叢集的 RKE2 Cluster 中的 ETCD 資料備份至 MinIO 的 Bucket

可以透過點擊展開以下目錄,選擇想看的內容,跳轉至特定章節

:::warning

:::spoiler 文章目錄

[TOC]

:::

Prerequest

1. 透過 CLI 在 Minio 中建立 Bucket

Step1: 下載管理 MinIO 的工具,並賦予執行權限

$ sudo curl -o /usr/local/bin/mc https://dl.min.io/client/mc/release/linux-amd64/mc \
&& sudo chmod +x /usr/local/bin/mc

Step2: 新增要管理的 MinIO server

$ mc alias set myminio https://minio.example.com:9000 admin admin123
  • myminio,可自定義的 Minio Server 名稱
  • https://minio.example.com:9000
    • MinIO server 的位置 9000 Port 給 API 用的
    • 9090 Port 給 Web Console
  • admin,帳號
  • admin123,密碼

Note: 需要 DNS 能解析到 MinIO Server 的 Domain Name ( minio.example.com ),不能直接用本機名稱解析

螢幕輸出 :

Added `myminio` successfully.

Step3: create a new bucket for RKE2 Backup

$ mc mb myminio/rke2/backup
  • mc mb,creates a new bucket or directory at the specified path.
    • 可以把 mc mb 想像成 mkdir -p
  • myminio/rke2/backup,在 Minio 儲存 Data 的目錄區下建立 rke2 bucket (其實就是一個目錄),這個目錄下再建立一個 backup 目錄

Step4: Upload File to the Bucket

建立一個測試檔案

$ touch test

upload the file to the rke2 Bucket

$ mc cp test myminio/rke2/backup

檢查是否 upload 成功

$ mc ls data/rke2/backup

螢幕輸出 :

[2023-08-11 14:36:26 CST]    14B test/

:::spoiler 補充: 刪除 bucket 命令

# 刪 bucket
$ mc rb --force --dangerous myminio/rke2backup

# 刪 bucket 的所有內容
$ sudo mc rm --recursive --force data/rke2backup/

# 刪除特定時間點的 bucket 裡面的 object
## 把 --dry-run 拿掉就會真的刪除檔案
$ mc version enable myminio/test
$ mc rm --dry-run --recursive --force --versions --rewind "2023.11.15T17:46" myminio/test

:::

2. Rancher 設定 DownStream Cluster 的 ETCD Backup 到 Minio

  1. 點 “Cluster Management”
  2. 在要備份的叢集最左邊點選 “3 個點菜單”
  3. 點 “Edit Config”
  4. 在 Cluster Configuration 項目下點 “Etcd”
  5. 點擊 “Enable” Backup Snapshots to S3
  6. 點擊 “Authentication” 展開,選擇 “Create a S3-Compatible Auth Secret”
  7. Access Key 填入 admin
  8. Secret Key 填入 admin123
  9. Bucket 輸入 rke2
  10. Folder 輸入 backup
  11. Region 輸入 us-west-2
  12. Endpoint 輸入 minio.example.com:9000
  13. Endpoint CA Cert ,將簽發 MinIO 的 CA 憑證複製貼上 ( Example: cacerts.pem )
  14. 點擊 “Save”

範例示意圖 :

Take SnapShot

  1. 點 “Cluster Management”
  2. 點擊要備份的 K8S 叢集名稱
  3. 點 “Snapshots”
  4. 點 “SnapShot Now”

成功畫面


Recover a RKE2 cluster (DownStream Cluster) when all control plane nodes have failed

  1. 關閉 Control plane node (模擬災難)
  2. 在 Rancher UI 刪除 DownStream Cluster 的所有 Control plane 和 etcd node ( Cluster Management > machine > delete)

    如果刪不掉,在 Upstream Cluster 中刪除以下是 對應節點的 object kubectl -n c-m-ksb7fgl9 get nodes.management.cattle.io

  3. 複製註冊指令 (Role: all)
  4. 在新節點 Run 註冊指令 (IP 跟 Hostname 可不一樣)
  5. 在 Rancher UI 選擇 Snapshot 點擊 Restore
  6. /opt/rke2/bin 目錄底下 rke2rke2-killall.shrke2-uninstall.sh 指令複製到 /usr/local/bin: sudo cp /opt/rke2/bin/* /usr/local/bin/
  7. 啟動 rke2-server 服務: sudo systemctl enable --now rke2-server.service
  8. 等 rke2 叢集建好後,做以下設定
# Copy kubectl and other commands, Copy rke2 Command, Setup kubeconfig
$ sudo cp /var/lib/rancher/rke2/bin/* /usr/local/bin/ && \
sudo cp /opt/rke2/bin/* /usr/local/bin/ && \
mkdir -p $HOME/.kube && \
sudo cp /etc/rancher/rke2/rke2.yaml $HOME/.kube/config && \
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  1. 在 Rancher UI Restore
  2. 要記得換 kubeconfig

    如果 restore 後,沒有錯誤訊息,但 kubectl get node 之後發現還有舊的節點,請執行以下命令刪除 secret: kubectl -n kube-system delete secret k3m1.node-password.rke2