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)

该账号默认对连接客户端不做限制.

 

posted @ 2025-03-05 11:02  slnngk  阅读(443)  评论(0)    收藏  举报