域名和子域名的关系是(网站是否能查到谁访问了)

   搜狗SEO    

Deployment控制器设计原则:管理的所有Pod一模一样,提供同一个服务,也不考虑在哪台Node运行,可随意扩容和缩容。这种应用称为“无状态”,例如Web服务

但是,在实际的场景中,并不能满足所有应用,尤其是分布式应用,会部署多个实例,这些实例之间往往有依赖关系,例如主从关系、主备关系,这种应用称为“有状态”,例如MySQL主从、Etcd集群、redis-cluster 等等


StatefulSet控制器用于部署有状态应用,满足一些有状态应用的需求:

? Pod有序的部署、扩容、删除和停止

? Pod分配一个稳定的且唯一的网络标识

? Pod分配一个独享的存储



稳定的网络标识:

使用无头服务 Headless Service(相比普通Service只是将spec.clusterIP定义为None,也就是没有clusterIP,使用endport 来通信)来维护Pod网络身份,会为每个Pod分配一个数字编号并且按照编号顺序部署。还需要在StatefulSet添加serviceName: “nginx”字段指定StatefulSet控制器要使用这个Headless Service。


稳定主要体现在主机名和Pod A记录:


? 主机名:<statefulset名称>-<编号>

? Pod DNS A记录:<statefulset名称-编号>.<service-name> .<namespace>.svc.cluster.local (POD 之间通过DNS A 记录通信)

例如: web- 0. web . default . svc . cluster . local



案例:

通过创建一个 nginx 应用的statefluset 控制器

创建 Headless Service ,定义 clusterIP: None (表示K8S 不会在给这个service 去颁发一个clusterIP 了;相比 deployment 控制器 的每个POD 都是相同的,而 statefuset 控制器的每个POD 都是有状态的

需要单独去访问 )


#创建statefulset,指定serviceName


这个就验证了 statefulset 的 Pod是 有序的部署、扩容、删除和停止 且 给每一个POD 分配一个稳定的且唯一的网络标识



独享存储:StatefulSet的存储卷使用VolumeClaimTemplate创建,称为卷申请模板,当StatefulSet使用VolumeClaimTemplate创建一个PersistentVolume时,

同样也会为每个Pod分配并创建一个编号的PVC,每个PVC绑定对应的PV,从而保证每个Pod都拥有独立的存储。


在创建StatefulSet 控制器 独享存储前,需要先定义好存储卷,使用pv 作为持久化存储卷,后端存储为NFS

这里采用 动态PV 的方式 (NFS server 搭建的过程省略)


一、部署NFS服务器



二、配置PV 动态供给(NFS StorageClass),创建pvc

#部署NFS实现自动创建PV插件: 一共设计到4个yaml 文件 ,官方的文档有详细的说明

https://github.com/kubernetes-incubator/external-storage




#官方默认的镜像地址,国内可能无法下载,可以使用 image: fxkjnj/nfs-client-provisioner:latest

#定义NFS 服务器的地址,共享目录名称

# archiveOnDelete: "true" 表示当PVC 删除后,后端数据不直接删除,而是归档


基于上面的内容创建 statefulset.yaml 文件


删除statefulset


删除statefulset 有两张方法,级联删除 和 非级联删除

 标签:

评论留言

我要留言

欢迎参与讨论,请在这里发表您的看法、交流您的观点。