在 Kubernetes 上部署 MySQL

随着云原生时代的到来,Kubernetes 成为了云原生应用的事实标准。在 Kubernetes 上部署数据库是一个不可避免的需求,其中 MySQL 是最常用的数据库之一。本文将分享如何使用 Kubernetes 部署 MySQL,包括如何使用 StatefulSet 和 ConfigMap,以及一些实践经验。

准备工作

在开始之前,您需要熟悉以下工具和概念:

  • Kubernetes:一个跨平台的容器编排引擎,用于部署和管理容器化应用。
  • Docker:一个用于创建、发布和运行容器的开源工具。
  • YAML:一种常用的配置语言,用于描述 Kubernetes 资源的配置。

除此之外,还需要一个 MySQL 的 Docker 镜像。您可以从 Docker Hub 上下载官方的 MySQL 镜像。本文将以版本为 8.0.26 为例。

$ docker pull mysql:8.0.26

部署 MySQL

创建 ConfigMap

在 Kubernetes 上部署 MySQL,首先需要创建一个 ConfigMap 存储 MySQL 的配置信息。在本文中,我们将创建一个名为 mysql-config 的 ConfigMap,并将 MySQL 的配置信息保存在 my.cnf 文件中。

apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-config
data:
  my.cnf: |
    [mysqld]
    server-id=1
    log-bin=mysql-bin
    binlog-format=ROW

创建 StatefulSet

接下来,我们将创建一个 StatefulSet,此 StatefulSet 会创建一个名为 mysql 的 Pod,此 Pod 运行 MySQL 容器,并使用上一步创建的 ConfigMap 初始化 MySQL 容器。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  serviceName: mysql
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:8.0.26
        env:
          - name: MYSQL_ROOT_PASSWORD
            value: password
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysql-conf
          mountPath: /etc/mysql/conf.d
        - name: mysql-data
          mountPath: /var/lib/mysql
  volumeClaimTemplates:
  - metadata:
      name: mysql-data
    spec:
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 10Gi
  volumeClaimTemplates:
  - metadata:
      name: mysql-conf
    spec:
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 1Mi

在此 StatefulSet 中,我们分别定义了一个 mysql-data 和一个 mysql-conf 的 PVC(PersistentVolumeClaim)。其中,mysql-data 用于持久化 MySQL 数据,mysql-conf 用于持久化 MySQL 配置。

部署 StatefulSet 只需要将上面的 YAML 文件保存为 mysql.yaml,并使用以下命令运行即可。

$ kubectl apply -f mysql.yaml

验证 MySQL 安装

运行以下命令,检查 MySQL 的 Pod 是否已经创建,并查看 Pod 的详细信息。

$ kubectl get pods
$ kubectl describe pod mysql-0

在 Pod 中运行以下命令,验证 MySQL 是否已经启动。

$ kubectl exec -it mysql-0 -- mysql -uroot -ppassword

如果看到 MySQL 提示符,则说明 MySQL 已成功启动。

最佳实践

在使用 Kubernetes 部署 MySQL 时,需要注意以下几个最佳实践:

  • 使用 StatefulSet 进行部署,确保每个 Pod 都有一个唯一的标识符,使得每个 Pod 的数据和配置都是持久化的。
  • 为 MySQL 容器设置合适的资源限制,避免过度抢占资源,同时确保系统稳定。
  • 在容器内运行 MySQL 时,应该将重要的配置信息保存在 ConfigMap 中,为容器提供一种可扩展和可配置的方法。

总结

本文介绍了如何使用 Kubernetes 部署 MySQL,同时分享了一些最佳实践。希望本文对您有所启发,并帮助您在实际工作中更好地使用 Kubernetes 部署 MySQL。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65967a6eeb4cecbf2da4b140


纠错反馈