当前位置: 首页 > news >正文

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

1 概述

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

2 环境

  • kubernetes集群A使用镜像仓库1(swr.cn-south-1.myhuaweicloud.com/lj),工作负载放在demo名字空间下。
    在这里插入图片描述
    在这里插入图片描述

  • kubernetes集群B使用镜像仓库2(swr.cn-east-3.myhuaweicloud.com/lj-new)。
    在这里插入图片描述

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的数据,使用起来更加简单,很适合来迁移无状态应用。

http://www.lryc.cn/news/485001.html

相关文章:

  • VPI photonics的一些使用经验(测相位 快速搜索)持续更新
  • DBeaver 连接 OceanBase Oracle 租户
  • QT_CONFIG宏使用
  • 力扣(leetcode)题目总结——辅助栈篇
  • 如何处理 iOS 客户端内 Webview H5 中后台播放的音视频问题
  • C++的一些模版
  • spring boot整合https协议
  • 服务器开机即占用大量内存,解决
  • Keil uvision的edition
  • [每周一更]-(第123期):模拟面试|消息队列面试思路解析
  • 游戏引擎学习第12天
  • 深入理解Flutter生命周期函数之StatefulWidget(一)
  • 413: Quick Sort
  • vue之axios根据某个接口创建实例,并设置headers和超时时间,捕捉异常
  • Pandas数据透视表:交叉分析与聚合计算
  • 软件设计师考试大纲
  • 一文说清C++类型转换操作符(cast operator)
  • MOSFET电路栅源极GS之间并联电容后,MOS炸管原因分析
  • gitHub常用操作
  • [项目代码] YOLOv5 铁路工人安全帽安全背心识别 [目标检测]
  • Java 垃圾回收机制(GC)概览
  • Kafka节点服役和退役
  • Git如何简单使用
  • 酒水分销积分商城小程序开发方案php+uniapp
  • MTU-内核态(数据链路层或网络接口上能够传输的最大数据包大小)
  • React的基础API介绍(一)
  • 【Electron】总结:如何创建Electron+Element Plus的项目
  • 从依托指标字典到 NoETL 自动化指标平台,指标口径一致性管理的进阶
  • 嵌入式面试题练习 - 2024/11/15
  • 分析http话术异常挂断原因