本文整理自 CNCF X 阿里巴巴云原生技术公开课 & 《Kubernetes In Action》
回顾一下Deployment的功能
- 支持定义一组pod的期望数量,Controller会为我们维持Pod的数量在期望的版本以及期望的数量。
- 支持配置Pod的发布方式,配置完成后Controler会按照我们给出的策略来更新Pod。
- 支持一键回滚
Deployment 认为管理的所有相同版本的Pod都是一模一样的副本
但以上应付的是无状态的应用,但是面临以下有状态的场景:
- Pod之间并非相同副本,每一个pod都有独立标志
- 每个pod对应一个固定网络hostname,并且在发布升级后能够继续保持
- 每个pod有一个独立的存储盘,并且在发布升级后能够继续挂载原有盘
- 应用发布的时候能够按照固定顺序升级Pod
Statefulset 有状态应用控制器
1.每个Pod都有order序号,会按照order序号创建,删除,更新pod
2.通过配置headless service,使得每个pod有一个唯一的hostname
headless service (无clusterIP,每一个pod都有一个endpoint,都有一个对应的dns域名)
3.通过配置pvc模板,就是pvc template,使得每个pod有一块或者多块pv存储盘
4.支持一定数量灰度发布