背景
近期工作中需要在内部发布平台兼容k8s原生资源——StatefulSet的发布,特此在这作一系列记录。目前发布系统已经支持deployment和service的增删改查。
什么是有状态
有状态应用允许用户重复返回该应用并恢复之前的操作,比如电子邮件或者网上银行应用。
有状态的应用会记录之前事务的上下文,这些上下文可能会对当前或未来事务产生影响。
所以,有状态的应用必须确保每个用户始终访问同一个应用程序实例,或者有某种在实例之间同步数据的机制。
有状态进程的优点是,应用程序可以存储每个事务的历史和上下文,跟踪最近的活动、配置偏好和窗口位置等元素,并允许用户恢复事务。
有状态的事务的表现就像始终和同一台服务器进行对话一样。
StatefulSet
StatefulSet是k8s的原生资源之一,它针对的是有状态的服务。有状态意味着每一个k8s调度的最小单位——Pod是唯一的。每一个Pod需要拥有唯一的标识,唯一的IP,唯一的内存状态,唯一的存储等等。官方建议在拥有以下一个或多个条件时使用StatefulSet:
- 稳定的、唯一的网络标识符。
- 稳定的、持久的存储。
- 有序的、优雅的部署和扩缩。
- 有序的、自动的滚动更新。
简言之,StatefulSet用来管理某 Pod 集合的部署和扩缩ÿ