Kubernets的有状态部署
StatefulSet是Kubernets中的有状态部署,其特点是:
- 数据存储持久化,通过PVC实现
- 网络地址稳定:重启Pod其PodName和主机名不会改变,通过Headless Service实现
- 有序部署/删除:前一个Pod运行成功,后续的Pod才能启动,而在删除时,也是有序的进行操作(比如Nginx - Apache - Mysql,启动会先启动Mysql,等待Mysql启动后才会启动Apache,同理删除时也会先删除Nginx,然后再删除Apache),通过Init Containers实现
- 有序伸缩:同上
Kubernets中的无状态部署
- ReplicationController:确保应用副本保持在指定的数量,新版本下一般不建议使用
- ReplicaSet:和RC类似,但支持集合操作,比如对大量容器进行操作
- Deployment:自动管理了RS,目前一般都建议使用这种方式,支持滚动更新(先创建新版本,再删除旧版本),注意,Deployment并不关心Pod的创建,而是通过操作RS的方式去实现对Pod的操作
其中,Deployment的滚动更新流程为:
- 首先Deployment会创建一个新的RS(以下旧RS称RS1,新RS称RS2)
- 在RS2中创建新版本的Pod
- 删除RS1中的旧版本Pod(注意,旧的RS1并不会被删除,只是暂时停用,以保证可以回滚数据)