Deployment与Statefulset区别

今天在处理一个PVC无法自动创建的问题时,顺便理了一下。

在创建一个Deployment时发现PVC无法自动创建,查了一下相关内容,主要参考一下文章:
https://akomljen.com/kubernetes-persistent-volumes-with-deployment-and-statefulset/
其中:
在这里插入图片描述
译:可以通过ReadWriteOnce模式来给Deployment创建一个PVC,这样可以正常运行,但是前提是不能扩展Deployment,因为如果一旦有多个pod,那么当一个节点上的pod在使用pvc时,另一个pod在另一个节点上就没法用了,而且即便两个pod在一个节点上,都用一个pvc也会报错;(ReadWriteOnce意思是该pvc一次只能有一个node访问)
在这里插入图片描述
译:如果想跑一个有状态的服务,那就用stateful set,这样有很多好处,特别是你不用自己在创建PVC了,而且扩展起来特别容易,通过stateful set,可你可以定义volumeClaimTemplates来让每个pod自己自动创建pvc,你只用在一个地方定义你的持久卷(statefulset的yaml)

目前1.5版本以下还不支持Deployment用这种方式自动创建PVC/PV
在这里插入图片描述
顺便翻查了一下stateful set和deployment的区别,几篇blog写的可以参考。
https://draveness.me/kubernetes-statefulset
statefulset实现原理
http://www.unmin.club/?p=696
headeless.service的保证原理(通过这个文章发现我目前使用的stateful set的方式是不合理的,完全是为了用持久卷而用stateful set,因为clusterIp不是none,请求并不会稳定的转发到一个pod上,所以说白了不同实例建其实还是无状态的)
https://www.jianshu.com/p/18042b5f2682
stateful set deployment整体对比

另外mark一条老是记不住也查半天的命令:iptables -S -t nat

发布了12 篇原创文章 · 获赞 0 · 访问量 565

猜你喜欢

转载自blog.csdn.net/weixin_42305433/article/details/102595507