kubernetes中新功能StatefulSet实现功能与现阶段切换系统对比
目前docker的使用:
pod ip全网可以访问
双网卡绑定
namespace按库级别划分
chubaoDB:
master、router:ReplicationController
partitionserver:Pod
弹性数据库:
mysql实例Pod
老版 切换系统
与kubernetes弱偶和,通过双网卡实现跨namespace的pod间访问
将数据库作为无状态服务使用
1、数据本地存储,pod删除后数据即丢失
2、主从切换使用MHA
3、固定IP
4、域名切换需要依靠程序实现
5、依靠zabbix检测故障
6、添加从库需依赖dbs系统
与kubernetes强偶和
1、数据采用共享存储,pod删除后,数据不丢失即使node节点宕机,在合适的条件下,将拉起一个新的pod,数据不丢失
2、不再需要mha切换,完全依靠kebernetes
3、pod的ip不固定,主要依靠service提供对外服务(要想保持Pod IP不变,可以借助稳定的Pod hostname定制IPAM获取固定的Pod IP)
4、dbs资产管理信息简化,只需同步etcd中的信息即可
5、依靠zabbix的判断逻辑
6、添加从库只需要一条命令,将会自动选择从第n-1个节点同步数据
依赖kubernetes dns、node controller等,通过定义配置文件利用kubernetes自身提供的高可用机制
Note: StatefulSets are stable (GA) in 1.9.
Kubernetes1.9版本开始StatefulSets发布GA版本
有状态的服务:
稳定的、唯一的网络标识。
稳定的、持久的存储。
有序的、优雅的部署和伸缩。
有序的、优雅的删除和停止。
有序的、自动的滚动更新。
限制
1、共享存储
2、删除pod后,相关连的pv不会被删除,并且这些pv默认也不会被其他pvc bound
3、删除StatefulSets资源不影响pod,友好的删除pod,用缩容
4、稳定的网络标识
Pod Identity
StatefulSet Pods 拥有一个唯一的标识
Ordinal Index
如果StatefulSet有多个replicas,每个Pod将会按找个0~N-1编号
Stable Network ID
Cluster Domain Service (ns/name) StatefulSet (ns/name) StatefulSet Domain Pod DNS Pod Hostname
cluster.local default/nginx default/web nginx.default.svc.cluster.local web-{0…N-1}.nginx.default.svc.cluster.local web-{0…N-1}
cluster.local foo/nginx foo/web nginx.foo.svc.cluster.local web-{0…N-1}.nginx.foo.svc.cluster.local web-{0…N-1}
kube.local foo/nginx foo/web nginx.foo.svc.kube.local web-{0…N-1}.nginx.foo.svc.kube.local web-{0…N-1}
CNI网络模型
稳定的主要是针对Pod发生re-schedule后仍然要保持之前的网络标识和持久化存储。这里所说的网络标识包括hostname、集群内DNS中该Pod对应的A Record,并不能保证Pod re-schedule之后IP不变。要想保持Pod