1 .由于工作中要部署一些有状态服务
例如 redis kafka mysql 每个人都会部署集群,然而在k8s中部署他们的集群模式,就要用到StatefulSet。
除此之外,StatefulSet在Headless Service的基础上又为StatefulSet控制的每个Pod副本创建了一个DNS域名,这个域名的格式为:
( p o d n a m e ) . ( h e a d l e s s s e r v e r n a m e ) F Q D N : (podname).(headless server name) FQDN: (podname).(headlessservername)FQDN(podname).(headless server name).namespace.svc.cluster.local
2.特点
(1).Pod一致性:包含次序(启动、停止次序)、网络一致性。此一致性与Pod相关,与被调度到哪个node节点无关;
(2).稳定的次序:对于N个副本的StatefulSet,每个Pod都在[0,N)的范围内分配一个数字序号,且是唯一的;
(3).稳定的网络:Pod的hostname模式为( s t a t e f u l s e t 名 称 ) − (statefulset名称)-(statefulset名称)−(序号);
(4).稳定的存储:通过VolumeClaimTemplate为每个Pod创建一个PV。删除、减少副本,不会删除相关的卷。

kubectl explain sts.spec :主要字段解释
replicas :副本数
selector:那个pod是由自己管理的
serviceName:必须关联到一个无头服务商
template:定义pod模板(其中定义关联那个存储卷)
volumeClaimTemplates :生成PVC

部署一个StatefulSet重要的几点

1.要有存储,pv,pvc来满足
2.创建configmap来管理自己的配置文件
3.创建headless服务来保证每个pod的hostname,可以用集群内部的dns来解析
4.创建StatefulSet
5.如果需要外部访问,请开一个端口

下面以redis 哨兵模式在k8s中部署为例子
实验:

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐