跳转到主要内容

k8s集群备份(迁移)工具velero

  • 安装velero

# 参考地址:https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_0306.html
# 参考地址:https://github.com/vmware-tanzu/velero
# 参考地址:https://velero.io/

# 下载

curl --socks5 ss5.iovhm.com:8080  -OL  https://github.com/vmware-tanzu/velero/releases/download/v1.7.0/velero-v1.7.0-linux-amd64.tar.gz

## --socks5 ss5.iovhm.com:8080 # 使用 socks5 代理翻墙
## -O 保存文件
## -L 自动重定向

# 解压
tar -xvzf velero-v1.7.0-linux-amd64.tar.gz

# 复制到 /usr/local/bin/
cp velero /usr/local/bin/


# 配置存储位置 minio,请先自行安装minio,并将minio的 AK/SK填入下面

vi key

[default]
aws_access_key_id=
aws_secret_access_key=

###### 以下命令需要在有kubectl的那台机器执行 ######

# 安装
velero install \
  --provider aws \
  --image harbor.iovhm.com/hub/velero/velero:v1.7.0 \
  --plugins velero/velero-plugin-for-aws:v1.2.1 \
  --bucket kube-deployment \
  --secret-file ./key \
  --use-restic \
  --use-volume-snapshots=false \
  --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://minio-test.abc.com/
  
##  --bucket kube-deployment		# minio 中的存储捅的名称,需要提前建好
## --secret-file ./key 				# minio ak文件路径
## region=minio 					# 随便填,如果是备份到其他与s3兼容系统(例如云上的对象存储),可能需要地域值。
## s3Url=http://minio-test.abc.com/ # minio的地址,注意,是客户端地址(默认9000那个),不是console地址
 
# 查看存储库状态,如果显示Available则表示安装成功,否则请根据屏幕提示查找问题
velero backup-location get

# 查看备份记录
velero backup get

# 建立备份

velero backup create huawei-whdev-test.2023.0715.23 --exclude-namespaces cattle-prometheus,cattle-system,fleet-system,ingress-nginx,kube-node-lease,kube-public,kube-system,velero,default

##  huawei-whdev-test.2023.0715.23 ,备份名称
##  --exclude-namespaces, 不备份的名字空间,多个命名空间用逗号隔开(,),注意,是k8s命名空间,不是rancher的项目名称,不指定则全部备份
##  --include-namespaces, 备份这些命名空间,多个命名空间用逗号隔开(,),注意,是k8s命名空间,不是rancher的项目名称,不指定则全部备份

##  强烈建议,首次备份全备,后续不备份 kube-system,kube-public,cattle-system 等系统命名空间,总之,不是你手工建立的都不要备份,因为velero会将kube-system等系统命名空间也进行备份和恢复。可能造成k8s环境系统异常。
## kubectl get ns 		# 查看集群的命名空间

# 查看备份记录
velero backup get

# 备份恢复(在有kubectl的那台机器执行)
velero restore create --from-backup [备份记录名称] --include-namespaces pk-default

# 恢复并命名空间映射
velero restore create --from-backup [备份记录名称] --include-namespaces pk-default,pk-smart --namespace-mappings src:dest,src2:dest2

## --include-namespaces 需要恢复的名字空间,不指定则全部恢复
## --exclude-namespaces 不进行还原的名字空间 ,不指定则全部恢复
## 强烈建议备份的时候不要备份kube-system等命名空间,恢复的时候不要全部恢复,恢复的时候按名称一个一个恢复,因为velero会将kube-system等系统命名空间也进行备份和恢复。可能造成k8s环境系统系统异常。


minio docker-compose

# vi docker-compose.yaml

version: '3'
services:
  velero-minio:
    image: minio/minio:latest
    restart: always # 自动重启
    privileged: true  
    ports:
      - 33900:9000 # client 端口
      - 33901:9001 # console 端口
    volumes:
      - ./data:/data
    command: server /data --console-address :9001 --address :9000 
    environment:
      - MINIO_ROOT_USER=
      - MINIO_ROOT_PASSWORD=!
      # 如果你的minio使用容器启动的,不是独立主机、正式使用的端口与部署的端口不一致,可能显示的地址错误
      - MINIO_SERVER_URL=http://minio.abc.com
      # 如果你的minio使用容器启动的,不是独立主机、正式使用的端口与部署的端口不一致,可能显示的地址错误
      - MINIO_BROWSER_REDIRECT_URLhttp://minio-console.abc.com