Skip to content

2.3

MinIO 对象存储部署

Velero 依赖对象存储保存备份数据,这里部署 MinIO 替代公有云对象存储

minio.yaml

    spec:
      nodeSelector:
        kubernetes.io/hostname: k8smaster1 //替换成自己的主机节点名称

       image: nexus.cmss.com:8086/minio/mc:latest   // mc替换成minio-client

启动报错需要修改目录权限:
chmod 755 /data/minio
# kubectl apply -f minio.yaml
# kubectl get all -n velero
NAME                          READY   STATUS    RESTARTS   AGE
pod/minio-6d4696f57f-g64q9    1/1     Running   0          2d3h
pod/restic-k9sw9              1/1     Running   0          2d2h


NAME            TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)                         AGE
service/minio   NodePort   10.1.241.109   <none>        9000:30080/TCP,9001:30081/TCP   2d4h


NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/minio    1/1     1            1           2d4h

NAME                                DESIRED   CURRENT   READY   AGE
replicaset.apps/minio-6d4696f57f    1         1         1       2d3h


NAME                    COMPLETIONS   DURATION   AGE
job.batch/minio-setup   0/1           2d4h       2d4h
http://10.1.6.104:30081/login

minin-login

Velero 客户端

wget https://github.com/vmware-tanzu/velero/releases/download/v1.8.1/velero-v1.8.1-linux-amd64.tar.gz
tar -zxvf velero-v1.8.1-linux-amd64.tar.gz && cd velero-v1.8.1-linux-amd64
tree .
.
├── LICENSE
├── examples
│   ├── README.md
│   ├── minio
│   │   └── 00-minio-deployment.yaml
│   └── nginx-app
│       ├── README.md
│       ├── base.yaml
│       └── with-pv.yaml
└── velero
➜~ cp velero /usr/local/bin && chmod +x /usr/local/bin/velero
➜~ velero version
Client:
        Version: v1.8.1
        Git commit: 18ee078dffd9345df610e0ca9f61b31124e93f50
Server:
        Version: v1.8.1

Velero 服务端

密钥准备

# 秘钥文件credentials-velero
# cat /root/wnh/k8s/velero/credentials-velero
# 秘钥文件credentials-velero
[default]
aws_access_key_id=admin
aws_secret_access_key=minio123

客户端安装

velero install --provider aws --bucket velero --image velero/velero:v1.8.1 --plugins velero/velero-plugin-for-aws:v1.4.1 --namespace velero --secret-file /root/wnh/k8s/velero/credentials-velero --use-volume-snapshots=false --default-volumes-to-restic=true --kubeconfig=/root/.kube/config --use-restic --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://10.1.6.104:30080
# kubectl get all -n velero
NAME                          READY   STATUS    RESTARTS   AGE
pod/minio-6d4696f57f-g64q9    1/1     Running   0          2d3h
pod/restic-k9sw9              1/1     Running   0          2d3h
pod/velero-55796c7c76-v9nfg   1/1     Running   0          2d3h

NAME            TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)                         AGE
service/minio   NodePort   10.1.241.109   <none>        9000:30080/TCP,9001:30081/TCP   2d4h

NAME                    DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/restic   1         1         1       1            1           <none>          2d3h

NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/minio    1/1     1            1           2d4h
deployment.apps/velero   1/1     1            1           2d3h

NAME                                DESIRED   CURRENT   READY   AGE
replicaset.apps/minio-57c84f9cf8    0         0         0       2d4h
replicaset.apps/minio-5d66fd5444    0         0         0       2d3h
replicaset.apps/minio-6c866cffdd    0         0         0       2d3h
replicaset.apps/minio-6d4696f57f    1         1         1       2d3h
replicaset.apps/minio-7568b7d594    0         0         0       2d4h
replicaset.apps/minio-75964b589d    0         0         0       2d3h
replicaset.apps/minio-9d5556dfc     0         0         0       2d3h
replicaset.apps/velero-55796c7c76   1         1         1       2d3h

NAME                    COMPLETIONS   DURATION   AGE
job.batch/minio-setup   0/1           2d4h       2d4h

部署多集群查询服务Clusterpedia

本次测试服务使用的是一个多集群查询服务 Clusterpedia(包含使用本地存储的 MySQL+3 个 deployment 等资源)

Clusterpedia中文官网

Clusterpedia 的安装分为两个部分:
安装存储组件
安装 Clusterpedia

//拉取项目:
git clone https://github.com/clusterpedia-io/clusterpedia.git
cd clusterpedia
git checkout v0.7.0

//安装存储组件
cd ./deploy/internalstorage/mysql
export STORAGE_NODE_NAME=<节点名称>
sed "s|__NODE_NAME__|$STORAGE_NODE_NAME|g" `grep __NODE_NAME__ -rl ./templates` > clusterpedia_internalstorage_pv.yaml

kubectl apply -f .


//安装 Clusterpedia
# 跳回 Clusterpedia 项目根目录
cd ../../../
kubectl apply -f ./deploy
# kubectl get all -n clusterpedia-system
NAME                                                      READY   STATUS    RESTARTS   AGE
pod/clusterpedia-apiserver-5bd88d6488-nw8p5               1/1     Running   0          27h
pod/clusterpedia-clustersynchro-manager-57f7b7bd4-b9pxt   1/1     Running   0          27h
pod/clusterpedia-controller-manager-846c98df9d-v5v8m      1/1     Running   0          28h
pod/clusterpedia-internalstorage-mysql-7f675744f9-bsqqc   1/1     Running   0          28h

NAME                                         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
service/clusterpedia-apiserver               ClusterIP   10.1.85.124   <none>        443/TCP    28h
service/clusterpedia-internalstorage-mysql   ClusterIP   10.1.93.37    <none>        3306/TCP   28h

NAME                                                  READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/clusterpedia-apiserver                1/1     1            1           28h
deployment.apps/clusterpedia-clustersynchro-manager   1/1     1            1           28h
deployment.apps/clusterpedia-controller-manager       1/1     1            1           28h
deployment.apps/clusterpedia-internalstorage-mysql    1/1     1            1           28h

NAME                                                            DESIRED   CURRENT   READY   AGE
replicaset.apps/clusterpedia-apiserver-5bd88d6488               1         1         1       28h
replicaset.apps/clusterpedia-clustersynchro-manager-57f7b7bd4   1         1         1       28h
replicaset.apps/clusterpedia-controller-manager-846c98df9d      1         1         1       28h
replicaset.apps/clusterpedia-internalstorage-mysql-7f675744f9   1         1         1       28h

接入集群

// 可参考 https://clusterpedia.io/zh-cn/docs/usage/import-clusters/

# cat pediacluster-master.yaml 
apiVersion: cluster.clusterpedia.io/v1alpha2
kind: PediaCluster
metadata:
  name: master
spec:
  apiserver: "https://10.1.6.104:6443"
  kubeconfig: YXBpVmVyc2lvbjogdjEKY2x1c3RlcnM6Ci0gY2x1c3RlcjoKICAgIGNlcnRpZmljYXRlLWF1dGhvcml0eS1kYXRhOiBMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VNdmFrTkRRV1ZoWjBGM1NVSkJaMGxDUVVSQlRrSm5hM0ZvYTJsSE9YY3dRa0ZSYzBaQlJFRldUVkpOZDBWUldVUldVVkZFUlhkd2NtUlhTbXdLWTIwMWJHUkhWbnBOUWpSWVJGUkplazFVUVhoTlZFRjZUV3BqTUUweGIxaEVWRTE2VFZSQmQwOUVRWHBOYW1Nd1RURnZkMFpVUlZSTlFrVkhRVEZWUlFwQmVFMUxZVE5XYVZwWVNuVmFXRkpzWTNwRFEwRlRTWGRFVVZsS1MyOWFTV2gyWTA1QlVVVkNRbEZCUkdkblJWQkJSRU5EUVZGdlEyZG5SVUpCVEdocUNuWXlORE55UjFOWk1VRkJWMDFNZVhGTU5rdHNSV0YzZWl0V05sRndkSHBPTWtKSFpFTkRRbUl5Tld4NWRVWjFPVVF6WWxKQ01UWkJVbXRZZHpoUFluWUtiamN6YjBsbFFVbHNOVXR6ZFZkR1owbDZXRTV6V1RKVVZHeDRZWGt4UkhWSVFtSlFWRGRsT0VWVFRVUkJWV2NyYVZFcmNFdHpjU3RaZERsSWJWZFFPUXBMUnpZemFsUndjVEZRTlZvd2EwczVlRzVqTlZORFpTOVFWak14VVRoalNVdFhRVEJOVVc1aVFUaDFiRmsyTmtjME9EZzBkMGxCV1cxM1EzVnhWVEpOQ2xwVE5FY3pZMEZCZDFOeVZtbG9OemdyTlZkNWJrMU5aME5KWld4ME0xTTFRbnBPVXpoYU1WUkpia1ZQZEVrMU9YaHRkMFJJUlVRNGJtMTRTME5hWVVZS2NsaDNTekJPWVRkVWVUQnZSeTloVlRCWFdHcHRWRXhpTVZObGIyWllUV2RsUmpKbllXbDBTVnBTTVVrMWVXRlRiREJDYkVOT1NrbHlUR1kwV2tSdEt3cEdWVmN5Y0dwcWEwRnBVSEV4U1dvclIyOU5RMEYzUlVGQllVNWFUVVpqZDBSbldVUldVakJRUVZGSUwwSkJVVVJCWjB0clRVRTRSMEV4VldSRmQwVkNDaTkzVVVaTlFVMUNRV1k0ZDBoUldVUldVakJQUWtKWlJVWk9jV3ROYzNOME0wWnRhVmR6YmtsVVZITm1jR0ZQV25wdmNqbE5RbFZIUVRGVlpFVlJVVThLVFVGNVEwTnRkREZaYlZaNVltMVdNRnBZVFhkRVVWbEtTMjlhU1doMlkwNUJVVVZNUWxGQlJHZG5SVUpCUnpGNlVGa3lZVWxMVXpKemRVMHJhVFJUV1FwNWMwMDVhV0ZJYTNseFZUVTRjbWRpWlcxTWVHczJVbEpyYVRKdmFXdGxlV3RIWnpKV2FpdHJXVXhCVUVwcmRHOWtNemxMT1hrMFpFVm9RMDF5UVVWdENtVTNXRlZ3Ym5sR2JXdEdaRmd6VTJacmVEZHpWbFpIZFVkSE1rcHFVMkZ5YUd4Q1QzSlpSMmxOTXl0Nk1WZFNlVEJOU2xnMFR6aGFUa0Y1Vlc5alluY0tSRFl5V0ZSelZEa3pUMFI2VkRSalRXVjJVbE5zWm1adk9HeERRa3c0ZWpGd1VWcFFlVlkzUjJKNU55OVlXbEZRZERkUlExUjBhQzgzWWtvM1duQjVhZ3B4VmtRcmRuTXZWeTlsY25ZeE1FdEtZM1I2YmxZeE1HY3pjbVoySzI4NGFFcDNkSGR5TDFGQ1RFNXJkR1pYYzBOb2RXWTNWbWxYUkRGdEsySjZOR1ZzQ25ReVZWZG5VMVptZEVka1UwczFWbVJLTUZJMldtVlljRko2VVdGRFNHbDViR0pTVVRKSE9EZEthVEJHVGsxTFdXVnNaSGQyZHpVemVVVldRaXN4TTNNS00yVkJQUW90TFMwdExVVk9SQ0JEUlZKVVNVWkpRMEZVUlMwdExTMHRDZz09CiAgICBzZXJ2ZXI6IGh0dHBzOi8vMTAuMS42LjEwNDo2NDQzCiAgbmFtZToga3ViZXJuZXRlcwpjb250ZXh0czoKLSBjb250ZXh0OgogICAgY2x1c3Rlcjoga3ViZXJuZXRlcwogICAgdXNlcjoga3ViZXJuZXRlcy1hZG1pbgogIG5hbWU6IGt1YmVybmV0ZXMtYWRtaW5Aa3ViZXJuZXRlcwpjdXJyZW50LWNvbnRleHQ6IGt1YmVybmV0ZXMtYWRtaW5Aa3ViZXJuZXRlcwpraW5kOiBDb25maWcKcHJlZmVyZW5jZXM6IHt9CnVzZXJzOgotIG5hbWU6IGt1YmVybmV0ZXMtYWRtaW4KICB1c2VyOgogICAgY2xpZW50LWNlcnRpZmljYXRlLWRhdGE6IExTMHRMUzFDUlVkSlRpQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENrMUpTVVJKVkVORFFXZHRaMEYzU1VKQlowbEpUWGhCSzFwNlQxWTBZVTEzUkZGWlNrdHZXa2xvZG1OT1FWRkZURUpSUVhkR1ZFVlVUVUpGUjBFeFZVVUtRWGhOUzJFelZtbGFXRXAxV2xoU2JHTjZRV1ZHZHpCNVRYcEZkMDFVUlhkTmVra3pUa1JPWVVaM01IbE9SRVYzVFZSQmQwMTZTVE5PUkdoaFRVUlJlQXBHZWtGV1FtZE9Wa0pCYjFSRWJrNDFZek5TYkdKVWNIUlpXRTR3V2xoS2VrMVNhM2RHZDFsRVZsRlJSRVY0UW5Ka1YwcHNZMjAxYkdSSFZucE1WMFpyQ21KWGJIVk5TVWxDU1dwQlRrSm5hM0ZvYTJsSE9YY3dRa0ZSUlVaQlFVOURRVkU0UVUxSlNVSkRaMHREUVZGRlFURkZOazlEZFRsSlRYaHJPRUpDTjBNS1FXcFBRMFp5UjA5cFNUUjZNV0ZCYzB4aFlrcGlUR2hKUlhKa1dURldhbk5ZVVVSR2VDdFljRWsyUVZkb1ExaElRVms0Um05aFFXSkRUVVpZZDBSbWJBcFlWQzh5UTFGaGNUY3pOMEVyYWtFemRrWm5VQ3MyV0dOT1IyVk9kbEZRVkZGRWRrTkJSVmRSZGxacFdFcHdWREJOZDJGcU1YRnhSemRxYlVaWGFIRjJDbTlSTWxaTldtOHdSVFZoYVdsMU9WaENjU3QxYWs1WFZHMW1aazlvV0VOdlNFOWpaWGd6VlZCa2VuZ3ZiMVJzY0dWSlVXRlhiMDVNWkdKeWRWQmtjMlFLUXpCV1RpOUVOVGd4T1Rsd05Ga3hVVmRIVTNkaVluUnhlV2wwZW5kelFYVTJhV0V2TkdKVU5IWjBLM2MwY3pCcGQyMHljbkpyU1hVdkswMU5jSGxxUWdwM1pXRmtZMjFyV1hWS01WZEJiR0pqWlU5alpIZHRlVlV3VUhKc2NIcFBjWGREUVVJNFR6bHRhVTgzTlM4NFUyWkhOV3RxVTNaTE1rOW5NblYwYjFsNkNqTkZWSEo2ZDBsRVFWRkJRbTh4V1hkV1JFRlBRbWRPVmtoUk9FSkJaamhGUWtGTlEwSmhRWGRGZDFsRVZsSXdiRUpCZDNkRFoxbEpTM2RaUWtKUlZVZ0tRWGRKZDBSQldVUldVakJVUVZGSUwwSkJTWGRCUkVGbVFtZE9Wa2hUVFVWSFJFRlhaMEpVWVhCRVRFeE1aSGhhYjJ4eVNubEZNRGRJTmxkcWJXTTJTd292VkVGT1FtZHJjV2hyYVVjNWR6QkNRVkZ6UmtGQlQwTkJVVVZCWWtRdlZHVmFSVGxHSzFCVlprUkJaRXhJYzFnd1QyOWxkemwwWlhkcVZGUkdVMHB0Q2xCRVprSjJXV05LTUZsblNuSkZUQ3R2YmtFNVJqSjVWa0o0VTJ4eFJtSldXSFF4WldkTFZXNHJVbGh2YVZaNmEyeGxZblk1TWtocmRsazBSbE54Y1RRS1puSlNTVWRxU1dOeWNHUjBTbUYxZWtwUFUzcENka0ZJS3pWdWVGTmpkbHBuUlhaNVJrRmhTVlZWU1c1aWRuQkNaVzFaUzJGQlpIcHdNRGR0T0U1dk5ncHRaVEJKT1d0UGRFRklWMGhaT1hFdmJ6RXdiVmR0VWxOUE16Qk5jemxrZDIxbFJYZEJXR3hvZWxvclZTOXNhbmhUU3pFdk16SnlXbGhZU21vM2JGZFRDbU5ZUTFabFVrRnZlR3QwTDFaWmN5dE5WVmg0Tldwa2RsUTJkREYwZEdkTFJHZEJabUZhVUhGWE1IbDJUVEZDTWtNd1VFeEdjVlZuZEV0dmEwZGFWRkVLZVN0a00xSndSMUZCVjBrNVNXTjFWV0o2YVZWRGFpdE9ZemxvY2tOTU9XOW5VbVozVWl0WGEyOTRVRWRwWXpCcGFXYzlQUW90TFMwdExVVk9SQ0JEUlZKVVNVWkpRMEZVUlMwdExTMHRDZz09CiAgICBjbGllbnQta2V5LWRhdGE6IExTMHRMUzFDUlVkSlRpQlNVMEVnVUZKSlZrRlVSU0JMUlZrdExTMHRMUXBOU1VsRmIyZEpRa0ZCUzBOQlVVVkJNVVUyVDBOMU9VbE5lR3M0UWtJM1EwRnFUME5HY2tkUGFVazBlakZoUVhOTVlXSktZa3hvU1VWeVpGa3hWbXB6Q2xoUlJFWjRLMWh3U1RaQlYyaERXRWhCV1RoR2IyRkJZa05OUmxoM1JHWnNXRlF2TWtOUllYRTNNemRCSzJwQk0zWkdaMUFyTmxoalRrZGxUblpSVUZRS1VVUjJRMEZGVjFGMlZtbFlTbkJVTUUxM1lXb3hjWEZITjJwdFJsZG9jWFp2VVRKV1RWcHZNRVUxWVdscGRUbFlRbkVyZFdwT1YxUnRabVpQYUZoRGJ3cElUMk5sZUROVlVHUjZlQzl2Vkd4d1pVbFJZVmR2VGt4a1luSjFVR1J6WkVNd1ZrNHZSRFU0TVRrNWNEUlpNVkZYUjFOM1ltSjBjWGxwZEhwM2MwRjFDalpwWVM4MFlsUTBkblFyZHpSek1HbDNiVEp5Y210SmRTOHJUVTF3ZVdwQ2QyVmhaR050YTFsMVNqRlhRV3hpWTJWUFkyUjNiWGxWTUZCeWJIQjZUM0VLZDBOQlFqaFBPVzFwVHpjMUx6aFRaa2MxYTJwVGRrc3lUMmN5ZFhSdldYb3pSVlJ5ZW5kSlJFRlJRVUpCYjBsQ1FVaEljWFZMU3pkWk9WVjJVRUp1UmdveWVtNU9TVFJrUkhaSlVXWk5WV0l5UXprMWRTdFFUbWxMYVVsSmVWSjVieXQ1UzI5RlNHWkVUVWxoVTBaeFRGQnNiVzFMYzFjeldUazRhVW96WVdwb0NrWlRkMnMzYzBwSVJuQTRkRTU1VkVocVNrSTVMMEV4SzBsS2NuQXlXVGRNU2paWU1uRndSREIzYzFsdFlTdDNhWHB4YXpKaVpVUTBXRlJCYTBsNE5rY0tOVk5uV1c1eE5HWXpUVTlLT1hsMGRsbDRXRTlZUnpGeVEwTnFOMkZTYlVaSWJtWkVRM2hsYldoSEswcFhNMGRCT1VkU1ZuZDNORGd4V25WRGRrSnFRd3BPYjNKWVprSmxRVUppTlVKT1dVeEZWek1yWjFaUGIxQXdTbTFzU1dneVNsVTJja0ZXTWxwMFYxQmFVRkYxVFVWYVREZDBjSG8zUzNaRlRIbzBZVUp2Q2xWTlRYazVlRlpKWjBrNGFFVmlURzlTZEd3MmRETlRUV2xVUnpONVp6ZzFOSFkwVWtvd1owOUpiMGhLWWswd2JrRlZTRWxCT0VNeVVWUkRaREJJVG1rS1VUTkJObUpxUlVObldVVkJPVVl5YkVwbVdFNXlXamRxZVhOTFFVbE1NWFJYVTFKUmRHaGtjemQ0SzFBeU5VaHRVR2hwWjJRNVJXbG9hMHhLWkVSdFFRcE1kV3BKUW1wWVkzcHZhbEF6ZHpKa01VMTZaVlZrWkVsWGR6Qk1PWEU0YjBodmNETXJWMk5IYW5ObWFYRkRhMnBUY1N0alZUbHpNV2hGVERKeFdteGpDazVuTVRKWVV6QnBWMndyVVZsRVlrZGtWa3htY1RObVJUVTVPRTlyZG5GWlNEUmhObmg1VjA4NWJ6RkRla2QxT0hsTWFVbzNXR05EWjFsRlFUTnRiM01LUkdrNFNuZFVablZXTlZWcGFqQm1hRVY0VVdjM2VVTmxSbEY0TUhjemRtbGxUMDgzTDAxU1Uyc3lVVTFYSzJzME9XaHpVMHR5Y1VkaVJqaHBabW8xTVFvd2NHTkpZemxETDA5QmQwZE5jWE52V1hCMU5IUkNNM0JrY20xdlNFbHFNSHB4ZWtGVWRXTXpPWEUzT1hCRFdFSnFhR3hsYUNzclVtOWpPREpHTjBkT0NuUnJMMGRFTlc1Mk9UVkJRelUzYms5U1ZrcFBWSEV2Tkd4TlJGUnplRXRzVlZsYWNrdHRhME5uV1VGaEwwRkNVbkZqZDFadlVtTmpaVGd2TUZSYVlUSUtiMnRxTjFseGFsZ3lkemxwZFhORVNFZExZMWgwUWs1M05tY3daVGxZTmxCTU5IUjJSRU5IWlN0UlMycGhabWxGTWtRMmQyOVBjRkJwTm1oSWFrWTBUUXA1Vms5dlUyUlZlV3BUV1dSV1lsZGpLMHhzTVd4U05XRjRXalZDWVdwelFtbFJhMHRFZDB4a1NXWktjV1paU0RZd1RGUTRWbFpTT0VkdGFXTnRSMjFYQ2tOaFZ6QmxhRkpKWVRVM01YWmxkbmcyYkdKdmVuZExRbWRGT0hWMFYybElWRzh5TDJZNVkyMW1VblJPYkRndldFSnlTMkpvYVhkM1RuaEhlR1JVZEdNS2RVaDVVVEpIVlc4MVZUSkVhRzltTTNNd2QweEJMMmh3Um1weGFuVm5ZWHBTYjNOVk9HbzNaRFpSWWpRNFNGQkxlRTFOTjAxMllsWjFaMmRQY1dwck5ncFFNbnBZTTBwRGVWWkNTM2RpYlhoTmF6azRTbG95ZFZndlkxbEtja1UwVUhOSkt6RlhhakZyZHl0UlJIWnRMMjVyV1VaeFNFeEhOSGhMVjI5TFluTlJDbWNyTm1oQmIwZEJaQ3RyV1M5alJXSkROMFU1UWtobmRFcDNjazV1UjBKc01FWTFZVkpCVDNFMGFGZG5hamc0Y0ZGUlRXRXpXa2xqZDBScloyOXVSbG9LVDNWMVYxSkdNR2hNVUdaUmQzSXpiRFZJY0hvM2QxSXpSbWxXZW1ZeU5uQXJVVGxYUVU5TU0xVjZWVVJQYmtzMFNrNTFhblZaTkZSUlRubEdPWGxLYkFwaVJUTk9NRlI1ZUU5Nk0xZE9SbFYyUjJoa09HMXVNV3hPUldsNmQyZGxOMEZQT1ZkWGFtUkxOVkZDTW1GaE1rZEpSbk05Q2kwdExTMHRSVTVFSUZKVFFTQlFVa2xXUVZSRklFdEZXUzB0TFMwdENnPT0K
  caData:
  tokenData:
  certData:
  keyData:
  syncResources:
  - group: apps
    resources:
    - "*"
  - group: ""
    resources:
    - "*"

查看数据

# kubectl exec -it clusterpedia-internalstorage-mysql-7f675744f9-bsqqc -n clusterpedia-system -- bash
Defaulted container "mysql" out of: mysql, restic-wait (init)
bash-4.4# mysql -uroot -p'dangerous0'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.1.0 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| clusterpedia       |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> use clusterpedia;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select count(1) from clusterpedia.resources;
+----------+
| count(1) |
+----------+
|      127 |
+----------+
1 row in set (0.00 sec)

mysql> select r.id, r.group, r.version, r.resource, r.kind, r.name, r.namespace from clusterpedia.resources r order by id limit 10;
+----+-------+---------+-------------------+------------------+------------------------------------+---------------------+
| id | group | version | resource          | kind             | name                               | namespace           |
+----+-------+---------+-------------------+------------------+------------------------------------+---------------------+
|  1 |       | v1      | secrets           | Secret           | cloud-credentials                  | velero              |
|  2 |       | v1      | endpoints         | Endpoints        | kubernetes                         | default             |
|  3 |       | v1      | events            | Event            | master.178cefddd0563c74            | default             |
|  4 |       | v1      | secrets           | Secret           | velero-restic-credentials          | velero              |
|  5 |       | v1      | endpoints         | Endpoints        | kube-dns                           | kube-system         |
|  6 |       | v1      | persistentvolumes | PersistentVolume | clusterpedia-internalstorage-mysql |                     |
|  7 |       | v1      | secrets           | Secret           | internalstorage-password           | clusterpedia-system |
|  8 |       | v1      | endpoints         | Endpoints        | minio                              | velero              |
|  9 |       | v1      | serviceaccounts   | ServiceAccount   | node-controller                    | kube-system         |
| 10 | apps  | v1      | replicasets       | ReplicaSet       | minio-7568b7d594                   | velero              |
+----+-------+---------+-------------------+------------------+------------------------------------+---------------------+
10 rows in set (0.00 sec)

mysql> select r.id, r.group, r.version, r.resource, r.kind, r.name, r.namespace from clusterpedia.resources r order by id;
+-----+-------+---------+------------------------+-----------------------+-----------------------------------------------------+---------------------+
| id  | group | version | resource               | kind                  | name                                                | namespace           |
+-----+-------+---------+------------------------+-----------------------+-----------------------------------------------------+---------------------+
|   1 |       | v1      | secrets                | Secret                | cloud-credentials                                   | velero              |
|   2 |       | v1      | endpoints              | Endpoints             | kubernetes                                          | default             |
|   3 |       | v1      | events                 | Event                 | master.178cefddd0563c74                             | default             |
|   4 |       | v1      | secrets                | Secret                | velero-restic-credentials                           | velero              |
|   5 |       | v1      | endpoints              | Endpoints             | kube-dns                                            | kube-system         |
|   6 |       | v1      | persistentvolumes      | PersistentVolume      | clusterpedia-internalstorage-mysql                  |                     |
|   7 |       | v1      | secrets                | Secret                | internalstorage-password                            | clusterpedia-system |
|   8 |       | v1      | endpoints              | Endpoints             | minio                                               | velero              |
|   9 |       | v1      | serviceaccounts        | ServiceAccount        | node-controller                                     | kube-system         |
|  10 | apps  | v1      | replicasets            | ReplicaSet            | minio-7568b7d594                                    | velero              |
|  11 |       | v1      | persistentvolumeclaims | PersistentVolumeClaim | internalstorage-mysql                               | clusterpedia-system |
|  12 |       | v1      | namespaces             | Namespace             | kube-public                                         |                     |
|  13 | apps  | v1      | controllerrevisions    | ControllerRevision    | restic-688ffc5bd                                    | velero              |
|  14 | apps  | v1      | daemonsets             | DaemonSet             | kube-proxy                                          | kube-system         |
|  15 |       | v1      | services               | Service               | kubernetes                                          | default             |
|  16 |       | v1      | nodes                  | Node                  | master                                              |                     |
|  17 |       | v1      | configmaps             | ConfigMap             | extension-apiserver-authentication                  | kube-system         |
|  18 |       | v1      | endpoints              | Endpoints             | clusterpedia-internalstorage-mysql                  | clusterpedia-system |
|  19 |       | v1      | namespaces             | Namespace             | kube-node-lease                                     |                     |
|  20 | apps  | v1      | replicasets            | ReplicaSet            | minio-57c84f9cf8                                    | velero              |
|  21 |       | v1      | serviceaccounts        | ServiceAccount        | ttl-after-finished-controller                       | kube-system         |
|  22 | apps  | v1      | controllerrevisions    | ControllerRevision    | kube-proxy-65bd75fd4                                | kube-system         |
|  23 |       | v1      | services               | Service               | kube-dns                                            | kube-system         |
|  24 |       | v1      | pods                   | Pod                   | coredns-5bbd96d687-xvhw5                            | kube-system         |
|  25 | apps  | v1      | daemonsets             | DaemonSet             | calico-node                                         | kube-system         |
|  26 |       | v1      | serviceaccounts        | ServiceAccount        | token-cleaner                                       | kube-system         |
|  27 |       | v1      | services               | Service               | minio                                               | velero              |
|  28 |       | v1      | namespaces             | Namespace             | default                                             |                     |
|  29 |       | v1      | endpoints              | Endpoints             | clusterpedia-apiserver                              | clusterpedia-system |
|  30 | apps  | v1      | replicasets            | ReplicaSet            | clusterpedia-internalstorage-mysql-7f675744f9       | clusterpedia-system |
|  31 |       | v1      | configmaps             | ConfigMap             | kube-root-ca.crt                                    | kube-system         |
|  32 |       | v1      | serviceaccounts        | ServiceAccount        | pvc-protection-controller                           | kube-system         |
|  33 | apps  | v1      | controllerrevisions    | ControllerRevision    | calico-node-dd8ff9d77                               | kube-system         |
|  34 | apps  | v1      | daemonsets             | DaemonSet             | restic                                              | velero              |
|  35 |       | v1      | namespaces             | Namespace             | velero                                              |                     |
|  36 |       | v1      | serviceaccounts        | ServiceAccount        | default                                             | kube-node-lease     |
|  37 | apps  | v1      | replicasets            | ReplicaSet            | clusterpedia-apiserver-5bd88d6488                   | clusterpedia-system |
|  38 |       | v1      | pods                   | Pod                   | calico-node-gvdd9                                   | kube-system         |
|  39 |       | v1      | services               | Service               | clusterpedia-internalstorage-mysql                  | clusterpedia-system |
|  40 |       | v1      | configmaps             | ConfigMap             | kube-root-ca.crt                                    | default             |
|  41 |       | v1      | namespaces             | Namespace             | clusterpedia-system                                 |                     |
|  42 |       | v1      | serviceaccounts        | ServiceAccount        | bootstrap-signer                                    | kube-system         |
|  43 | apps  | v1      | replicasets            | ReplicaSet            | calico-kube-controllers-79568db7f8                  | kube-system         |
|  44 |       | v1      | services               | Service               | clusterpedia-apiserver                              | clusterpedia-system |
|  45 |       | v1      | namespaces             | Namespace             | kube-system                                         |                     |
|  46 |       | v1      | configmaps             | ConfigMap             | kube-root-ca.crt                                    | velero              |
|  47 |       | v1      | serviceaccounts        | ServiceAccount        | horizontal-pod-autoscaler                           | kube-system         |
|  48 |       | v1      | pods                   | Pod                   | velero-55796c7c76-v9nfg                             | velero              |
|  49 | apps  | v1      | replicasets            | ReplicaSet            | minio-5d66fd5444                                    | velero              |
|  50 |       | v1      | configmaps             | ConfigMap             | kubeadm-config                                      | kube-system         |
|  51 |       | v1      | serviceaccounts        | ServiceAccount        | ephemeral-volume-controller                         | kube-system         |
|  52 | apps  | v1      | replicasets            | ReplicaSet            | minio-6c866cffdd                                    | velero              |
|  53 |       | v1      | pods                   | Pod                   | etcd-master                                         | kube-system         |
|  54 |       | v1      | configmaps             | ConfigMap             | kube-proxy                                          | kube-system         |
|  55 |       | v1      | serviceaccounts        | ServiceAccount        | service-account-controller                          | kube-system         |
|  56 | apps  | v1      | replicasets            | ReplicaSet            | velero-55796c7c76                                   | velero              |
|  57 |       | v1      | pods                   | Pod                   | calico-kube-controllers-79568db7f8-zxx7p            | kube-system         |
|  58 |       | v1      | configmaps             | ConfigMap             | kube-root-ca.crt                                    | kube-node-lease     |
|  59 |       | v1      | serviceaccounts        | ServiceAccount        | endpoint-controller                                 | kube-system         |
|  60 | apps  | v1      | replicasets            | ReplicaSet            | clusterpedia-controller-manager-846c98df9d          | clusterpedia-system |
|  61 |       | v1      | serviceaccounts        | ServiceAccount        | service-controller                                  | kube-system         |
|  62 |       | v1      | pods                   | Pod                   | minio-6d4696f57f-g64q9                              | velero              |
|  63 |       | v1      | configmaps             | ConfigMap             | kubelet-config                                      | kube-system         |
|  64 | apps  | v1      | replicasets            | ReplicaSet            | minio-6d4696f57f                                    | velero              |
|  65 |       | v1      | serviceaccounts        | ServiceAccount        | resourcequota-controller                            | kube-system         |
|  66 |       | v1      | configmaps             | ConfigMap             | kube-root-ca.crt                                    | kube-public         |
|  67 |       | v1      | pods                   | Pod                   | restic-k9sw9                                        | velero              |
|  68 | apps  | v1      | replicasets            | ReplicaSet            | coredns-5bbd96d687                                  | kube-system         |
|  69 |       | v1      | serviceaccounts        | ServiceAccount        | expand-controller                                   | kube-system         |
|  70 |       | v1      | configmaps             | ConfigMap             | calico-config                                       | kube-system         |
|  71 |       | v1      | pods                   | Pod                   | kube-scheduler-master                               | kube-system         |
|  72 |       | v1      | serviceaccounts        | ServiceAccount        | namespace-controller                                | kube-system         |
|  73 | apps  | v1      | replicasets            | ReplicaSet            | minio-75964b589d                                    | velero              |
|  74 |       | v1      | configmaps             | ConfigMap             | cluster-info                                        | kube-public         |
|  75 |       | v1      | serviceaccounts        | ServiceAccount        | replicaset-controller                               | kube-system         |
|  76 | apps  | v1      | replicasets            | ReplicaSet            | minio-9d5556dfc                                     | velero              |
|  77 |       | v1      | pods                   | Pod                   | kube-apiserver-master                               | kube-system         |
|  78 |       | v1      | configmaps             | ConfigMap             | coredns                                             | kube-system         |
|  79 |       | v1      | serviceaccounts        | ServiceAccount        | attachdetach-controller                             | kube-system         |
|  80 | apps  | v1      | replicasets            | ReplicaSet            | clusterpedia-clustersynchro-manager-57f7b7bd4       | clusterpedia-system |
|  81 |       | v1      | serviceaccounts        | ServiceAccount        | calico-node                                         | kube-system         |
|  82 |       | v1      | pods                   | Pod                   | kube-proxy-qctcj                                    | kube-system         |
|  83 |       | v1      | configmaps             | ConfigMap             | kube-root-ca.crt                                    | clusterpedia-system |
|  84 |       | v1      | serviceaccounts        | ServiceAccount        | default                                             | velero              |
|  85 |       | v1      | pods                   | Pod                   | clusterpedia-controller-manager-846c98df9d-v5v8m    | clusterpedia-system |
|  86 |       | v1      | configmaps             | ConfigMap             | clusterpedia-internalstorage                        | clusterpedia-system |
|  87 |       | v1      | serviceaccounts        | ServiceAccount        | certificate-controller                              | kube-system         |
|  88 |       | v1      | serviceaccounts        | ServiceAccount        | replication-controller                              | kube-system         |
|  89 |       | v1      | pods                   | Pod                   | kube-controller-manager-master                      | kube-system         |
|  90 |       | v1      | serviceaccounts        | ServiceAccount        | calico-kube-controllers                             | kube-system         |
|  91 |       | v1      | pods                   | Pod                   | coredns-5bbd96d687-5vcst                            | kube-system         |
|  92 |       | v1      | serviceaccounts        | ServiceAccount        | coredns                                             | kube-system         |
|  93 |       | v1      | serviceaccounts        | ServiceAccount        | kube-proxy                                          | kube-system         |
|  94 |       | v1      | pods                   | Pod                   | clusterpedia-internalstorage-mysql-7f675744f9-bsqqc | clusterpedia-system |
|  95 |       | v1      | serviceaccounts        | ServiceAccount        | cronjob-controller                                  | kube-system         |
|  96 |       | v1      | pods                   | Pod                   | clusterpedia-apiserver-5bd88d6488-rqcww             | clusterpedia-system |
|  97 |       | v1      | serviceaccounts        | ServiceAccount        | pv-protection-controller                            | kube-system         |
|  98 |       | v1      | pods                   | Pod                   | clusterpedia-clustersynchro-manager-57f7b7bd4-dgrzc | clusterpedia-system |
|  99 |       | v1      | serviceaccounts        | ServiceAccount        | default                                             | kube-system         |
| 100 |       | v1      | serviceaccounts        | ServiceAccount        | clusterpedia-apiserver                              | clusterpedia-system |
| 101 |       | v1      | serviceaccounts        | ServiceAccount        | persistent-volume-binder                            | kube-system         |
| 102 |       | v1      | serviceaccounts        | ServiceAccount        | clusterrole-aggregation-controller                  | kube-system         |
| 103 |       | v1      | serviceaccounts        | ServiceAccount        | daemon-set-controller                               | kube-system         |
| 104 |       | v1      | serviceaccounts        | ServiceAccount        | job-controller                                      | kube-system         |
| 105 |       | v1      | serviceaccounts        | ServiceAccount        | root-ca-cert-publisher                              | kube-system         |
| 106 |       | v1      | serviceaccounts        | ServiceAccount        | endpointslicemirroring-controller                   | kube-system         |
| 107 |       | v1      | serviceaccounts        | ServiceAccount        | statefulset-controller                              | kube-system         |
| 108 |       | v1      | serviceaccounts        | ServiceAccount        | ttl-controller                                      | kube-system         |
| 109 |       | v1      | serviceaccounts        | ServiceAccount        | velero                                              | velero              |
| 110 |       | v1      | serviceaccounts        | ServiceAccount        | clusterpedia-controller-manager                     | clusterpedia-system |
| 111 | apps  | v1      | deployments            | Deployment            | coredns                                             | kube-system         |
| 112 |       | v1      | serviceaccounts        | ServiceAccount        | deployment-controller                               | kube-system         |
| 113 | apps  | v1      | deployments            | Deployment            | calico-kube-controllers                             | kube-system         |
| 114 |       | v1      | serviceaccounts        | ServiceAccount        | disruption-controller                               | kube-system         |
| 115 | apps  | v1      | deployments            | Deployment            | minio                                               | velero              |
| 116 |       | v1      | serviceaccounts        | ServiceAccount        | generic-garbage-collector                           | kube-system         |
| 117 |       | v1      | serviceaccounts        | ServiceAccount        | default                                             | kube-public         |
| 118 | apps  | v1      | deployments            | Deployment            | velero                                              | velero              |
| 119 |       | v1      | serviceaccounts        | ServiceAccount        | default                                             | default             |
| 120 | apps  | v1      | deployments            | Deployment            | clusterpedia-internalstorage-mysql                  | clusterpedia-system |
| 121 |       | v1      | serviceaccounts        | ServiceAccount        | default                                             | clusterpedia-system |
| 122 | apps  | v1      | deployments            | Deployment            | clusterpedia-apiserver                              | clusterpedia-system |
| 123 |       | v1      | serviceaccounts        | ServiceAccount        | endpointslice-controller                            | kube-system         |
| 124 | apps  | v1      | deployments            | Deployment            | clusterpedia-clustersynchro-manager                 | clusterpedia-system |
| 125 |       | v1      | serviceaccounts        | ServiceAccount        | pod-garbage-collector                               | kube-system         |
| 126 | apps  | v1      | deployments            | Deployment            | clusterpedia-controller-manager                     | clusterpedia-system |
| 127 |       | v1      | serviceaccounts        | ServiceAccount        | clusterpedia-clustersynchro-manager                 | clusterpedia-system |
+-----+-------+---------+------------------------+-----------------------+-----------------------------------------------------+---------------------+
127 rows in set (0.00 sec)

mysql> 

创建查看备份

# velero get backup
NAME             STATUS      ERRORS   WARNINGS   CREATED                         EXPIRES   STORAGE LOCATION   SELECTOR
my-backup-1009   Completed   0        0          2023-10-12 14:07:22 +0800 CST   25d       default            <none>

# velero backup create my-backup-1016 --include-namespaces clusterpedia-system --default-volumes-to-restic -n velero
Backup request "my-backup-1016" submitted successfully.
Run `velero backup describe my-backup-1016` or `velero backup logs my-backup-1016` for more details.
# velero get backup
NAME             STATUS      ERRORS   WARNINGS   CREATED                         EXPIRES   STORAGE LOCATION   SELECTOR
my-backup-1009   Completed   0        0          2023-10-12 14:07:22 +0800 CST   25d       default            <none>
my-backup-1016   Completed   0        0          2023-10-16 16:11:58 +0800 CST   29d       default            <none>

删除clusterpedia服务

# delete compontents
kubectl delete -f ./deploy/clusterpedia_apiserver_apiservice.yaml
kubectl delete -f ./deploy/clusterpedia_apiserver_deployment.yaml
kubectl delete -f ./deploy/clusterpedia_clustersynchro_manager_deployment.yaml
kubectl delete -f ./deploy/clusterpedia_controller_manager_deployment.yaml
kubectl delete -f ./deploy/clusterpedia_apiserver_rbac.yaml

# delete crds
kubectl delete -f ./deploy/cluster.clusterpedia.io_clustersyncresources.yaml
kubectl delete -f ./deploy/cluster.clusterpedia.io_pediaclusers.yaml
kubectl delete -f ./deploy/policy.clusterpedia.io_clusterimportpolicies.yaml
kubectl delete -f ./deploy/policy.clusterpedia.io_pediaclusterlifecycles.yaml

# 卸载存储组件
kubectl delete -f ./deploy/internalstorage/mysql

# 清理 Local PV 以及数据
kubectl delete pv clusterpedia-internalstorage-mysql

# 登录数据所在节点,清理数据
rm /var/local/clusterpedia/internalstorage/mysql

备份还原

velero restore create --from-backup my-backup-1009
Restore request "my-backup-1009-20221009153041" submitted successfully.
Run `velero restore describe my-backup-1009-20221009153041` or `velero restore logs my-backup-1009-20221009153041` for more details.
velero get restore
NAME                            BACKUP           STATUS       STARTED                         COMPLETED   ERRORS   WARNINGS   CREATED                         SELECTOR
my-backup-1009-20221009153041   my-backup-1009   InProgress   2022-10-09 15:30:41 +0800 +08   <nil>       0        0          2022-10-09 15:30:41 +0800 +08   <none>

velero get restore
NAME                            BACKUP           STATUS       STARTED                         COMPLETED                           ERRORS   WARNINGS   CREATED                         SELECTOR
my-backup-1009-20221009153041   my-backup-1009   Completed   2022-10-09 15:30:41 +0800 +08    2022-10-09 15:35:28 +0800 +08       0        0          2022-10-09 15:30:41 +0800 +08   <none>

验证服务


验证数据


可以看到我们的创建的 Clusterpedia 服务,数据依然存在,证明已经完全恢复了。 只要将每个 Velero 实例指向相同的对象存储(MinIO),Velero 就能将资源从一个群集迁移到另一个群集。此外还支持定时备份,触发备份 Hooks 等操作,更多资料请查阅官方文档:https://velero.io/docs/
限制/注意事项

Velero 支持 BackupStorageLocation 的多个凭证,按需指定使用,但使用此功能需要插件支持所使用的对象存储服务
Velero 仅支持 VolumeSnapshotLocations 的一组凭据。Velero 将始终使用安装时提供的凭据(存储在 cloud-credentials 密钥中)进行卷快照
卷快照仍然受到提供商允许您创建快照的位置的限制。例如,AWS 和 Azure 不允许您在与卷所在的区域不同的区域中创建卷快照。
每个 Velero 备份有一个 BackupStorageLocation,一个 VolumeSnapshotLocation。不可能同时将单个 Velero 备份发送到多个备份存储位置,或者同时将单个卷快照发送到多个位置。但是可以设置多个存储位置不同的计划备份。
不支持跨提供商快照。如果您的集群具有多种类型的卷,例如 EBS 和 Portworx,但您只有为 EBS 配置的 VolumeSnapshotLocation,则 Velero 将仅对 EBS 卷进行快照。
Restic 数据存储在 Velero 主存储桶的前缀/子目录下,并将进入与用户在创建备份时选择的 BackupStorageLocation 对应的存储桶中。
Velero 的备份分为两部分——存储在对象存储中的元数据,以及持久卷数据的快照/备份。目前,Velero 本身并没有加密它们中的任何一个,而是依赖于对象和快照系统中的本机机制。一种特殊情况是 restic,它在文件系统级别备份持久卷数据并将其发送到 Velero 的对象存储。
Velero 对对象元数据的压缩是有限的,使用 Golang 的 tar 实现。在大多数情况下,Kubernetes 对象的大小限制为 1.5MB,但很多都没有达到这个要求,这意味着可能不需要压缩。请注意,restic 尚未实现压缩,但确实具有重复数据删除功能。
如果配置了多个 VolumeSnapshotLocation,则在创建备份时必须始终指定有效的 VolumeSnapshotLocation,即使使用 Restic 进行卷备份也是如此。可以配置 –default-volume-snapshot-locations 指定在创建备份时默认 VolumeSnapshotLocation。如果只有一个 VolumeSnapshotLocation,Velero 将自动使用该位置作为默认位置。

定时备份

// 每天一点备份,备份保存时间两天
[root@master-1 ~]# velero create schedule 103-all-app --schedule="0 1 * * *" --ttl 48h
Schedule "103-all-app" created successfully.
// 查看备份策略
[root@master-1 ~]# velero  get  schedule
NAME          STATUS    CREATED                         SCHEDULE    BACKUP TTL   LAST BACKUP   SELECTOR
103-all-app   Enabled   2024-05-21 17:36:59 +0800 CST   0 1 * * *   48h0m0s      n/a           <none>
// 备份成功查询
[root@master-1 ~]# velero  get  schedule
NAME          STATUS    CREATED                         SCHEDULE    BACKUP TTL   LAST BACKUP   SELECTOR
103-all-app   Enabled   2024-05-21 17:36:59 +0800 CST   0 1 * * *   48h0m0s      44m ago       <none>
[root@master-1 ~]# 


[root@master-1 ~]# velero get backup
NAME                             STATUS      ERRORS   WARNINGS   CREATED                         EXPIRES   STORAGE LOCATION   SELECTOR
103-all-app-20240522010039       Completed   0        0          2024-05-22 09:00:39 +0800 CST   1d        default            <none>
clusterpedia-system-bak240520    Completed   0        0          2024-05-20 22:28:15 +0800 CST   28d       default            <none>
k8s103cluster-bak240520          Completed   0        0          2024-05-20 16:25:06 +0800 CST   28d       default            <none>
kube-flannel-bak240520           Completed   0        0          2024-05-20 22:29:21 +0800 CST   28d       default            <none>
kube-system-bak240520            Completed   0        0          2024-05-20 22:28:50 +0800 CST   28d       default            <none>
kubernetes-dashboard-bak240520   Completed   0        0          2024-05-20 22:29:50 +0800 CST   28d       default            <none>
[root@master-1 ~]# 

基于minio备份其他k8s集群测试

在其他k8s集群服务器只安装velero server
velero install --provider aws --bucket velero --image velero/velero:v1.8.1 --plugins velero/velero-plugin-for-aws:v1.4.1 --namespace velero --secret-file /root/wnh/k8s/velero/credentials-velero --use-volume-snapshots=false --default-volumes-to-restic=true --kubeconfig=/root/.kube/config --use-restic --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://10.2.6.103:30080


// 验证测试通过103集群,执行备份104上面的tekton
# velero backup create from103-backup-cluster104 --include-namespaces tekton-pipelines -n velero --kubeconfig /root/wnh/from104test/admin.conf
[root@master-1 from104test]# velero get backup
NAME                             STATUS      ERRORS   WARNINGS   CREATED                         EXPIRES   STORAGE LOCATION   SELECTOR
103-all-app-20240522010039       Completed   0        0          2024-05-22 09:00:39 +0800 CST   1d        default            <none>
clusterpedia-system-bak240520    Completed   0        0          2024-05-20 22:28:15 +0800 CST   28d       default            <none>
from103-backup-cluster104        Completed   0        0          2024-05-22 17:27:06 +0800 CST   29d       default            <none>
k8s103cluster-bak240520          Completed   0        0          2024-05-20 16:25:06 +0800 CST   27d       default            <none>
kube-flannel-bak240520           Completed   0        0          2024-05-20 22:29:21 +0800 CST   28d       default            <none>
kube-system-bak240520            Completed   0        0          2024-05-20 22:28:50 +0800 CST   28d       default            <none>
kubernetes-dashboard-bak240520   Completed   0        0          2024-05-20 22:29:50 +0800 CST   28d       default            <none>
--include-namespaces *
表示包含所有namespace,默认default是*
[root@master-1 from104test]# velero backup describe from103-backup-all-cluster104 -n velero  --kubeconfig /root/wnh/from104test/admin.conf
Name:         from103-backup-all-cluster104
Namespace:    velero
Labels:       velero.io/storage-location=default
Annotations:  velero.io/source-cluster-k8s-gitversion=v1.26.6
              velero.io/source-cluster-k8s-major-version=1
              velero.io/source-cluster-k8s-minor-version=26

Phase:  InProgress

Errors:    0
Warnings:  0

Namespaces:
  Included:  *
  Excluded:  <none>

Resources:
  Included:        *
  Excluded:        <none>
  Cluster-scoped:  auto

Label selector:  <none>

Storage Location:  default

Velero-Native Snapshot PVs:  auto

TTL:  720h0m0s

Hooks:  <none>

Backup Format Version:  1.1.0

Started:    2024-05-22 17:49:42 +0800 CST
Completed:  <n/a>

Expiration:  2024-06-21 17:49:42 +0800 CST

Estimated total items to be backed up:  1237
Items backed up so far:                 45

Velero-Native Snapshots: <none included>

Restic Backups (specify --details for more information):
  Completed:    91
  Failed:       1
  In Progress:  1
  In Progress:  1
此时在备份103节点无法查看备份的数据状态,可以在备份的目标集群上查看备份的数据
[root@master velero]# velero get backup
NAME                             STATUS       ERRORS   WARNINGS   CREATED                         EXPIRES   STORAGE LOCATION   SELECTOR
103-all-app-20240522010039       Completed    0        0          2024-05-22 09:00:39 +0800 CST   1d        default            <none>
clusterpedia-system-bak240520    Completed    0        0          2024-05-20 22:28:15 +0800 CST   28d       default            <none>
from103-backup-all-cluster104    InProgress   0        0          2024-05-22 17:49:42 +0800 CST   29d       default            <none>
[root@master-1 from104test]# velero backup describe from103-backup-all-cluster104 -n velero  --kubeconfig /root/wnh/from104test/admin.conf --details 
Name:         from103-backup-all-cluster104
Namespace:    velero
Labels:       velero.io/storage-location=default
Annotations:  velero.io/source-cluster-k8s-gitversion=v1.26.6
              velero.io/source-cluster-k8s-major-version=1
              velero.io/source-cluster-k8s-minor-version=26

Phase:  InProgress

Errors:    0
Warnings:  0

Namespaces:
  Included:  *
  Excluded:  <none>

Resources:
  Included:        *
  Excluded:        <none>
  Cluster-scoped:  auto

Label selector:  <none>

Storage Location:  default

Velero-Native Snapshot PVs:  auto

TTL:  720h0m0s

Hooks:  <none>

Backup Format Version:  1.1.0

Started:    2024-05-22 17:49:42 +0800 CST
Completed:  <n/a>

Expiration:  2024-06-21 17:49:42 +0800 CST

Estimated total items to be backed up:  1241
Items backed up so far:                 56

Resource List:  <backup resource list not found>

Velero-Native Snapshots: <none included>

Restic Backups:
  Completed:
    clusterpedia-system/clusterpedia-internalstorage-mysql-7f675744f9-bsqqc: data
    default/details-v1-7745b6fcf4-lzgrh: credential-socket, istio-data, istio-envoy, workload-certs, workload-socket
    default/gitlab-shared-secrets-1-3q5-zh8jr: credential-socket, istio-data, istio-envoy, ssh, workload-certs, workload-socket
    default/gitlab-shared-secrets-1-7k1-7mr8d: credential-socket, istio-data, istio-envoy, ssh, workload-certs, workload-socket
    default/gitlab-shared-secrets-1-gmm-jhcp9: credential-socket, istio-data, istio-envoy, ssh, workload-certs, workload-socket
    default/gitlab-shared-secrets-1-jsi-fjmgf: credential-socket, istio-data, istio-envoy, ssh, workload-certs, workload-socket
    default/loki-0: credential-socket, istio-data, istio-envoy, storage, tmp, workload-certs, workload-socket
    default/productpage-v1-6f89b6c557-x4kvq: credential-socket, istio-data, istio-envoy, tmp, workload-certs, workload-socket
    default/ratings-v1-77bdbf89bb-bxfvm: credential-socket, istio-data, istio-envoy, workload-certs, workload-socket
    default/reviews-v1-667b5cc65d-9vlwh: credential-socket, istio-data, istio-envoy, tmp, wlp-output, workload-certs, workload-socket
    default/reviews-v2-6f76498fc8-46bj5: credential-socket, istio-data, istio-envoy, tmp, wlp-output, workload-certs, workload-socket
    default/reviews-v3-5d8667cc66-68pxm: credential-socket, istio-data, istio-envoy, tmp, wlp-output, workload-certs, workload-socket
    gitlab/gitlab-gitaly-0: etc-pki-ca-trust-extracted-pem, etc-ssl-certs, gitaly-secrets, repo-data
    gitlab/gitlab-gitlab-exporter-f9bf968fd-xkxld: etc-pki-ca-trust-extracted-pem, etc-ssl-certs, gitlab-exporter-secrets
    gitlab/gitlab-gitlab-runner-75cccf78cc-6fdgm: etc-gitlab-runner
    gitlab/gitlab-gitlab-shell-c6f75f6f5-469tn: etc-pki-ca-trust-extracted-pem, etc-ssl-certs, shell-secrets
    gitlab/gitlab-gitlab-shell-c6f75f6f5-rkf8m: etc-pki-ca-trust-extracted-pem, etc-ssl-certs, shell-secrets
    gitlab/gitlab-kas-568568cdd4-dtwc2: etc-pki-ca-trust-extracted-pem, etc-ssl-certs
    gitlab/gitlab-kas-568568cdd4-n4tn5: etc-pki-ca-trust-extracted-pem, etc-ssl-certs
    gitlab/gitlab-minio-7f7dbccc49-rxzl8: export, minio-server-config
    gitlab/gitlab-postgresql-0: data, dshm
    gitlab/gitlab-prometheus-server-6d8b995f5b-m9vbf: storage-volume
    gitlab/gitlab-redis-master-0: redis-data, redis-tmp-conf, tmp
    gitlab/gitlab-registry-86d954c6fd-svgz7: etc-pki-ca-trust-extracted-pem, etc-ssl-certs, registry-server-config
    gitlab/gitlab-registry-86d954c6fd-tz66l: etc-pki-ca-trust-extracted-pem, etc-ssl-certs, registry-server-config
    gitlab/gitlab-sidekiq-all-in-1-v2-798bdd6664-twthb: etc-pki-ca-trust-extracted-pem, etc-ssl-certs, sidekiq-metrics, sidekiq-secrets
    gitlab/gitlab-toolbox-868dd4dcd9-44v4q: etc-pki-ca-trust-extracted-pem, etc-ssl-certs, toolbox-secrets, toolbox-tmp
    gitlab/gitlab-webservice-default-84f594c764-c7bkn: etc-pki-ca-trust-extracted-pem, etc-ssl-certs, shared-tmp, shared-upload-directory, webservice-metrics, webservice-secrets, workhorse-secrets
    gitlab/gitlab-webservice-default-84f594c764-fhqdt: shared-tmp
  Failed:
    gitlab/gitlab-gitlab-runner-75cccf78cc-6fdgm: runner-secrets
  In Progress:
    gitlab/gitlab-webservice-default-84f594c764-fhqdt: webservice-metrics
  New:
    gitlab/gitlab-webservice-default-84f594c764-fhqdt: etc-pki-ca-trust-extracted-pem, etc-ssl-certs, shared-upload-directory, webservice-secrets, workhorse-secrets
[root@master-1 from104test]# 
// 备份数据太大,删除备份执行日志
[root@master-1 gitlab]# velero backup delete from103-backup-all-cluster104   -n velero --kubeconfig /root/wnh/from104test/admin.conf
Are you sure you want to continue (Y/N)? Y
Request to delete backup "from103-backup-all-cluster104" submitted successfully.
The backup will be fully deleted after all associated data (disk snapshots, backup files, restores) are removed.
// 数据恢复测试
// 在103节点恢复104上删除的nginx应用,模拟故障恢复
// 先在103上面进行数据备份
[root@master-1 ~]# velero backup create from103-backup-app-nginx-cluster104 --include-namespaces ingress-nginx -n velero --kubeconfig /root/wnh/from104test/admin.conf

// 在104服务器上面查看应用的信息并访问测试
[root@master ~]# kubectl get svc -n ingress-nginx
NAME                                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    10.1.53.253   <none>        80:31511/TCP,443:32717/TCP   47s
ingress-nginx-controller-admission   ClusterIP   10.1.231.73   <none>        443/TCP                      47s
[root@master ~]# kubectl get pod -n ingress-nginx
NAME                                        READY   STATUS    RESTARTS   AGE
ingress-nginx-controller-6bfd758974-dwgws   1/1     Running   0          6m40s

// 如下链接地址访问正常
https://10.1.6.104:32717/

// 删除此namespace
[root@master ~]# kubectl delete namespace ingress-nginx 

// 待完全删除干净后,访问页面,无法访问,做如下的恢复操作


// 在103节点进行恢复操作
[root@master-1 ~]# velero restore create --from-backup  from103-backup-app-nginx-cluster104 --include-namespaces ingress-nginx --namespace velero --kubeconfig /root/wnh/from104test/admin.conf
Restore request "from103-backup-app-nginx-cluster104-20240523164442" submitted successfully.
Run `velero restore describe from103-backup-app-nginx-cluster104-20240523164442` or `velero restore logs from103-backup-app-nginx-cluster104-20240523164442` for more details.
[root@master-1 ~]# 

// 在104节点查看应用恢复情况,并通过web进行访问验证,发现已经完成了备份恢复操作

minin-login

minin-login

minin-login

minin-login

参考

Velero官网

Clusterpedia

kubernetes备份恢复