podman利用criu进行容器迁移

简介: podman利用criu进行容器迁移

什么是有状态服务和无状态服务


无状态服务

服务器仅根据当前连接来处理请求,服务器不会保存状态信息,所以请求不会依赖于先前请求的信息,但是可以通过外部获取信息,例如数据库。还有一个点是相同的请求可以由不同的服务进行处理。


有状态服务

有状态服务则与无状态服务相反,会根据每个请求的信息或者从早期请求的信息来处理该请求,必须使用同一个服务器来处理相同的请求。


例子

我们熟知的web网页,绝大部分是使用的无状态服务,而我们常说的游戏服务器,是使用的有状态服务。



podman 准备工作


准备工作

我们假设有一个博客系统,有一个路由reader专门叠加阅读量,我们将其抽象出来用go写出来大概是这样的

image.png


我们编译后尝试下访问路由信息

image.png


image.png



制作镜像

我们编写DockerFile,并且使用 docker build构建镜像,正如前文所述,因为dockerpodman都遵循OCI规范,所以镜像理论上是通用的。

我们将上述信息拷贝到服务器上,并且编写DockerFile,如下

image.png


我们将DockerFile拷贝到服务器上,用docker build进行构建

image.png


构建完毕后,将其pushdocker hub 上即可

image.png



使用podman启动容器

我们使用podman启动容器,并且访问几次接口

下载刚刚上传的pdudojuejin镜像

image.png


启动容器

image.png



podman 迁移有状态服务

访问有状态服务

我们尝试访问有状态服务,制造一些“证据”以证明我们迁移是成功了的

image.png


使用checkpoint为容器制造“快照”

使用命令: podman container checkpoint可以建立快照


image.png


我们发现建立快照后,容器停止了

image.png


现在尝试访问

image.png



使用checkpoint恢复快照

使用命令: podman container restore -k可以恢复快照运行

image.png

我们发现,有状态服务还在持续运行中,赞


垮机器迁移有状态服务容器

除了在本地进行制作“快照” 和 恢复 以外,还可以直接导出到 tar文件中,而后在别的机器进行恢复即可


启动容器并且访问有状态服务

image.png


可以看见,目前访问为2


将容器制作“快照”并且导出到文件

命令: podman container checkpoint juejin_pdudo_test -e juejin_pdudo_test.tar

-e: 导出到本地文件路径

image.png


导出现在的容器


image.png


将容器和“快照”发送需要恢复的podman机器上



在其他podman恢复容器

image.png


可以看到,已经恢复,且状态还在



探寻checkpoint底层逻辑

其实podman checkpoint 使用的底层技术为 criu,这玩意是干啥的呢? 它是一个linux``namespace 实现checkpoint/restore的项目,这就是我们此前俗称的快照,可以将在在运行的程序,以文件的形式存储在磁盘上,后期又可以恢复的进程中,哎,就这样吧,不想写了,今天累了,我们可以把这个放在后面,后面可以单独列一篇文章来玩玩 criu(挖个坑,后面填一下,嘿嘿)。



心得体会

podman我们今天看了criu相关功能,结合我们之前玩的runc是不是觉得podman越来越像一个盒子,把各种东西都装在里面,对内封装,对外提供接口供我们调用,不管是criu也好,runc也好,我们会逐渐意识到,容器技术,不仅仅是个别项目的成果,越来越趋向于整个生态链,最初容器技术,都是野蛮生长,后来几个大佬商量商量,于是有了相关规范协议,有了协议,其他厂商照着抄就是了,反正根据协议,都会兼容。



docker 打包在podman无法运行探查

其实最开始的时候,想直接利用docker将镜像拖出来,然后放到podman运行,但是实际上操作了之后,报错了,报错信息

image.png

经过排查,排查过程就不叙述了,我们将docker容器导入到podman后,使用inspect查看镜像的信息是这样的, config为空


image.png


我们将docker上传到docker hub(已经将docker hub信息给隐藏了,不算引流吧)上,再利用podman pull 下来,使用inspect大概是这样的

image.png


结合上次我们使用runc的经验来看,应该是 没有生成 容器规范文件引起的

哎,溜了溜了




相关文章
|
11月前
|
存储 Ubuntu Shell
Docker镜像与容器备份迁移(export、import与commit、save、load)
Docker镜像与容器备份迁移(export、import与commit、save、load)
2181 0
|
3月前
|
存储 安全 Linux
Podman入门全指南:安装、配置与运行容器
Podman入门全指南:安装、配置与运行容器
1693 1
|
20天前
|
存储 Linux Docker
备份和迁移Docker容器
【8月更文挑战第21天】在Linux系统中,备份与迁移Docker容器可通过以下步骤实现:首先,查找并记录需备份容器的ID或名称;其次,若容器正在运行,则需先停止;最后利用`docker export`命令将其导出为tar归档文件以完成备份。对于容器迁移,有两种常见方式:一是直接迁移备份文件至目标服务器,并通过`docker import`命令导入新容器;二是通过创建容器镜像,并推送至镜像仓库,之后在目标服务器上拉取该镜像并运行。值得注意的是,在进行容器迁移时应确保Docker版本兼容,同时关注数据存储、网络配置及权限设置等问题,以保障容器功能正常运作。
|
14天前
|
Kubernetes Unix Linux
k8s将节点容器运行时从Docker迁移到Containerd
k8s将节点容器运行时从Docker迁移到Containerd
|
21天前
|
Linux KVM 虚拟化
在Linux中,如何进行虚拟机和容器的备份和迁移?
在Linux中,如何进行虚拟机和容器的备份和迁移?
|
4月前
|
关系型数据库 MySQL Linux
docker镜像与容器的迁移
docker迁移镜像步骤 docker迁移容器步骤 docker迁移mysql容器步骤
|
Docker 容器
Docker 容器迁移
Docker 容器迁移
297 0
|
9月前
|
网络安全 数据安全/隐私保护 网络虚拟化
完整模型容器的使用,迁移tensorflow2 实现的 yolo3 到docker容器
完整模型容器的使用,迁移tensorflow2 实现的 yolo3 到docker容器
41 1
|
9月前
|
Linux TensorFlow 算法框架/工具
把物体检测模型迁移到docker容器
把物体检测模型迁移到docker容器
36 1
|
4月前
|
存储 Docker 容器
百度搜索:蓝易云【【Docker存储】Docker的容器迁移方式详解】
通过以上方式,可以在不同的Docker环境中迁移容器和相关的数据。根据具体需求和环境情况,选择适合的迁移方式。
64 0