K8s部署指南:打造单节点MySQL集群
k8s部署mysql单节点

首页 2025-07-25 00:38:42



K8s部署MySQL单节点:全面指南与实践 在当前的云计算和容器化技术浪潮中,Kubernetes(简称K8s)凭借其强大的容器编排能力,已成为企业部署和管理微服务架构的首选平台

    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- -- /bin/bash mysql -uroot -pyourpassword 如果连接成功,你可以创建测试表并进行基本的增删改查操作,以验证MySQL实例的可用性

     四、高级配置与优化 在实际生产环境中,你可能还需要考虑

MySQL连接就这么简单!本地远程、编程语言连接方法一网打尽
还在为MySQL日期计算头疼?这份加一天操作指南能解决90%问题
MySQL日志到底在哪里?Linux/Windows/macOS全平台查找方法在此
MySQL数据库管理工具全景评测:从Workbench到DBeaver的技术选型指南
MySQL密码忘了怎么办?这份重置指南能救急,Windows/Linux/Mac都适用
你的MySQL为什么经常卡死?可能是锁表在作怪!快速排查方法在此
MySQL单表卡爆怎么办?从策略到实战,一文掌握「分表」救命技巧
清空MySQL数据表千万别用错!DELETE和TRUNCATE这个区别可能导致重大事故
你的MySQL中文排序一团糟?记住这几点,轻松实现准确拼音排序!
别再混淆Hive和MySQL了!读懂它们的天壤之别,才算摸到大数据的门道