您当前的位置: 首页 >  kubernetes
  • 0浏览

    0关注

    1477博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

kubernetes StatefulSet介绍

软件工程小施同学 发布时间:2020-11-05 16:14:18 ,浏览量:0

  一、有状态应用

对于数据存储类应用,它的多个实例,往往都会在本地磁盘保存一份数据。

导致这些实例一旦被杀掉,即便重建出来,实例与数据之间的对应关系也已经丢失,从而导致应用创建失败。

这种实例之间有不对等关系,以及实例对外部数据有依赖关系的应用,称为“有状态应用”。

 

  二、StatefulSet 1. 抽象

StatefulSet将应用状态抽象成了两种情况:

  • 拓扑状态。应用实例必须按照某种顺序启动。新创建的Pod必须和原来Pod的网络标识一样
  • 存储状态。应用的多个实例分别绑定了不同存储数据。

 

2. 特点
  • 稳定的、唯一的网络标识(Pod可以固定IP)。
  • 稳定的、持久的存储。
  • 有序的、优雅的部署和伸缩。
  • 有序的、优雅的删除和停止。
  • 有序的、自动的滚动更新。
3. 工作原理

首先,StatefulSet的控制器直接管理的是Pod。

其次,Kubernetes通过Headless Serrvice,为那些有编号的Pod,在DNS服务器中生成带有同样编号的DNS记录。只要StatefulSet能够保证这些Pod名字中的编号不变,那么Service中类似于web-0.nginx.default.svc.cluster.clocal这样的DNS记录也不会变,这条记录解析出来的Pod的IP地址,随着后端Pod的删除和创建而自动更新。

最后,StatefulSet还会为每一个Pod分配并创建一个同样编号的PVC。这样,kubernetes就可以通过Persistent Volume机制为这个PVC绑定对应的PV,从而保证每一个Pod都拥有一个独立的Volume。

 

 

三、StatefulSet和Deployment的区别

“Deployment用于部署无状态服务,StatefulSet用来部署有状态服务”。

 

四、存储工作原理

当我们进入上述创建的Pod,在/usr/share/nginx/html中写入内容,即使Pod被删除重建,Volume中的内容仍不会丢失。

这是怎么做到的?

StatefulSet控制器恢复Pod的过程分析:

  1. 首先,当你把一个Pod,比如web-0删除之后,这个Pod对应的PV和PVC并不会被删除,而这个Volume中写入的数据,也依然存储在远程存储服务中。
  2. 此时,StatefulSet控制器发现,一个名叫web-0的Pod消失了。所以控制器会重新创建一个新的、名字还是叫做web-0的Pod,来进行调谐。
  3. 并且这个新Pod对象的定义中,它声明使用的PVC的名字,仍是www-web-0。所以这个新的web-0 Pod被创建出来之后,Kubernetes为它查找名叫www-web-0的PVC时,就会将旧Pod遗留的PVC,进而找到和这个PVC绑定在一起的PV

 

 

 

 

https://www.jianshu.com/p/71c1556b64db

 

 

关注
打赏
1665320866
查看更多评论
立即登录/注册

微信扫码登录

2.7709s