Personal learning records
K8S控制器三(StatefulSet)
K8S控制器三(StatefulSet)

K8S控制器三(StatefulSet)

很多容器在关闭的时候是有状态的,StatefulSet是用来创建有状态应用,可以通过过某种方式记录这些状态,然后在 Pod 被重新创建时,能够为新 Pod 恢复这些状态。比如说数据库,redis或者mysql的pod在崩了重启新的pod后,数据还会继续存在。这和我在容器化改造wordpress时,把数据卷挂载出来有异曲同工之妙。首先创建个StatefulSet试试

首先StatefulSet是为有状态应用准备的,例如redi,mysql等,那就需要一个持久化卷,创建一个基于NFS的pv持久卷,在我192.168.169.10的主机上/mnt下创建了两个目录用来放持久化数据(在两台副node上也得下载nfs和配置同样的/etc/exports)


接着创建一个pv,整体是为了尝试手动创建pv,再通过StatefulSet自动实现pvc申请持久卷。

两个 PV 分别连接到了192.168.169.10的data-1和data-2目录,再创建一个service,

这个svc定义了一个nginx 的svc,监听80端口,然后请求转发给具有 app: nginx 标签的 Pod。然后再创建nginx的sts,在这个sts里面,会自动创建pvc绑定到已经创建好的pv上

这个里面实现pvc自动绑定的部分是volumeClaimTemplates,StatefulSet 在创建 Pod 实例时,会根据volumeClaimTemplates中定义的模板创建一个 PVC,然后这个pvc去绑了pv,同时把/usr/share/nginx/html下的东西放到挂载目录中,我这里会创建一个名为“nginx-data”的pvc,去尝试绑定有rw权限且5g大小的pv,绑定情况如下

进入两个pod中,把各自html目录下创建不同的index.html方便观察,然后再看看两个pod的访问ip

两个pod中的信息如下

我尝试把两个pod杀了,再次访问,查看数据是否能重新显示出来

数据还在,这就是StatefulSet的作用了。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注