背景

接上文: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

2. 对于对象存储的开明

阳明大佬还有其余很多文章都是采纳了minio.腾讯云的cos 还有 阿里云的oss也是能够的。偷懒了间接应用cos!
先创立一个对象存储桶

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存储桶名词 还有地区!


期待velero命名空间下pod running!

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

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

2. yaml形式创立

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

apiVersion: velero.io/v1kind: Backupmetadata:   name: migrate-kube-ops-2022-03-18-01-backup  # 必须得是 velero 装置的命名空间  namespace: velerospec:   # 仅蕴含 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


留神: backup create 工作的命名要具备唯一性。建设新的命名工作要用不同的名称!

2. 登陆腾讯云cos治理后盾查看备份文件创立

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

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

apiVersion: velero.io/v1kind: Restoremetadata:   name: migrate-kube-ops1-restore  namespace: velerospec:   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


期待状态 Pase completed......

留神:还原的工作也要具备唯一性
期待pod running发现ingress ingressroute没有备份过去

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



目标根本实现 将一个namespace 下利用迁徙到了另外一个集群的namespace下!

更进一步的想法

  1. 其实开始为想得是只备份还原nexus单个利用....下次体验一些备份还原单个利用
  2. 存储类的区别。开始原本想导入tke集群的。且依照腾讯云官网文档:https://cloud.tencent.com/document/product/457/52331.做了长久卷动静映射

    apiVersion: v1kind: ConfigMapmetadata:   name: change-storage-class-config  namespace: velero  labels:  velero.io/plugin-config: "" velero.io/change-storage-class: RestoreItemActiondata:   # 存储类名映射到腾讯云动静存储类 cbs  cbs-csi: cbs

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

  3. ingress ingress为什么没有备份....有工夫钻研一下
  4. 特别感谢:https://velero.io/docs/v1.8/csi/

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