linuxea:kubernetes 了解SatefulSet控制器(26)

在之前,我们知道应用程序分为两类,一种是有状态,一种无状态。无状态的有nginx等。有状态的居多。

如:redis,mysql,zook集群等,其中一些不单单有主从状态,更有启动顺序等的区分。这时候可使用statefulse,但是statefulse在完成一些配置的时候仍然是非常麻烦的,很多时候需要手动编写脚本,或者依赖于地第三方的一些工具来做。statefulse在处理,特别是在一些运维逻辑非常复杂的时候,仍然是非常麻烦的。coreos提供了一种组件operator,可以将复杂的逻辑封装在这个组件当中。但是我们会使用kubernetes官网的statefulset-->有状态副本集。

无状态关注的更多的是群体,任何一个轻易的就会被其他所取代。没有 本地的数据,也没有独特的依赖状态。
但是对于有状态的应用来讲,就需要有个体的:cattle,pet。在之前称为petset,现在称为SatefulSet。

SatefulSet

在kubernetes上的SatefulSet主要用于管理一下应用
1,具备稳定的环境,唯一的网络标识符
2,具备稳定持久的存储设备
3,有序,优雅平滑的部署和扩展,以及有序终止和删除,有序的滚动更新(如:启动顺序等,关闭顺序等)。

一般来讲SatefulSet将会由三个组件组成:headless service,SatefulSet控制器,VolumeClaimTemplate存储卷申请模板

  • headless service

我们知道创建没每个pod的名称是无序的,但是在有状态的应用中节点的名称是不能变的,pod的名称是识别pod唯一性的标识符。这个标识符必须稳定持久有效,这时候就需要headless service(无头服务),解析的名称直达后端pod地址,并确保名称唯一。

  • VolumeClaimTemplate

大多数有状态的pod都会用到持久存储,以redis cluster为例,假设有6台redis,每台redis的槽位是不一样的,数据也是不一样的(数据有可能,或者重名),也就意味着至少需要6个单独的存储卷用来专用存储,不能够共享。因为数据名称是一样的,数据不一样。

此时基于pod模板定义则只能访问同一个存储卷,因此使用VolumeClaimTemplate(卷申请模板)在创建pod的时候会自动生成一个专有的pvc,请求绑定一个专有pv,从而有单独的存储

在SatefulSet中的pod不能够使用同一个存储卷,因此通过pod模板来创建pod是不适用的,这也就是为什么要用定义VolumeClaimTemplate的原因。

0 分享

您可以选择一种方式赞助本站

支付宝扫码赞助

支付宝扫码赞助

日期: 2018-11-01分类: kubernetes

标签: kubernetes

发表评论