一、简介
Kubernetes目前常用的三种管理pod的控制器主要是DaemonSet、Deployment、StatefulSets,DaemonSet和Deployment对一般用户来说比较容易理解和使用。
而对于StatefulSet的了解和使用相对来说可能会模糊一点,下面主要围绕StatefulSet和Deployment对比和使用选择做一简单的介绍。
二、对比
Deployment
众所周知,在Kubernetes的定义中,Deployment属于无状态应用,其主要特点是管理的pod的名字是由ReplicatSet随机生成的,所挂载的Volume是多个Pod共享的。
StatefulSets
通过此文档 Kubernetes/K8S基础使用方法总结【九】——Pod控制器StatefulSet 我们可以了解到StatefulSet的主要特点,而这些特点正是Deployment所不具备的,这也就是他们之间主要的差异。
Kubernetes官方介绍
举例(mysql)说明
通过以下示例,我们就更容易看出他们的差异,该使用哪个控制器管理器也更容易做出选择。
正常情况下,我们可以部署replicaset为1的mysql实例提供服务,但是为了预防事故发生,我们希望一个高可用的Mysql在后端提供数据读写服务。假如我们需要1个master节点和2个slave节点,那么我们就需要部署mysql的replicaSet为3,如此,这个高可用的mysql从启动流程来看就必须满足以下几点要求。
- 先配置master节点然后slave节点
- 从master节点复制数据到slave-1
- 在master节点中配置并启用slave-1
- 等待slave-1节点可用
- 从master节点复制数据到slave-2
- 在master节点中配置并启用slave-2
- 在slave节点上配置master信息
三、选择
通过以上对比,我们很容易看出选择Deployment还是StatefulSet主要取决于应用程序本身。例如:
- 如果应用程序需要一个高可用的或分布式的存储服务,选择StatefulSet来管理pod,但需要自己充分管理好每个pod所挂载的指定的存储卷,减少事故发生的情况。
- 如果应用程序对存储要求没有太高,选择Deployment是最好的选择,因为存储可以是多Pod共享的,不需要对多个存储卷做复杂的维护和管理,只需要保证存储卷的安全稳定即可。
评论前必须登录!
注册