
环境规划
Soft | Ver |
---|
MySQL | 5.7 |
OS | Debian 12 |
Storage | NFS |
部署
NFS
Server
sudo apt install nfs-kernel-server
sudo mkdir -p /data/nfs/db
sudo chown nobody:nogroup /data/nfs/db
sudo chmod 777 /data/nfs/db
sudo nano /etc/exports
root@k3s-server-01:/data/yaml# cat /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/data/nfs/ *(rw,no_root_squash,no_subtree_check)
/data/nfs/db *(rw,no_root_squash,no_subtree_check)
root@k3s-server-01:/data/yaml# exportfs -arv
Client
sudo apt install nfs-common
sudo mkdir -p /data/nfs/db
sudo mount 10.0.0.123:/data/nfs/db /data/nfs/db
# 持久化挂载
sudo nano /etc/fstab
10.0.0.123:/data/nfs/db /data/nfs/db nfs defaults 0 0
Secret
root@k3s-server-01:/data/yaml# vim secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysql
type: Opaque
data:
password: Password base64
root@k3s-server-01:/data/yaml# kubectl apply -f secret.yaml
PV
root@k3s-server-01:/data/yaml# vim pv.yaml
kind: PersistentVolume
apiVersion: v1
metadata:
name: mysql-nfs-pv
#namespace: db-mysql
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 10Gi
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
nfs:
path: /data/nfs/db
server: 10.0.0.123
root@k3s-server-01:/data/yaml# kubectl apply -f pv.yaml
PVC
root@k3s-server-01:/data/yaml# vim pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mysql-nfs-pvc
#namespace: db-mysql
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: nfs
root@k3s-server-01:/data/yaml# kubectl apply -f pvc.yaml
Service
root@k3s-server-01:/data/yaml# vim service.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
type: NodePort
ports:
- port: 3306
targetPort: 3306
nodePort: 30006 # 推荐使用不同于 port 的 nodePort
selector:
app: mysql
root@k3s-server-01:/data/yaml# kubectl apply -f pvc.yaml
Deployment
root@k3s-server-01:/data/yaml# vim deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
#namespace: db-mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql57
image: mysql:5.7
imagePullPolicy: IfNotPresent
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret # Secret 的名称
key: password # Secret 中的键
args:
- --lower_case_table_names=1
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
- mountPath: /etc/mysql/mysql.conf.d
name: mysql-persistent-storage
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-nfs-pvc
my.cnf
root@k3s-server-01:/data/yaml# cat /data/nfs/db/auto.cnf
[auto]
server-uuid=47b09130-443a-11f0-b84c-e606d58ee78b
[mysqld]
bind-address = 0.0.0.0
require_secure_transport = OFF
skip-ssl = true*
root@k3s-server-01:/data/yaml# kubectl apply -f deployment.yaml
