K8S中服务可以分为两种:有状态和无状态;
有状态服务:服务之间存在角色或状态关系;
无状态服务:服务之间彼此独立;
1.StatefulSet控制器
1.1 为了解决“有状态服务”的集群部署,集群之间数据同步问题(如:mysql主从等);
1.2 StatefulSet所管理的pod,拥有唯一且固定的pod名称;
通常命名方式从0开始顺延,如“xxx-mysql-0,xxx-mysql-1”;
1.3 按照顺序对pod进行启动,有序伸缩和回收;
伸缩规则
伸(扩):从0往后,遇到问题不会跳过,如0-->1-->2-->3(出错)--x4(4不会被创建);
缩(减):从后往前,顺序相反,规则不变;
1.4 Headless Service,无头服务,请求的转发直接解析到pod IP;
所谓无头服务,就是在K8S中创建一个service,这个service没有clusterIP(为none),并且其他pod可以通过ping通这个service name,而结果则是该headless service所关联的endpoint节点的podIP,并且当有多个endpoint时,每一次ping操作都会轮询显示endpoint的podIP;
题外:无论何种服务其所在平台的运行效率都是,物理机>虚拟机>云平台,即如果一个服务部署在物理机上,其会发挥出最大的性能,其次为物理机中假设的虚拟机,最后为通过虚拟化所创建的云平台设备。其中性能损失比约为20-30%(仅为参考);
2.DeamonSet控制器:在当前K8S集群中,每个节点运行同一个pod,当有新的节点加入集群时也会为新的节点配置相同的pod。当节点从集群中移除时此pod也会被kubernetes回收。若删除DeamonSet控制器则会同时删除其创建的所有pod;
DeanmonSet可以用来做前端静态页面优化工作,比如把经常要访问的页面在每个node节点上运行,并且中间的网络不在使用ClustreIP而是直接使用node节点的IP这样可以减少性能损耗;