
MySQL,作为广泛使用的关系型数据库管理系统,其在K8s环境中的部署对于构建高可用、可扩展的应用程序至关重要
本文将详细介绍如何在K8s中部署一个单节点的MySQL实例,涵盖从环境准备到资源配置、部署及验证的全过程
一、环境准备 在正式部署之前,确保你的K8s集群已经搭建完成,并且具备以下基本条件: - 一个运行中的K8s集群
- 配置好kubectl命令行工具,以便与K8s集群进行交互
- 网络存储系统(如NFS、Ceph等),用于数据持久化
二、资源配置 在K8s中部署MySQL需要配置多种资源,包括ConfigMap、PersistentVolume(PV)、PersistentVolumeClaim(PVC)以及Deployment或StatefulSet
1. ConfigMap ConfigMap用于存储MySQL的配置文件信息,如`my.cnf`
这允许我们将配置与镜像分离,便于后续的配置更新和管理
创建一个名为`mysql-configmap.yaml`的文件,内容如下: yaml apiVersion: v1 kind: ConfigMap metadata: name: mysql-config labels: app: mysql data: my.cnf: |- 【client】 default-character-set=utf8mb4 【mysql】 default-character-set=utf8mb4 【mysqld】 max_connections =2000 secure_file_priv=/var/lib/mysql sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION 通过kubectl命令部署ConfigMap: bash kubectl apply -f mysql-configmap.yaml 2. PV和PVC PV和PVC是K8s中用于存储管理的核心资源
PV定义了底层存储的具体实现,而PVC则是用户对存储资源的请求
创建一个名为`mysql-pv.yaml`的文件,配置NFS存储为例: yaml apiVersion: v1 kind: PersistentVolume metadata: name: mysql-pv labels: app: mysql spec: capacity: storage:50Gi accessModes: - ReadWriteOnce mountOptions: - hard - nfsvers=4.1 nfs: server:192.168.x.x NFS服务器IP地址 path: /data/nfs NFS共享目录 persistentVolumeReclaimPolicy: Retain 通过kubectl命令部署PV: bash kubectl apply -f mysql-pv.yaml 接着,创建一个名为`mysql-pvc.yaml`的文件来请求PV: yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pvc spec: resources: requests: storage:50Gi accessModes: - ReadWriteOnce selector: matchLabels: app: mysql 通过kubectl命令部署PVC: bash kubectl apply -f mysql-pvc.yaml 3. Deployment或StatefulSet 虽然Deployment通常用于无状态应用,但MySQL这类有状态应用更适合使用StatefulSet来管理,因为它能更好地保证Pod的稳定性和数据的持久性
不过,为了简化说明,这里我们先以Deployment为例
创建一个名为`mysql-deploy.yaml`的文件: yaml apiVersion: v1 kind: Service metadata: name: mysql spec: type: NodePort ports: - name: mysql port:3306 targetPort:3306 nodePort:30336 selector: app: mysql --- apiVersion: apps/v1 kind: Deployment metadata: name: mysql spec: replicas:1 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:8.0.19 ports: - containerPort:3306 env: - name: MYSQL_ROOT_PASSWORD value: yourpassword 配置Root用户默认密码 volumeMounts: - name: data mountPath: /var/lib/mysql - name: config mountPath: /etc/mysql/conf.d/my.cnf subPath: my.cnf volumes: - name: data persistentVolumeClaim: claimName: mysql-pvc - name: config configMap: name: mysql-config 注意:为了简化示例,此处将ConfigMap直接挂载为配置文件,实际生产环境中可能需要更复杂的配置管理和安全策略
通过kubectl命令部署Deployment: bash kubectl apply -f mysql-deploy.yaml 三、部署验证 部署完成后,通过以下命令检查Pod、Service和PVC的状态: bash kubectl get pods kubectl get svc kubectl get pvc 确保MySQL Pod处于Running状态,Service和PVC均已正确绑定
接下来,通过kubectl exec命令进入MySQL Pod内部,尝试连接MySQL数据库:
bash
kubectl exec -it mysql-
四、高级配置与优化
在实际生产环境中,你可能还需要考虑
CMD快速连接MySQL网页指南
K8s部署指南:打造单节点MySQL集群
MySQL1267错误:数据截断解决方案
从Derby到MySQL:数据迁移全攻略
远程MySQL数据库配置链接全攻略
MySQL请求ID:追踪数据库操作利器
如何在MySQL中查找数据列的最大值:实用技巧解析
CMD快速连接MySQL网页指南
MySQL主主复制重建指南:快速恢复高可用架构
MySQL正则防SQL注入安全审核指南
《Linux环境下MySQL数据库快速还原指南》
4G内存如何优化MySQL性能指南
DNF玩家必看:MySQL账号密码设置指南
一键清空MySQL数据库表:操作指南与注意事项
用C语言操作MySQL数据库指南
MySQL5.6 JAR包下载指南
MySQL2003链接错误解决指南
传智教育助力MySQL入门:从零基础到精通的PDF学习指南
MySQL数据库服务器实例:高效管理与优化指南