背景
接上文: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/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
留神:backup create 工作的命名要具备唯一性。建设新的命名工作要用不同的名称!
2. 登陆腾讯云 cos 治理后盾查看备份文件创立
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
期待状态 Pase completed……
留神:还原的工作也要具备唯一性
期待 pod running 发现 ingress ingressroute 没有备份过去
6. 创立对应 ingress ingressroute 登陆 gitlab nexus, 并批改 host or dns 解析进行测试:
目标根本实现 将一个 namespace 下利用迁徙到了另外一个集群的 namespace 下!
更进一步的想法
- 其实开始为想得是只备份还原 nexus 单个利用 …. 下次体验一些备份还原单个利用
-
存储类的区别。开始原本想导入 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 存储类的集群了。具体替换存储类要好好钻研一下!
- ingress ingress 为什么没有备份 …. 有工夫钻研一下
-
特别感谢:https://velero.io/docs/v1.8/csi/
https://mp.weixin.qq.com/s/VC6kVfcBCUQfG6RwM6F1QA https://cloud.tencent.com/document/product/457/52331