无头服务---创建三个mysql实例每个实例数据持久化到本地
1.先创建三个pv切记注释掉storageClassName项
[root@k8s-master pv]# cat mysql.pv.yaml apiVersion: v1 kind: PersistentVolume metadata: name: pv-nfs-pv05 #创建的pv名称可创建多个. namespace: mt-math #属于的命名空间 spec: capacity: storage: 200M #创建的pv容量为1G accessModes: - ReadWriteMany #pv的访问模式:可读可写可挂在多个节点 persistentVolumeReclaimPolicy: Retain #回收策略 #storageClassName: pv-nfs-mysql nfs: #创建的pv数据来源 path: /NFS/pv05 #数据源目录 server: 192.168.0.14 #数据源ip --- apiVersion: v1 kind: PersistentVolume metadata: name: pv-nfs-pv06 #创建的pv名称可创建多个. namespace: mt-math #属于的命名空间 spec: capacity: storage: 200M #创建的pv容量为1G accessModes: - ReadWriteMany #pv的访问模式:可读可写可挂在多个节点 persistentVolumeReclaimPolicy: Retain #回收策略 #storageClassName: pv-nfs-mysql nfs: #创建的pv数据来源 path: /NFS/pv06 #数据源目录 server: 192.168.0.14 #数据源ip --- apiVersion: v1 kind: PersistentVolume metadata: name: pv-nfs-pv07 #创建的pv名称可创建多个. namespace: mt-math #属于的命名空间 spec: capacity: storage: 200M #创建的pv容量为1G accessModes: - ReadWriteMany #pv的访问模式:可读可写可挂在多个节点 persistentVolumeReclaimPolicy: Retain #回收策略 #storageClassName: pv-nfs-mysql nfs: #创建的pv数据来源 path: /NFS/pv07 #数据源目录 server: 192.168.0.14 #数据源ip
创建无头服务配置文件每一个实例数据持久化, 这里就需要使用volumeClaimTemplates自动创建PVC
cat mysql5.7.yaml
#创建第一个无头服务mysql#################
apiVersion: v1
kind: Service
metadata:
labels:
app: db-service
name: db-service
namespace: mt-math
spec:
ports:
- name: db-service
port: 3306
clusterIP: None
selector:
app: wylpod-mysql
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
annotations:
labels:
app: wylpod-mysql
name: wylpod-mysql
namespace: mt-math
spec:
serviceName: "db-service"
replicas: 3
selector:
matchLabels:
app: wylpod-mysql
template:
metadata:
annotations:
labels:
app: wylpod-mysql
spec:
containers:
- image: "mysql:5.7"
imagePullPolicy: IfNotPresent
name: wylpod-mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
- name: MYSQL_USER
value: "admin"
- name: MYSQL_PASSWORD
value: "123456"
ports:
- containerPort: 3306
protocol: TCP
name: wylpod-mysql
volumeMounts:
- name: mysql-pvc
mountPath: /var/lib/mysql
############################################
volumeClaimTemplates:
- metadata:
name: mysql-pvc
namespace: mt-math
spec:
accessModes: [ "ReadWriteMany" ]
resources:
requests:
storage: 200M
############################################
#volumes: #设置挂载
#- name: mysql-pvc #挂载数据节点名称
# persistentVolumeClaim: #服务类型
# claimName: pvc-nfs-pvc03 #数据源名称
######################################################################
#StatefulSet需要一个无头服务来定义DNS域名,需要在StatefulSet之前创建好
#无头服务它没有群集IP,如果解析Headless Service的DNS域名,则返回的是该服务对应的全部Pod的端点列表
#无头服务需要在Headless Service的基础上又为StatefulSet控制的每个Pod实力创建了一个DNS域名,这个域名的格式为: ${podname}.${headless service name} 即:POd名称.service名称
#配置volumeClaimTemplates自动创建PVC(在GCE中会自动创建kubernetes.io/gce-pd类型的volume)切记创建pv时注释storageClassName项.
#####################################################################
执行开始创建并查看状态:
kubectl create -f mysql.pv.yaml kubectl create -f mysql5.7.yaml kubectl get all -n mt-math
查看数据持久化是否成功
登录mysql测试访问
dns解析测试:需要提前安装coredns插件