一、目的
本yaml主要用于在K8S环境下的mysql单独部署,部署默认ns为default,有需要的请自行修改。
二、本文件主要包含的内容
configmap:用于将mysql的配置文件保存在k8s中,方便用户灵活修改,保障重启容器不丢失;
deployment:用于保证控制mysql的pod副本数,以及数据卷的配置和挂载
service:主要用于配置mysql的远程链接端口;默认nodeport的形式的31306端口,有其他需要的可以使用clusterip模式或者设置其他的端口。
三、yaml文件主要实现的功能:
本yaml将mysql配置保存在confmap中,同时对mysql数据文件进行落盘,并配置hostpath,方便用户修改管理;如果有对配置文件修改,删除pod重新启动即可,数据不会丢失。
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-cnf
namespace: default
data:
mysqld.cnf: |
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
lower_case_table_names=1 #实现mysql不区分大小(开发需求,建议开启)
symbolic-links=0
character-set-server=utf8mb4
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
namespace: default
spec:
replicas: 1
selector:
matchLabels:
name: mysql
template:
metadata:
labels:
name: mysql
spec:
nodeName: vm-24-11-ubuntu
containers:
- name: mysql
image: mysql:5.7
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
volumeMounts:
- mountPath: "/var/lib/mysql"
name: "mysql-dir"
- mountPath: "/etc/mysql/mysql.conf.d"
name: "mysql-conf"
volumes:
- name: "mysql-dir"
hostPath:
path: /opt/mysql/data
type: DirectoryOrCreate
- name: "mysql-conf"
configMap:
name: mysql-cnf
items:
- key: mysqld.cnf
path: mysqld.cnf
---
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: default
spec:
type: NodePort
ports:
- port: 3306
nodePort: 31306
targetPort: 3306
selector:
name: mysql
四、关于MySQL8版本
-
MySQL从5.7直接到了8.0
-
功能做出了显著的改进与增强
-
对MySQL的源代码进行了重构,对MySQL optimizer 优化器进行了改进,不仅速度提升,为用户带来更多更好的性能体验
-
但pod使用的5.7版本的mysql,用需要的用户可自行修改mysql版本
五、具体使用方法
进入k8s主节点上,拷贝并复制该yaml文件到本地,执行
kubectl create -f mysql.yaml
其中,mysql.yaml为模板文件,具体的名字可根据创建的文件名变化