什么是statefulset(sts)
statefulset是用来管理有状态应用的工作负载API对象,也是一种工作负载资源
有状态和无状态
无状态应用:当前应用不会记录状态(网络可能会变、挂载的东西可能会变、顺序可能会变)
有状态应用:需要记录当前状态(网络不变、存储不变、顺序不变)
使用场景
集合的部署和扩缩
提供持久存储和持久标识符
对比deploy
都是管理着相同容器容器规约一组Pod
sts给这些Pod维护了一个粘性的的ID,虽然这些Pod都是基于相同的规约来创建的,但是不能相互替换,不管怎么调度,每个Pod都有一个永久不变的ID
虽然单个Pod会有故障的风险,但是持久的Pod标识符使得新旧Pod相匹配
查看创建的Pod会发现,命名不在是随机创建的名字,而是有了顺序号,从0开始,而k8s也会按照这个顺序一次创建
但是我们的Pod不是一般的应用,是有状态的应用,需要有稳定的网络标识,所有会为每一个Pod也创建一个域名,格式是:
我们进入pod中验证一下,通过
发现是可以ping通的,虽然Pod的IP会变化,但是通过固定的域名就能访问到指定Pod了。
既然我们的Pod有了稳定的网络标识,service也就不需要分配ClusterIP了,这个时候,只需要添加字段clusterIP:None,这样就不会再分配IP,这样的Service成为Headless Service