K8s部署MySQL

在Kubernetes(简称K8s)上部署MySQL通常涉及以下几个步骤:创建MySQL的Docker镜像(或使用现有的镜像)、编写Kubernetes配置文件(YAML文件)、应用这些配置以创建Pod、Service、Persistent Volume(持久卷)和Persistent Volume Claim(持久卷声明)。

  1. 准备MySQL Docker镜像

虽然你可以自己构建MySQL Docker镜像,但通常直接使用官方的MySQL镜像会更加方便。

【bash】

docker pull mysql:latest

  1. 编写Kubernetes配置文件

你需要编写几个YAML文件来定义MySQL的部署。

a. 创建MySQL Deployment

创建一个名为mysql-deployment.yaml的文件,内容如下:

【yaml】

apiVersion: apps/v1

kind: Deployment

metadata:

name: mysql-deployment

spec:

replicas: 1

selector:

matchLabels:

app: mysql

template:

metadata:

labels:

app: mysql

spec:

containers:

  • name: mysql

image: mysql:latest

env:

  • name: MYSQL_ROOT_PASSWORD

value: your_password_here # 替换为你的MySQL root密码

ports:

  • containerPort: 3306

volumeMounts:

  • name: mysql-data

mountPath: /var/lib/mysql

volumes:

  • name: mysql-data

emptyDir: {} # 使用emptyDir作为临时存储,生产环境建议使用Persistent Volume

注意:emptyDir仅适用于测试或开发环境,因为它在Pod被删除时会丢失数据。生产环境中应使用Persistent Volume。

b. 创建MySQL Service

创建一个名为mysql-service.yaml的文件,内容如下:

【yaml】

apiVersion: v1

kind: Service

metadata:

name: mysql-service

spec:

selector:

app: mysql

ports:

  • protocol: TCP

port: 3306

targetPort: 3306

clusterIP: None # 如果需要ClusterIP类型的Service,则移除这一行

如果你不需要ClusterIP类型的Service(例如,如果你只从Pod内部访问MySQL),可以使用ClusterIP: None来创建一个Headless Service,这通常与StatefulSet一起使用以实现更高级的状态管理。

c. (可选)创建Persistent Volume和Persistent Volume Claim

为了在生产环境中持久存储MySQL数据,你需要创建Persistent Volume(PV)和Persistent Volume Claim(PVC)。

pv.yaml示例:

【yaml】

apiVersion: v1

kind: PersistentVolume

metadata:

name: mysql-pv

spec:

capacity:

storage: 10Gi

accessModes:

  • ReadWriteOnce

persistentVolumeReclaimPolicy: Retain

nfs:

path: /path/to/nfs/share # 替换为你的NFS路径

server: nfs-server.example.com # 替换为你的NFS服务器地址

pvc.yaml示例:

【yaml】

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: mysql-pvc

spec:

accessModes:

  • ReadWriteOnce

resources:

requests:

storage: 10Gi

在mysql-deployment.yaml中,将emptyDir替换为PVC引用:

【yaml】

volumeMounts:

  • name: mysql-data

mountPath: /var/lib/mysql

volumes:

  • name: mysql-data

persistentVolumeClaim:

claimName: mysql-pvc

  1. 应用Kubernetes配置

使用kubectl命令应用上述YAML文件:

【bash】

kubectl apply -f mysql-deployment.yaml

kubectl apply -f mysql-service.yaml

如果你创建了PV和PVC,也需要应用它们

kubectl apply -f pv.yaml

kubectl apply -f pvc.yaml

  1. 验证部署

你可以使用以下命令查看Pod和服务是否成功创建:

【bash】

kubectl get pods

kubectl get services

你还可以使用kubectl logs命令查看MySQL Pod的日志,确保MySQL服务正在运行。

【bash】

kubectl logs

注意事项

• 在生产环境中,请确保使用强密码并配置适当的MySQL用户权限。

• 使用Persistent Volume来持久存储MySQL数据。

• 考虑使用StatefulSet来部署MySQL,以实现更好的状态管理和Pod重新调度。

• 监控MySQL的性能和资源使用情况,确保集群的稳定性和性能。

相关推荐
Decay__13 小时前
VMware 安装 SQL Server 双节点 AlwaysOn 可用性组教程 —— WSFC、AG 与侦听器完整部署(系列核心篇)
运维·数据库·sql·mysql·架构
小此方19 小时前
Re:Mysql数据库基础篇(十二):什么是事务、事务解决了什么问题、事务的四大属性、事务的操作方式
数据库·mysql
csdn_aspnet19 小时前
macOS 10 、Docker 玩轉 MySQL
运维·mysql·macos·docker·容器·mac
王中阳Go20 小时前
100 件货卖出 116 件,库存停在 -16
后端·mysql·go
nice_lcj5201 天前
MySQL 存储引擎入门:InnoDB 和 MyISAM 到底怎么选
java·数据库·mysql·面试·innodb·存储引擎·myisam
xixingzhe21 天前
mysql全量、增量备份
数据库·mysql
隔窗听雨眠1 天前
MySQL三表JOIN执行内核与优化器决策机制
数据库·mysql·sql优化
Decay__2 天前
SQLServer 索引与 SQL 优化 —— 聚集索引、非聚集索引、覆盖索引、碎片维护与执行计划
运维·数据库·sql·mysql·架构
java_logo2 天前
Docker 部署 DeepSeek Harness(moelin):轻松搭建带登录的本地 AI Agent 平台
运维·docker·容器·ai agent·deepseek·harness·轩辕镜像
xbzb2 天前
容器 IP 每次重建都变?docker network 五种模式与自定义网桥固定地址
网络·docker·容器·ip·network·固定