k8s下搭建mysql高可用_在K8S集群中一步步构建一个复杂的MySQL数据库

这篇博客面向容器初学者,详细介绍了如何在Kubernetes(K8S)集群中搭建一个从简单到复杂的MySQL高可用数据库。首先,通过创建Deployment和Service,部署一个基本的MySQL单实例。接着,通过添加持久化存储、自定义配置、加密敏感数据、初始化容器和健康检查,逐步提升数据库的可用性和安全性。最后,通过CronJob实现定时自动备份,确保数据安全。整个过程覆盖了K8S的多个关键功能,为生产环境提供了实用的参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文档说明

​ 本文面向容器初学者,作者先简单的用MySQL官方镜像搭建一个可运行的单实例数据库,而后考虑生产或现实需求,一步一步完善并揉合K8S多个技术,从而构建一个复杂且可供生产用的MySQL单实例库。

简单部署

​ 如下所示,我们仅需设置root用户密码(环境变量MYSQL_ROOT_PASSWORD), 便可轻松的使用MySQL官方镜像构建一个MySQL数据库。

# kubectl create -f - <

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

labels:

app: mysql

name: mysql

spec:

replicas: 1

selector:

matchLabels:

app: mysql

template:

metadata:

labels:

app: mysql

spec:

containers:

- image: mysql

name: mysql

imagePullPolicy: IfNotPresent

env:

- name: MYSQL_ROOT_PASSWORD

value: Changeme

EOF

​ 注意:若你的K8S集群是minishift、openshift、origin,因其为安全考虑,不允许容器以root用户运行,而官方MySQL镜像却需root权限,故为使其能顺利运行,我们需将anyuid scc赋予default serviceaccount:

# oc adm policy add-scc-to-user anyuid -z default

​ 创建一Service以便集群内外均可访问数据库,其中集群外需通过nodePort设置的30006端口访问。

# kubectl create -f - <

apiVersion: v1

kind: Service

metadata:

labels:

app: mysql

name: mysql

spec:

type: NodePort

ports:

- port: 3306

nodePort: 30006

protocol: TCP

targetPort: 3306

selector:

app: mysql

EOF

​ 接着,访问数据库并验证其运行正常:

# kubectl get pod # 当前Pod名称

NAME READY STATUS RESTARTS AGE

mysql-5b5668c448-t44ml 1/1 Running 0 3h

# 通过本机访问

# kubectl exec -it mysql-5b5668c448-t44ml -- mysql -uroot -pChangeme

mysql> select 1;

+---+

| 1 |

+---+

| 1 |

+---+

# 集群内部通过mysql service访问:

# kubectl exec -it mysql-5b5668c448-t44ml -- mysql -uroot -pChangeme -hmysql

mysql> select now();

+---------------------+

| now() |

+---------------------+

| 2018-05-21 07:19:14 |

+---------------------+

# 集群外部,可通过任何一个K8S节点访问数据库:

# mysql -uroot -pChangeme -horigin-lb-01 -P30006

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| sys |

+--------------------+

扩展部署

持久化存储

​ 若要确保MySQL重启后数据仍然存在,我们需为其配置可持久化存储,作者的实验环境配置了GlusterFS分布式存储,其支持K8S动态提供特性,故可执行如下命令创建PVC:

# kubectl create -f - <

kind: PersistentVolumeClaim

apiVersion: v1

metadata:

name: mysql

spec:

accessModes:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值