专栏名称: 院长技术
《院长技术》专注于DevOps技术栈研究,云原生、Istio,CICD、Docker、Prometheus、K8s、ServiceMesh、Jenkins、Linux、微服务、分布式存储、监控、日志收集、安全渗透、虚拟化等技术栈。
目录
相关文章推荐
佛山电视台  ·  冲上热搜!演员王某,被警方抓获! ·  昨天  
开平广播电视台  ·  定了!价格大降 ·  2 天前  
广东台今日关注  ·  一地公示涉农补贴,公开6000多人的手机和身 ... ·  4 天前  
佛山电视台  ·  0元打卡!佛山多片花海浪漫盛放🥰 ·  4 天前  
51好读  ›  专栏  ›  院长技术

K8s部署MySQL

院长技术  · 公众号  ·  · 2024-12-08 11:08

正文

在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


2. 编写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







请到「今天看啥」查看全文