基于k8s部署mysql集群
时间: 2023-09-19 13:12:11 浏览: 115
k8s实践之mysql集群搭建
要基于 Kubernetes 部署 MySQL 集群,可以使用 StatefulSet 来管理 MySQL 的实例。以下是一个简单的部署 MySQL 集群的示例。
1. 创建 StatefulSet
首先,你需要创建一个 StatefulSet,它将负责管理 MySQL 实例的创建和维护。在 StatefulSet 中,你需要定义一个容器模板,用于创建每个 MySQL 实例的容器。
```yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
serviceName: mysql
replicas: 3
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
value: rootpassword
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
```
在上面的 YAML 文件中,我们定义了一个名为 mysql 的 StatefulSet,并指定了服务名称为 mysql。我们还指定了 3 个副本,因此 StatefulSet 将创建三个 MySQL 实例。我们还定义了一个容器模板,该模板使用 MySQL 5.7 镜像,并将 MySQL 的 root 密码设置为 rootpassword。容器模板还定义了一个名为 mysql 的端口,并将 /var/lib/mysql 挂载到名为 mysql-persistent-storage 的持久卷上。
2. 创建 PersistentVolumeClaim
接下来,我们需要创建一个 PersistentVolumeClaim(PVC)用于持久化 MySQL 的数据。在 Kubernetes 中,PVC 用于声明需要的存储资源,并由 Kubernetes 自动创建相应的 PersistentVolume(PV)。在下面的 YAML 文件中,我们创建了一个名为 mysql-pv-claim 的 PVC。
```yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
```
在上面的 YAML 文件中,我们定义了一个名为 mysql-pv-claim 的 PVC,并请求 10GB 存储空间。
3. 创建 Service
最后,我们需要创建一个 Service,用于将客户端请求路由到正确的 MySQL 实例。在下面的 YAML 文件中,我们创建了一个名为 mysql 的 Service。
```yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
clusterIP: None
selector:
app: mysql
ports:
- name: mysql
port: 3306
```
在上面的 YAML 文件中,我们定义了一个名为 mysql 的 Service,并将其类型设置为 ClusterIP。我们还指定了一个名为 mysql 的端口,并将其映射到 MySQL 容器的 3306 端口。最后,我们使用 selector 将 Service 与 StatefulSet 关联起来。
4. 运行 YAML 文件
现在,你可以运行上面的 YAML 文件,以创建 MySQL 集群。使用以下命令运行 YAML 文件。
```shell
kubectl apply -f mysql.yaml
```
这将创建一个名为 mysql 的 StatefulSet、一个名为 mysql-pv-claim 的 PVC 和一个名为 mysql 的 Service。
完成后,你可以使用以下命令检查 StatefulSet 是否正确运行。
```shell
kubectl get statefulset mysql
```
你可以使用以下命令检查 MySQL 实例是否正确创建。
```shell
kubectl get pods -l app=mysql
```
最后,使用以下命令获取 Service 的 Cluster IP。
```shell
kubectl get svc mysql
```
现在,你可以使用 Cluster IP 连接到 MySQL 集群并执行查询。
阅读全文