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️⃣ 流程总结
- 启用 hostpath-storage 插件。
- 创建 Secret 管理 MySQL root 密码。
- 创建单文件 YAML
mysql-deployment.yaml
,整合 PVC、Deployment 和 Service。 - 应用 YAML 文件部署 MySQL。
- 检查 Pod 和 Service 状态。
- 使用 NodePort 端口从外部访问 MySQL。
这样可以一次性完成 MySQL 的部署、持久化存储以及外部访问配置,方便管理和版本控制。