k8s基础机制
k8s基础机制
无状态pod的特性
顾名思义,pod无状态即pod不保留任何状态,没有持久化存储,可以进行快速扩展,通过增加更多的pod副本来处理负载。任何一个pod失败,都不会导致数据的丢失。
有状态pod的特性
数据库都是有状态,因为其需要持久化数据。有状态pod,保留了状态,所以pod丢失并不会导致数据丢失。
Statefulset
k8s工作类型的控制器,用于有状态应用的部署,为每一个pod提供唯一的网络标识(稳定过的主机名和dns)
功能
-
为每一个pod提供唯一的网络标识: DNS和hostname
-
为每一个pod提供持久化存储:PV
-
pod有序,创建、扩展、删除和网络标识都是有序的
statefulset任务在启动pod时会按照pod的序号进行存储,序号较小的pod会优先启动。大多数策略都是根据顺序进行操作。
-
支持滚动更新
statefulset的滚动更新是先从序号低的开始滚动更新 -
StatefulSet通过.spec.podManagementPolicy字段支持两种Pod管理策略:OrderedReady和Parallel。
默认策略是OrderedReady,Pod在启动或终止时遵循顺序。而Parallel策略则允许并行地启动或终止Pod,不等待其他Pod变成Running和Ready状态
适用场景
需要持久化存储,稳定网络标识,有序和扩展的应用,如数据库系统等。
Deployment
k8s工作类型的控制器,用于无状态应用的部署
功能
- 管理replicas对象来保证pod副本的数量
- 支持滚动更新,可以自动替换旧版本的pod以更新应用。在更新pod场景时,新的pod启动并经过健康检查(liveness和readness探针)之后,才会逐步停止旧的pod,然后更新新的pod,这样做的好处是能够保证服务不断。
适用场景
适合水平扩展,不需要持久化存储和唯一网络标识的应用。