k8clone二进制工具迁移k8s中的无状态应用

1 概述

k8clone是一个简便的Kubernetes元数据克隆工具,它可以将Kubernetes元数据(对象)保存为本地压缩包,在恢复时可将这些元数据恢复到目标集群中(已存在的资源不会被覆盖)。它不依赖远程存储,使用起来更加简单和方便,它不迁移PV底层的数据,因此它适合用于迁移无状态的应用。

2 环境

3 部署

在集群A的跳板机A和集群B的跳板机B上,执行如下命令安装k8clone工具。

复制代码
wget https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/k8clone-linux-amd64
mv k8clone-linux-amd64 k8clone
chmod +x k8clone 
mv k8clone /usr/bin/

4 在跳板机A备份应用

-n参数,表示会在哪些namespace下执行备份,用逗号分隔。

--exclude-kind参数,表示不备份哪些k8s对象类型,例如statefulset,service等。

-d参数,表示输出的压缩包文件。

执行如下命令备份k8s对象:

复制代码
k8clone backup -n demo --exclude-kind statefulset,event,pod -d /tmp/demo-app

最终输出文件是/tmp/demo-app.zip。

5 在跳板机B恢复应用

5.1 传输压缩文件

将跳板机A的/tmp/demo-app.zip文件复制到集群B的跳板机B的/tmp目录。

5.2 新建一个恢复配置文件restore.json

新建一个配置文件,用于描述镜像信息的替换,因为两个集群使用了不同的镜像仓库。

复制代码
cat > /tmp/restore.json << EOF
{
  "ImageRepo": {
    "swr.cn-south-1.myhuaweicloud.com/lj": "swr.cn-east-3.myhuaweicloud.com/lj-new"
  }
}
EOF

5.3 执行应用恢复

5.3.1 创建目标namespace

在这里的namespace是demo:

复制代码
kubectl create ns demo

5.3.2 创建image pull secret

在应用的namespace(也就是demo)下,基于新容器镜像仓库的信息创建image pull secret,secret的名称和源端集群保持一样,在这里名称叫my-image-pull-secret。

复制代码
export repo=swr.cn-east-3.myhuaweicloud.com
export username=*****your_username*****
export password=*****your_password*****

kubectl create secret docker-registry \
my-image-pull-secret \
-n demo \
--docker-server=$repo \
--docker-username=$username \
--docker-password=$password

5.3.3 恢复应用

恢复时,需要指定压缩文件和恢复配置文件,命令如下:

复制代码
k8clone restore -d /tmp/demo-app.zip -f /tmp/restore.json

deployment应用在目标集群恢复了:

6 小结

k8clone作为一个k8s元数据的备份和恢复的工具,它不像velero那样需要一个远程存储以及能够备份PV的数据,使用起来更加简单,很适合来迁移无状态应用。

相关推荐
亲爱的非洲野猪15 分钟前
关于k8s Kubernetes的10个面试题
云原生·容器·kubernetes
西京刀客1 小时前
k8s之configmap
云原生·容器·kubernetes
阿里云云原生19 小时前
Higress MCP 服务管理,助力构建私有 MCP 市场
云原生
zzywxc78720 小时前
云原生 Serverless 架构下的智能弹性伸缩与成本优化实践
云原生·架构·serverless
KubeSphere 云原生21 小时前
Higress 上架 KubeSphere Marketplace,助力企业构建云原生流量入口
云原生
AKAMAI1 天前
在Akamai平台上进行VOD转码的参考架构
后端·云原生·云计算
2401_836836592 天前
k8s配置管理
云原生·容器·kubernetes
一切顺势而行2 天前
k8s 使用docker 安装教程
docker·容器·kubernetes