简介:本文详细介绍了在KubeSphere容器平台上部署MySQL单机数据库的全流程,涵盖环境准备、资源定义、持久化存储配置、安全策略及高可用优化等关键环节,为开发者提供可落地的技术方案。
KubeSphere作为企业级开源容器平台,在数据库部署领域展现出独特优势。MySQL单机模式适用于开发测试环境、小型业务系统或需要快速验证的场景,其核心价值在于:
典型应用场景包括:
| 资源类型 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 2核 | 4核 |
| 内存 | 4GB | 8GB |
| 存储 | 20GB | 50GB |
推荐使用支持动态供应的StorageClass,例如:
apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:name: mysql-scprovisioner: kubernetes.io/aws-ebs # 根据实际云提供商调整parameters:type: gp2fsType: ext4
需确保3306端口在集群内可访问,建议配置NetworkPolicy:
apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: mysql-network-policyspec:podSelector:matchLabels:app: mysqlpolicyTypes:- Ingressingress:- from:- podSelector:matchLabels:app: backendports:- protocol: TCPport: 3306
apiVersion: apps/v1kind: Deploymentmetadata:name: mysql-standalonelabels:app: mysqlspec:replicas: 1selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- name: mysqlimage: mysql:8.0.33env:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:name: mysql-secretkey: password- name: MYSQL_DATABASEvalue: appdbports:- containerPort: 3306volumeMounts:- name: mysql-persistent-storagemountPath: /var/lib/mysqlvolumes:- name: mysql-persistent-storagepersistentVolumeClaim:claimName: mysql-pvc---apiVersion: v1kind: PersistentVolumeClaimmetadata:name: mysql-pvcspec:accessModes:- ReadWriteOnceresources:requests:storage: 20GistorageClassName: mysql-sc---apiVersion: v1kind: Secretmetadata:name: mysql-secrettype: Opaquedata:password: <base64-encoded-password> # echo -n 'yourpassword' | base64
apiVersion: v1kind: Servicemetadata:name: mysql-servicespec:selector:app: mysqlports:- protocol: TCPport: 3306targetPort: 3306type: ClusterIP # 开发环境可用NodePort
在/etc/mysql/conf.d/custom.cnf中添加:
[mysqld]innodb_buffer_pool_size = 1G # 建议设为可用内存的50-70%innodb_log_file_size = 256Minnodb_flush_log_at_trx_commit = 1sync_binlog = 1
创建CronJob进行定期备份:
apiVersion: batch/v1beta1kind: CronJobmetadata:name: mysql-backupspec:schedule: "0 2 * * *"jobTemplate:spec:template:spec:containers:- name: backupimage: mysql:8.0command: ["/bin/sh", "-c"]args:- mysqldump -h mysql-service -uroot -p$MYSQL_ROOT_PASSWORD appdb > /backup/appdb-$(date +\%Y\%m\%d).sqlenvFrom:- secretRef:name: mysql-secretvolumeMounts:- name: backup-storagemountPath: /backupvolumes:- name: backup-storagepersistentVolumeClaim:claimName: backup-pvcrestartPolicy: OnFailure
通过Prometheus监控关键指标:
- job_name: 'mysql'static_configs:- targets: ['mysql-service:9104'] # 使用mysqld-exportermetrics_path: '/metrics'
重点关注指标:
mysql_global_status_threads_connectedmysql_global_status_innodb_buffer_pool_read_requestsmysql_global_status_questions连接失败:
kubectl get endpoints mysql-servicekubectl describe networkpolicy mysql-network-policy存储异常:
kubectl get pvc mysql-pvckubectl describe pv <pv-name>性能瓶颈:
kubectl top pod mysql-standalone查看资源使用kubectl exec mysql-standalone -- grep slow /var/log/mysql/mysql-slow.log创建专用ServiceAccount:
apiVersion: v1kind: ServiceAccountmetadata:name: mysql-sa
配置RBAC权限:
```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: mysql-role
rules:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: mysql-rolebinding
subjects:
openssl req -newkey rsa:2048 -nodes -keyout server-key.pem -out server-req.pem -subj "/CN=mysql-service"openssl rsa -in server-key.pem -out server-key.pemopenssl x509 -req -in server-req.pem -days 365 -signkey server-key.pem -out server-cert.pemkubectl create secret generic mysql-certs --from-file=server-cert.pem --from-file=server-key.pem
kubectl exec -it old-mysql -- mysqldump -uroot -p appdb > dump.sqlkubectl exec -it new-mysql -- mysql -uroot -p appdb < dump.sql
velero backup create mysql-backup --include-namespaces default
velero restore create --from-backup mysql-backup
kubectl create secret generic mysql-secret --dry-run=client -o yaml \--from-literal=password=newpassword | kubectl apply -f -
kubectl patch pvc mysql-pvc --type='json' -p='[{"op": "replace", "path": "/spec/resources/requests/storage", "value":"30Gi"}]'
-- 在MySQL客户端执行OPTIMIZE TABLE large_table;
通过以上系统化的部署方案,开发者可以在KubeSphere平台上快速构建稳定可靠的MySQL单机环境。实际生产环境中,建议结合具体业务需求进行参数调优,并定期进行容灾演练以确保系统高可用性。对于关键业务系统,可考虑从单机模式逐步升级为主从复制或集群架构,KubeSphere提供的可视化运维界面将极大简化这一演进过程。