k8s部署mysql单机版
环境:
Os:Centos 7
k8s:1.28
提前部署好nfs
查看nfs进程情况
[root@node1 ~]# systemctl status nfs.service
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
Active: active (exited) since Mon 2025-04-07 14:39:51 CST; 2s ago
Process: 25632 ExecStartPost=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (code=exited, status=0/SUCCESS)
Process: 25616 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
Process: 25614 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
Main PID: 25616 (code=exited, status=0/SUCCESS)
Tasks: 0
Memory: 0B
CGroup: /system.slice/nfs-server.service
Apr 07 14:39:51 node1 systemd[1]: Starting NFS server and services...
Apr 07 14:39:51 node1 systemd[1]: Started NFS server and services.
每个节点都执行如上的命令
nfs服务器配置情况
[root@master single]# more /etc/exports
/k8s/ *(rw,sync,no_root_squash)
1.创建名称空间
kubectl create namespace ns-mysql
2.创建secret
[root@master single]# more 1-secret.yaml
apiVersion: v1
data:
MYSQL_ROOT_PASSWORD: bXlzcWw= #密码mysql 采用base64编码后结果
kind: Secret
metadata:
name: mysql-secret
namespace: ns-mysql
type: Opaque
kubectl apply -f 1-secret.yaml
3.创建configmap
[root@master single]# more 2-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-cnf
namespace: ns-mysql
data:
my.cnf: |-
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
init_connect='SET collation_connection = utf8mb4_general_ci'
init_connect='SET NAMES utf8mb4'
interactive_timeout=86400
wait_timeout=86400
max_connections = 5000
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
skip-character-set-client-handshake
skip-name-resolve
#master-slaver repication
server_id=1
log-bin=mysql-bin
read-only=0
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
gtid_mode=ON
enforce_gtid_consistency = ON
lower_case_table_names=1
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
kubectl apply -f 2-configmap.yaml
4.创建pv
[root@master single]# more 3-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
namespace: ns-mysql
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 5Gi
nfs:
path: /k8s/mysql/data
readOnly: false
server: 192.168.1.102
需要创建好子目录,k8s目录为nfs共享目录
mkdir -p /k8s/mysql/data
kubectl apply -f 3-pv.yaml
5.创建pvc
[root@master single]# more 4-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
namespace: ns-mysql
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
volumeName: mysql-pv
kubectl apply -f 4-pvc.yaml
6.创建sts
[root@master single]# more 5-sts.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
namespace: ns-mysql
labels:
app: mysql-hxl ##可自定义名称
name: mysql-hxl-sts ##可自定义名称
annotations:
kubesphere.io/alias-name: mysql-hxl ##可自定义名称
spec:
replicas: 1 ##这里只能设置副本数为1
selector:
matchLabels:
app: mysql-hxl
template:
metadata:
labels:
app: mysql-hxl ##必须与spec.selector 同名称
annotations:
kubesphere.io/containerSecrets: null
logging.kubesphere.io/logsidecar-config: '{}'
spec:
containers:
- name: hxl-container
##type: worker
imagePullPolicy: IfNotPresent
resources:
requests:
cpu: '0.01'
memory: 10Mi
limits:
cpu: '0.98'
memory: 1700Mi
image: registry.cn-shenzhen.aliyuncs.com/hxlk8s/mysql:5.7.30
ports:
- name: tcp-3306
protocol: TCP
containerPort: 3306
##servicePort: 3306
- name: tcp-33060
protocol: TCP
containerPort: 33060
##servicePort: 33060
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: MYSQL_ROOT_PASSWORD
volumeMounts:
- name: hxl-cnf-volume ##必须与volumes定义的同名称
readOnly: false
mountPath: /etc/mysql
- name: hxl-data-volume ##必须与volumes定义的同名称
readOnly: false
mountPath: /var/lib/mysql
serviceAccount: default
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app: mysql-hxl
topologyKey: kubernetes.io/hostname
initContainers: []
imagePullSecrets: null
volumes:
- name: hxl-cnf-volume #映射configMap信息
configMap:
name: mysql-cnf
items:
- key: my.cnf
path: my.cnf
- name: hxl-data-volume #映射pvc信息
persistentVolumeClaim:
claimName: mysql-pvc
updateStrategy:
type: RollingUpdate
rollingUpdate:
partition: 0
kubectl apply -f 5-sts.yaml
deployment版
vi 5-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: hxl-mysql-deploy
namespace: ns-mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql-hxl
template:
metadata:
labels:
app: mysql-hxl
spec:
containers:
- name: hxl-container
image: registry.cn-shenzhen.aliyuncs.com/hxlk8s/mysql:5.7.30
imagePullPolicy: IfNotPresent
ports:
- name: tcp-3306
protocol: TCP
containerPort: 3306
##servicePort: 3306
- name: tcp-33060
protocol: TCP
containerPort: 33060
##servicePort: 33060
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: MYSQL_ROOT_PASSWORD
volumeMounts:
- name: hxl-cnf-volume
readOnly: false
mountPath: /etc/mysql
- name: hxl-data-volume
readOnly: false
mountPath: /var/lib/mysql
volumes:
- name: hxl-cnf-volume #映射configMap信息
configMap:
name: mysql-cnf
items:
- key: my.cnf
path: my.cnf
- name: hxl-data-volume #映射pvc信息
persistentVolumeClaim:
claimName: mysql-pvc
8.创建nodeport service
[root@master single]# more 7-nodeport-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql-front
labels:
app: mysql-hxl
namespace: ns-mysql
spec:
selector:
app: mysql-hxl
type: NodePort
ports:
- name: ''
port: 3306
protocol: TCP
targetPort: 3306
nodePort: 30001 #指定主机任意端口30000-32767
sessionAffinity: None
kubectl apply -f 7-nodeport-svc.yaml
9.通过客户端连接
发现1.24版本下,master节点不能访问
使用端口30001
/opt/mysql57/bin/mysql -h 192.168.1.102 -uroot -pmysql -P30001
/opt/mysql57/bin/mysql -h 192.168.1.105 -uroot -pmysql -P30001
/opt/mysql57/bin/mysql -h 192.168.1.106 -uroot -pmysql -P30001
mysql> select user,host from mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| root | % |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+
4 rows in set (0.00 sec)
mysql> show grants for 'root'@'%';
+-------------------------------------------------------------+
| Grants for root@% |
+-------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION |
+-------------------------------------------------------------+
1 row in set (0.00 sec)
该账号默认对连接客户端不做限制.
浙公网安备 33010602011771号