MicroK8s MySQL 部署

MicroK8s MySQL 部署笔记(整合 PVC 单文件版)

本文档记录了在 microk8s 上从创建 Secret 到部署 MySQL 的完整流程,并将 PVC、Deployment、Service 整合到一个 YAML 文件 mysql-deployment.yaml 中,方便一次性部署。


1️⃣ 启用 hostpath-storage

microk8s enable hostpath-storage
  • microk8s 自带 hostPath StorageClass (microk8s-hostpath) 用于持久化存储。

2️⃣ 创建 Secret

MySQL root 密码通过 Kubernetes Secret 管理。

Secret YAML 片段

apiVersion: v1
kind: Secret
metadata:
  name: mysql-root-secret
  namespace: database
type: Opaque
data:
  root-password: cm9vdF9wYXNzd29yZA==  # base64 编码的 root_password

命令

microk8s kubectl apply -f mysql-secret.yaml
microk8s kubectl get secret -n database

3️⃣ 整合 PVC + Deployment + Service (mysql-deployment.yaml)

将 PVC、MySQL Deployment 和 Service 写在同一个 YAML 文件中:

# ===================== PVC: MySQL 数据持久化 =====================
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
  namespace: database
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: microk8s-hostpath
---
# ===================== Deployment: MySQL =====================
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-instance
  namespace: database
  labels:
    app: mysql-instance
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql-instance
  template:
    metadata:
      labels:
        app: mysql-instance
    spec:
      containers:
      - name: mysql
        image: mysql:8.0
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-root-secret
              key: root-password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-storage
        persistentVolumeClaim:
          claimName: mysql-pvc
---
# ===================== Service: 对外暴露 =====================
apiVersion: v1
kind: Service
metadata:
  name: mysql-service
  namespace: database
spec:
  selector:
    app: mysql-instance
  ports:
  - port: 3306
    targetPort: 3306
    nodePort: 30306
  type: NodePort

命令

microk8s kubectl apply -f mysql-deployment.yaml
microk8s kubectl get pvc -n database
microk8s kubectl get pods -n database
microk8s kubectl get svc -n database
  • PVC 状态为 Bound 表示持久化成功。
  • Pod 状态为 Running 表示 MySQL 已启动。
  • Service 显示 NodePort 端口,可用宿主机 IP + 端口外部访问 MySQL。

外部访问示例

mysql -h <宿主机IP> -P 30306 -u root -p

4️⃣ 流程总结

  1. 启用 hostpath-storage 插件。
  2. 创建 Secret 管理 MySQL root 密码。
  3. 创建单文件 YAML mysql-deployment.yaml,整合 PVC、Deployment 和 Service。
  4. 应用 YAML 文件部署 MySQL。
  5. 检查 Pod 和 Service 状态。
  6. 使用 NodePort 端口从外部访问 MySQL。

这样可以一次性完成 MySQL 的部署、持久化存储以及外部访问配置,方便管理和版本控制。

无标签