5

kubernetes与velero的第一次尝试

 2 years ago
source link: https://blog.51cto.com/saynaihe/5116902
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

kubernetes与velero的第一次尝试

原创

接上文: Kubernetes中gitlab的一次迁移。nexus也要迁移一下。这里更想体验一些 velero。很多文章上面看到过: https://mp.weixin.qq.com/s/VC6kVfcBCUQfG6RwM6F1QA腾讯云TKE文档中也有类似的例子: https://cloud.tencent.com/document/product/457/50122。不想使用传统方式了想体验一下velero!
so velero迁移一下kube-ops namespace 到另外一个集群的kube-ops1 namespace

velero 迁移kubernetes体验

1. 下载安装 velero

注意: 1-3步骤在备份和还原集群上面都要操作安装
 https://github.com/vmware-tanzu/velero看了一眼最新版本1.18.1.就下载了对应版本linux-amd64.tar.gz(墙裂,下载不下来。为是下载了放在自己的对象存储上面了!)

[root@sh-master-02 ~]# wget https://github.com/vmware-tanzu/velero/releases/download/v1.8.1/velero-v1.8.1-linux-amd64.tar.gz
[root@sh-master-02 ~]# tar zxvf velero-v1.8.1-linux-amd64.tar.gz 
[root@sh-master-02 ~]# cd velero-v1.8.1-linux-amd64/
[root@sh-master-02 velero-v1.8.1-linux-amd64]# cp velero /usr/local/bin && chmod +x /usr/local/bin/velero
[root@sh-master-02 velero-v1.8.1-linux-amd64]# velero version

kubernetes与velero的第一次尝试_linux

2. 关于对象存储的开通

阳明大佬还有其他很多文章都是采用了minio.腾讯云的cos 还有 阿里云的oss也是可以的。偷懒了直接使用cos!
先创建一个对象存储桶
kubernetes与velero的第一次尝试_linux_02

3. 配置安装velero服务端

配置密钥文件:
cat credentials-velero

[default]
aws_access_key_id=<access key id>
aws_secret_access_key=<secret access key>

按照如下命令安装 velero 服务端:

velero install  --provider aws --plugins velero/velero-plugin-for-aws:v1.1.0 --bucket  kubernetes-xxxx \
--secret-file credentials-velero \
--use-restic \
--default-volumes-to-restic \
--backup-location-config \
region=ap-guangzhou,s3ForcePathStyle="true",s3Url=https://cos.ap-guangzhou.myqcloud.com

注意:gion s3 url bucket为腾讯与oos对应参数基本要配置的就是bucket存储桶名词 还有地域!
kubernetes与velero的第一次尝试_对象存储_03
kubernetes与velero的第一次尝试_linux_04
等待velero命名空间下pod running!

[root@sh-master-02 velero]# kubectl get pods -n velero

kubernetes与velero的第一次尝试_对象存储_05

4. 备份集群1 kube-ops集群内应用

1. velero backup create命令直接创建

[root@sh-master-02 velero]# velero backup create kube-ops --include-namespaces kube-ops --default-volumes-to-restic

kubernetes与velero的第一次尝试_linux_06

2. yaml方式创建

cat migrate-kube-ops-2022-03-18-01-backup.yaml

apiVersion: velero.io/v1
kind: Backup
metadata: 
  name: migrate-kube-ops-2022-03-18-01-backup
  # 必须得是 velero 安装的命名空间
  namespace: velero
spec: 
  # 仅包含 nginx-example 命名空间的资源
  includedNamespaces: 
   - kube-ops
  # 包含不区分命名空间的资源
  includeClusterResources: false 
  # 备份数据存储位置指定
  storageLocation: default 
  # 卷快照存储位置指定
  volumeSnapshotLocations: 
    - default 
  # 使用 restic 备份卷
  defaultVolumesToRestic: true

注意:includeClusterResources: false 这个地方一定记得false看腾讯与官方文档写的true!我备份失败了…如果有失败看下这个参数!

[root@sh-master-02 velero]#kubectl apply -f migrate-kube-ops-2022-03-18-01-backup.yaml

kubernetes与velero的第一次尝试_kubernetes_07
注意: backup create 任务的命名要具有唯一性。建立新的命名任务要用不同的名称!

2. 登陆腾讯云cos管理后台查看备份文件创建

kubernetes与velero的第一次尝试_腾讯云_08

5. 将kube-ops命名空间下应用还原到集群2kube-ops1命名空间下

注:登陆集群2(要还原的集群)前提1-3已经操作
cat restore.yaml

apiVersion: velero.io/v1
kind: Restore
metadata: 
  name: migrate-kube-ops1-restore
  namespace: velero
spec: 
  backupName: kube-ops
  includedNamespaces: 
    - kube-ops
  
  # 按需填写需要恢复的资源类型,nginx-example 命名空间下没有想要排除的资源,所以这里直接写 '*'
  includedResources: 
    - '*'
  
  includeClusterResources: null
  
  # 还原时不包含的资源,这里额外排除 StorageClasses 资源类型。
  excludedResources: 
    - storageclasses.storage.k8s.io
 
  # 使用 labelSelector 选择器选择具有特定 label 的资源,由于此示例中无须再使用 label 选择器筛选,这里先注释。
  # labelSelector:
  #   matchLabels:
  #     app: nginx
  
  # 设置命名空间关系映射策略
  namespaceMapping: 
    kube-ops: kube-ops1
  restorePVs: true
[root@k8s-master-01 velero]# kubectl apply -f  restore.yaml
[root@k8s-master-01 velero]# velero describe restore migrate-kube-ops1-restore

kubernetes与velero的第一次尝试_linux_09
等待状态 Pase completed…
kubernetes与velero的第一次尝试_velero_10
注意:还原的任务也要具有唯一性
等待pod running发现ingress ingressroute没有备份过来
kubernetes与velero的第一次尝试_velero_11

6. 创建对应ingress ingressroute 登陆gitlab nexus,并修改host or dns解析进行测试:

kubernetes与velero的第一次尝试_对象存储_12
kubernetes与velero的第一次尝试_velero_13
目的基本实现 将一个namespace 下应用迁移到了另外一个集群的namespace下!

更进一步的想法

  1. 其实开始为想得是只备份还原nexus单个应用…下次体验一些备份还原单个应用
  2. 存储类的区别。开始本来想导入tke集群的。且按照腾讯云官方文档: https://cloud.tencent.com/document/product/457/52331.做了持久卷动态映射
apiVersion: v1
kind: ConfigMap
metadata: 
  name: change-storage-class-config
  namespace: velero
  labels: 
    velero.io/plugin-config: ""
    velero.io/change-storage-class: RestoreItemAction
data: 
  # 存储类名映射到腾讯云动态存储类 cbs
  cbs-csi: cbs

但是导入的时候没有生效还是找cbs-csi存储类!。所以就先导入到有cbs-csi存储类的集群了。具体替换存储类要好好研究一下!

  1. ingress ingress为什么没有备份…有时间研究一下
  2. 特别感谢: https://velero.io/docs/v1.8/csi/

 https://mp.weixin.qq.com/s/VC6kVfcBCUQfG6RwM6F1QA  https://cloud.tencent.com/document/product/457/52331

  • 打赏
  • 1
  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK