k8s搭建MySQL

Sunday, March 6, 2022

1. 概述

这篇文章是使用k8s搭建MySQL的一个笔记,使用的是 Bitnami 的 helm chart

2. 准备工作

收集日志前先列出当前的服务器环境,规划下部署方案,K8s节点列表如下所示,计划将 MySQL 安装在 node1(label: usefulness=devops) 上。

节点 角色 IP 配置 Label
master master, etcd 192.168.1.100 4核4G50G usefulness=schedule
node1 worker 192.168.1.101 16核32G100G usefulness=devops
node2 worker 192.168.1.102 8核8G100G usefulness=business
node3 worker 192.168.1.103 8核8G100G usefulness=business

3. 开始部署

这次部署我们使用的是 Bitnami 的 Charts 文件,因此需要先增加官方的仓库地址,如下:

helm repo add bitnami https://charts.bitnami.com/bitnami

3.1 域名

由于我的集群中,traefik 部署在 node1(192.168.1.101) 上,因此需要将网关的域名解析到 node1 上。

cat >> /etc/hosts <<EOF
192.168.1.101 es.local.com
192.168.1.101 kibana.local.com
EOF

3.2 命名空间

创建 devops 命名空间,包含 各种各样学习用的第三方服务或中间件。

apiVersion: v1
kind: Namespace
metadata:
  name: devops

上述内容保存为 devops.yaml,执行以下命令部署:

kubectl apply -f devops.yaml

3.3 部署

Helm 安装

MySQL 8.0 之后去掉了 master/slave 的概念,改为了 primary/secondary 概念,这里 primary 部署一个服务,secondary 部署两个,另外为了方便集群外访问,开启了两个 NodePort,primary 使用 3306, secondary 使用 13306,详细的配置参见文档

architecture: replication
auth:
  rootPassword: cJ72gt6loC0=
  database: dev
  username: dev
  password: bE6aXlJNrz8=
primary:
  nodeSelector:
    usefulness: devops
  service:
    type: NodePort
    nodePort: 3306
secondary:
  replicaCount: 2
  nodeSelector:
    usefulness: devops
  service:
    type: NodePort
    nodePort: 13306

安装命令:

helm install mysql bitnami/mysql -n devops -f values.yaml

4. 总结

这篇文章是使用k8s搭建MySQL的一个小记,内容简单就不过多阐述。

Kubernetes Kubernetes MySQL

canal学习及k8s集群部署Etcd服务注册发现实例