原创

K8s 启动mysql

温馨提示:
本文最后更新于 2025年05月30日,已超过 379 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

创建名称空间

kubectl create namespace dev

创建 文件挂载地址

mkdir -p /nfs/data/01

编写mysql-pv.yaml文件

# 定义持久卷信息
apiVersion: v1
kind: PersistentVolume
metadata:
  # pv是没有namespace属性的,它是一种跨namespace的共享资源
  name: pv-1gi
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  # 存储类,具有相同存储类名称的pv和pvc才能进行绑定
  storageClassName: nfs
  nfs:
    path: /nfs/data/01
    server: 123.207.64.127 # 写自己的IP

创建该PV对象

kubectl create -f mysql-pv.yaml

查看创建结果

kubectl describe pv  pv-1gi
[root@master ~]# kubectl describe pv  pv-1gi
Name:            pv-1gi
Labels:          <none>
Annotations:     pv.kubernetes.io/bound-by-controller: yes
Finalizers:      [kubernetes.io/pv-protection]
StorageClass:    nfs
Status:          Bound
Claim:           dev/mysql-pvc
Reclaim Policy:  Retain
Access Modes:    RWX
VolumeMode:      Filesystem
Capacity:        1Gi
Node Affinity:   <none>
Message:         
Source:
    Type:      NFS (an NFS mount that lasts the lifetime of a pod)
    Server:    123.207.64.127
    Path:      /nfs/data/01
    ReadOnly:  false
Events:        <none>

创建持久券PVC

编写mysql-pvc.yaml文件

# 定义mysql的持久卷声明信息
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
  namespace: dev
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
  # 存储类,具有相同存储类名称的pv和pvc才能进行绑定
  storageClassName: nfs

创建该PVC对象

kubectl create -f mysql-pvc.yaml

查看创建结果

kubectl get pvc -n dev
kubectl describe pvc  mysql-pvc -n dev


如下 ,Status: Bound ,即为 绑定

[root@master ~]# kubectl get pvc -n dev
NAME        STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
mysql-pvc   Bound    pv-1gi   1Gi        RWX            nfs            53m
[root@master ~]# kubectl describe pvc  mysql-pvc -n dev
Name:          mysql-pvc
Namespace:     dev
StorageClass:  nfs
Status:        Bound
Volume:        pv-1gi
Labels:        <none>
Annotations:   pv.kubernetes.io/bind-completed: yes
               pv.kubernetes.io/bound-by-controller: yes
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      1Gi
Access Modes:  RWX
VolumeMode:    Filesystem
Used By:       mysql-7ddc4488d5-b9k6g
               mysql-7ddc4488d5-wnxss
Events:        <none>

创建Secret对象,保存mysql的root密码

kubectl create secret generic mysql-root-password --from-literal=password=123456 -n dev


查看创建结果

kubectl get secret -n dev
kubectl get secret mysql-root-password -o yaml -n dev

如下

[root@master ~]# kubectl get secret -n dev
NAME                  TYPE                                  DATA   AGE
default-token-qvlzm   kubernetes.io/service-account-token   3      71m
mysql-root-password   Opaque                                1      56m
[root@master ~]# kubectl get secret mysql-root-password -o yaml -n dev
apiVersion: v1
data:
  password: TGl1bGlhbjY=
kind: Secret
metadata:
  creationTimestamp: "2025-05-29T19:20:31Z"
  name: mysql-root-password
  namespace: dev
  resourceVersion: "188056"
  uid: d4ef6541-eed1-41b6-a2ee-78f6e3e7b6a5
type: Opaque

创建deployment和service

编辑mysql-svc.yaml文件 ,,,

<font color="#46acc8">需要注意</font>:
         volumeMounts:
        - name: mysqlvolume
          mountPath: /var/lib/mysql
这些参数是   不要的。
# 定义mysql的Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: mysql
  name: mysql
  namespace: dev
spec:
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:5.7
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-root-password
              key: password
          # 如果你不想使用secret对象保存mysql登录密码,可以直接使用下面的方式指定,简单粗暴未尝不可    
          #value: "123456"
        ports:
        - containerPort: 3306 
      volumes:
      - name: mysqlvolume
        # 使用pvc
        persistentVolumeClaim:
          claimName: mysql-pvc
---
#定义mysql的Service
apiVersion: v1
kind: Service
metadata:
  labels:
    app: svc-mysql
  name: svc-mysql
  namespace: dev
spec:
  selector:
    app: mysql
  type: NodePort
  ports:
  - port: 3306
    protocol: TCP
    targetPort: 3306
    nodePort: 31234


执行创建deployment和service命令

kubectl create -f mysql-svc.yaml

查看创建结果

如下

[root@master ~]# kubectl get pod,svc  -n dev
NAME                         READY   STATUS    RESTARTS   AGE
pod/mysql-7ddc4488d5-b9k6g   1/1     Running   0          16m
pod/mysql-7ddc4488d5-wnxss   1/1     Running   0          32m

NAME                TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/svc-mysql   NodePort   10.10.154.169   <none>        3306:31234/TCP   49m

使用数据库工具连接,密码就是123456, 后续 可以去更改;端口 固定 31234


正文到此结束