环境规划

SoftVer
MySQL5.7
OSDebian 12
StorageNFS

部署

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

标签: mysql, database, k3s, k8s, kuberneters, deployment

添加新评论