k8s——14、statefulset控制器
k8s中的statefulset控制器
文章目录
使用阿里云主机ECS,
四台主机信息如下:
server1 — 私网IP:10.0.0.2 ----公网IP: 47.108.54.185 ---- 搭建docker仓库harbor—nfs服务器
server2 — 私网IP:10.0.0.3 ----公网IP: 47.108.144.231 ---- k8s集群主节点
server3 — 私网IP:10.0.0.4 ----公网IP: 47.108.115.206 ---- k8s集群节点
server4 — 私网IP:10.0.0.5 ----公网IP: 47.108.28.42 ---- k8s集群节点
statefulset控制器简介
- StatefulSet是用来管理有状态应用的工作负载API对象,实例之间有不对等关系,以及实例对外部数据有依赖关系的应用,称为“有状态应用”
- StatefulSet将应用状态抽象成了两种情况:
拓扑状态:应用实例必须按照某种顺序启动。新创建的Pod必须和原来Pod的网络标识一样
存储状态:应用的多个实例分别绑定了不同存储数据。 - StatefulSet通过Headless Service维持Pod的拓扑状态
- StatefulSet给所有的Pod进行了编号,编号规则是: $(statefulset名称)−(序号),从0开始。
- StatefulSet还会为每一个Pod分配并创建一个同样编号的PVC。这样,kubernetes就可以通过Persistent Volume机制为这个PVC绑定对应的PV,从而保证每一个Pod都拥有一个独立的Volume。
- Pod被删除后重建,重建Pod的网络标识也不会改变,Pod的拓扑状态按照Pod的“名字+编号”的方式固定下来,并且为每个Pod提供了一个固定且唯一的访问入口,即Pod对应的DNS记录。
statefulset控制器如何通过headless service维持pod的状态
pv和pvc的设计,使得statefulset能管理存储状态
Statefulset还会为每一个pod分配并创建一个同样编号的pvc。
这样,kubernetes就可以通过PV机制绑定对应的PVC,从而保证每一个pod都拥有一个独立的卷
使用statefulset部署MySQL主从复制集群
参考官方文档:
https://kubernetes.io/zh-cn/docs/tasks/run-application/run-replicated-stateful-application/
包含的模块:
MySQL集群包含一个CM,两个Service与一个StatefulSet
配置Mysql主从时,不同的节点的配置不同。
CM中包含两个配置文件,分别为主配置文件:master.cnf和从配置文件:slave.cnf
主要包含两个SVC:Headless Service和ClusterIP Service;Headless SVC主要负责主集群
编辑CM,主服务器可以将日志提供给从服务器,并且从服务器只能读不能写:
注意:由于这里的数据目录与statefulset.yaml文件中的数据目录写的不一致,导致后面pod起不来,注意避开这个错误。
写成默认路径:
datadir=/var/lib/mysql
或者不写,也代表使用默认路径。
接下来,创建两个SVC:
创建statefulset控制器。
- 首先使用无头服务,初始化容器,使用mysql镜像,利用脚本分别拿到主从配置文件,对启动的Pod生成server id的文件(server-id.cnf),再将CM的配置文件按主从类型拷贝出来(通过上一部主机id来决定)
- 接下来启动的副本允许超户使用空密码;挂载了两个目录,包含配置目录和数据目录;分别可以使用CPU一半的资源和使用1G内存,并添加了存活探针和就绪探针
- 在容器最后需要声明挂载卷的类型,conf为空卷,config-map是挂载卷
直接复制官方文档。
准备mysql备份工具:xtrabackup,并上传至harbor仓库
实验完毕,还原。
更多推荐
所有评论(0)