当前位置: 首页 > backend >正文

K8s部署MySQL8.0数据库

Kubernetes 部署 MySQL 8.0 专业指南

🧩 完整部署方案

1. 创建专用命名空间

kubectl create namespace database

2. 配置持久化存储

# mysql-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-pvcnamespace: database
spec:accessModes:- ReadWriteOncestorageClassName: standard # 根据集群存储类调整resources:requests:storage: 10Gi

3. 安全凭证配置(Secret)

kubectl create secret generic mysql-secrets -n database \--from-literal=mysql-root-password='YourStrongRootPass!123' \--from-literal=mysql-password='YourUserPass!456'

4. 部署 MySQL StatefulSet

# mysql-statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysqlnamespace: database
spec:serviceName: mysqlreplicas: 1selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- name: mysqlimage: mysql:8.0env:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:name: mysql-secretskey: mysql-root-password- name: MYSQL_PASSWORDvalueFrom:secretKeyRef:name: mysql-secretskey: mysql-password- name: MYSQL_USERvalue: "appuser"- name: MYSQL_DATABASEvalue: "appdb"ports:- containerPort: 3306name: mysqlvolumeMounts:- name: mysql-persistent-storagemountPath: /var/lib/mysqlresources:requests:memory: "512Mi"cpu: "0.5"limits:memory: "1Gi"cpu: "1"livenessProbe:exec:command: ["mysqladmin", "ping", "-h", "localhost"]initialDelaySeconds: 30periodSeconds: 10readinessProbe:exec:command: ["mysql", "-uappuser", "-p${MYSQL_PASSWORD}", "-e", "SELECT 1"]initialDelaySeconds: 5periodSeconds: 5volumes:- name: mysql-persistent-storagepersistentVolumeClaim:claimName: mysql-pvc

5. 创建 MySQL 服务

# mysql-service.yaml
apiVersion: v1
kind: Service
metadata:name: mysqlnamespace: database
spec:selector:app: mysqlports:- protocol: TCPport: 3306targetPort: mysqlclusterIP: None # Headless Service

🔒 高级安全配置

1. 加密通信(TLS)

# 生成证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \-keyout mysql.key -out mysql.crt -subj "/CN=mysql.database.svc.cluster.local"# 创建 Kubernetes Secret
kubectl create secret tls mysql-tls -n database \--cert=mysql.crt \--key=mysql.key

2. 在 StatefulSet 中添加 TLS 配置

# 在容器配置中添加
volumeMounts:
- name: tls-certsmountPath: "/etc/mysql/certs"readOnly: true# 在volumes部分添加
volumes:
- name: tls-certssecret:secretName: mysql-tlsdefaultMode: 0400# 在env中添加
- name: MYSQL_SSL_CERTvalue: "/etc/mysql/certs/tls.crt"
- name: MYSQL_SSL_KEYvalue: "/etc/mysql/certs/tls.key"

⚙️ 配置优化

1. 自定义 MySQL 配置

# 创建 ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:name: mysql-confignamespace: database
data:my.cnf: |[mysqld]innodb_buffer_pool_size = 512Mmax_connections = 200character-set-server = utf8mb4collation-server = utf8mb4_unicode_cidefault_authentication_plugin = mysql_native_passwordskip-name-resolvelog-bin = mysql-binserver-id = 1binlog_format = ROWtransaction_isolation = READ-COMMITTED

2. 在 StatefulSet 中挂载配置

volumeMounts:
- name: mysql-configmountPath: /etc/mysql/conf.d/my.cnfsubPath: my.cnfvolumes:
- name: mysql-configconfigMap:name: mysql-config

🔄 高可用方案(主从复制)

1. 主库配置(StatefulSet 0)

env:
- name: MYSQL_REPLICATION_MODEvalue: "master"
- name: MYSQL_REPLICATION_USERvalue: "repl"
- name: MYSQL_REPLICATION_PASSWORDvalueFrom:secretKeyRef:name: mysql-secretskey: mysql-repl-password

2. 从库配置(StatefulSet 1+)

env:
- name: MYSQL_REPLICATION_MODEvalue: "slave"
- name: MYSQL_MASTER_HOSTvalue: "mysql-0.mysql.database.svc.cluster.local"
- name: MYSQL_MASTER_PORTvalue: "3306"
- name: MYSQL_REPLICATION_USERvalue: "repl"
- name: MYSQL_REPLICATION_PASSWORDvalueFrom:secretKeyRef:name: mysql-secretskey: mysql-repl-password

📊 监控配置(Prometheus)

1. 启用 MySQL Exporter

# 在 StatefulSet 中添加 sidecar 容器
- name: mysql-exporterimage: prom/mysqld-exporter:v0.14.0env:- name: DATA_SOURCE_NAMEvalue: "exporter:ExporterPass123@(localhost:3306)/"ports:- containerPort: 9104name: metrics

2. ServiceMonitor 配置

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:name: mysql-monitornamespace: database
spec:selector:matchLabels:app: mysqlendpoints:- port: metricsinterval: 30snamespaceSelector:matchNames:- database

🚀 部署命令

# 应用所有配置
kubectl apply -f mysql-pvc.yaml
kubectl apply -f mysql-secrets.yaml
kubectl apply -f mysql-config.yaml
kubectl apply -f mysql-statefulset.yaml
kubectl apply -f mysql-service.yaml
kubectl apply -f mysql-tls.yaml
kubectl apply -f mysql-monitor.yaml# 验证部署
kubectl -n database get pods -l app=mysql
kubectl -n database logs mysql-0 -c mysql

🔧 维护操作

1. 数据库备份

# 创建备份任务
kubectl -n database exec mysql-0 -- \mysqldump -u root -p$MYSQL_ROOT_PASSWORD --all-databases | gzip > mysql-backup-$(date +%F).sql.gz

2. 数据库恢复

gunzip < mysql-backup-2023-08-15.sql.gz | kubectl -n database exec -i mysql-0 -- \mysql -u root -p$MYSQL_ROOT_PASSWORD

3. 版本升级

# 滚动更新策略
kubectl -n database patch statefulset mysql \-p '{"spec":{"updateStrategy":{"type":"RollingUpdate"}}}'# 更新镜像版本
kubectl -n database set image statefulset/mysql mysql=mysql:8.0.33

💡 最佳实践建议

  1. 资源隔离
    • 使用专用节点池(taints/tolerations)
    • 配置 PodDisruptionBudget
  2. 安全加固
    • 启用网络策略限制访问
    • 定期轮换数据库凭证
  3. 性能优化
    • 使用本地 SSD 存储
    • 调整 InnoDB 缓冲池大小
  4. 灾难恢复
    • 配置定期快照备份
    • 部署跨可用区副本

📊 监控指标关键项

指标正常范围告警阈值
连接数< 最大连接数80%> 90%
QPS根据业务负载突增300%
缓冲池命中率> 95%< 90%
复制延迟< 1s> 5s
磁盘空间< 80%> 90%

通过此方案,您将在 Kubernetes 上获得一个生产级、高可用的 MySQL 8.0 部署,具备完善的安全防护、监控告警和灾备能力。

http://www.xdnf.cn/news/18577.html

相关文章:

  • 【大语言模型 17】高效Transformer架构革命:Reformer、Linformer、Performer性能突破解析
  • Baumer高防护相机如何通过Tiny-YOLO单类模型实现人体跌倒检测与跟踪(C#代码UI界面版)
  • 从 UMG 到 Unreal 引擎深层的 UI 定制艺术:Slate 底层 UI 框架简介
  • Python爬虫-解决在抓包的过程中,找不到接口地址的问题
  • 『深度编码』操作系统-进程之间的通信方法
  • 使用dumpbin指令分析Windows下的PE文件(伍)
  • 跨语言文化的统一语义真理:存在性、形式化及其对自然语言处理(NLP)深层语义分析的影响
  • Transformer实战(13)——从零开始训练GPT-2语言模型
  • Redis--day12--黑马点评--附近商铺用户签到UV统计
  • Trip Footprint_Trae Solo模式生成一个旅行足迹App
  • 【卷积神经网络详解与实例】2——卷积计算详解
  • 大模型训练方法全面解析:SFT、RFT、TRPO、DPO、PPO、GRPO、RLH、RLHF技术深度剖析
  • 14.Shell脚本修炼手册--玩转循环结构(While 与 Until 的应用技巧与案例)
  • 题解:P13754 【MX-X17-T3】Distraction_逆序对_前缀和_Ad-hoc_算法竞赛C++
  • java猜数字游戏(赌城主题版)
  • priority_queue和仿函数
  • 【CSP初赛】程序阅读3
  • (一)算法(big O/)
  • 一种解决使用 PotPlayer 播放 Alist 的 Webdav 时提示 无法在 FTP/WebDAV/HTTP 上修改该文件夹 的方法
  • QT-Mysql-查询语句-查询是否有表-表列名-查询记录
  • 【AI基础:神经网络】16、神经网络的生理学根基:从人脑结构到AI架构,揭秘道法自然的智能密码
  • TensorFlow 深度学习 开发环境搭建
  • Java和数据库的关系
  • Ubuntu 的 apt-get 强制使用 IPv4 网络
  • How to Use Managed Identity with ACS?
  • XCVU13P-2FHGB2104E Xilinx(AMD)Virtex UltraScale+ FPGA
  • MySQL索引原理与优化全解析
  • 55.Redis搭建主从架构
  • ANSI终端色彩控制知识散播(II):封装的层次(Python)——不同的逻辑“一样”的预期
  • 【C初阶】自定义类型--结构体