在 Kubernetes 上部署 MySQL {指南}


MySQL 是当今最流行的关系数据库管理系统之一,在 Kubernetes 上运行它可以提供高度可扩展和灵活的解决方案来管理您的数据库工作负载。在本指南中,我们将引导您完成在 Kubernetes 上部署 MySQL 的过程,从设置 Kubernetes 集群到创建 MySQL 部署、添加持久性存储以及使用服务公开部署。

我们将使用 YAML 文件来定义 Kubernetes 资源,并且我们还将提供每个步骤的详细解释和示例。无论您是 Kubernetes 新手还是经验丰富的用户,本指南都将为您提供部署和管理 Kubernetes 上 MySQL 所需的知识和工具。

在 Kubernetes 上部署 MySQL 的先决条件

  • 对 Kubernetes 概念的基本理解,例如 Pod、服务、部署和持久卷。

  • 已启动并运行的 Kubernetes 集群。这可以是托管的 Kubernetes 服务,例如 GKE、EKS 或 AKS,也可以是使用 kubeadm 或 kops 的自托管集群。

  • 在本地计算机上安装 kubectl 命令行工具,用于与 Kubernetes API 服务器交互。

  • 在本地计算机上安装 Docker,用于构建和将 Docker 镜像推送到容器注册表。

  • 访问容器注册表以存储您的 Docker 镜像。

  • 对 YAML 语法(用于定义 Kubernetes 资源)的基本了解。

  • 在您的 Kubernetes 集群上安装持久卷提供程序,例如 AWS Elastic Block Store (EBS)、Google Cloud Persistent Disk (PD) 或 Azure Disk。

  • 可选:如果计划从 Kubernetes 集群外部访问 MySQL 服务器,则配置允许外部流量访问服务的防火墙规则。

步骤 1:设置 Kubernetes

在 Kubernetes 上部署 MySQL 之前,我们需要设置一个 Kubernetes 集群。这可以使用托管的 Kubernetes 服务(如 Google Kubernetes Engine (GKE)、Amazon Elastic Kubernetes Service (EKS) 或 Microsoft Azure Kubernetes Service (AKS))来完成。或者,您可以使用 kubeadm 或 kops 等工具设置您自己的 Kubernetes 集群。

一旦您启动并运行了 Kubernetes 集群,您将需要安装 kubectl 命令行工具,该工具用于与 Kubernetes API 服务器交互。

步骤 2:创建 MySQL 部署

要在 Kubernetes 上部署 MySQL,我们将使用 Deployment 对象,这是一个更高级别的抽象,它管理 Pod 的一组副本。Pod 包含 MySQL 容器以及任何必要的配置。

这是一个用于创建 MySQL 部署的示例 YAML 文件:

data-lang="python">
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:8.0.23
      env:
      - name: MYSQL_ROOT_PASSWORD
       value: yourpassword
      ports:
      - containerPort: 3306
       volumeMounts:
       - name: mysql-persistent-storage
        mountPath: /var/lib/mysql
    volumes:
     - name: mysql-persistent-storage
      persistentVolumeClaim:
      claimName: mysql-pvc

此 YAML 文件描述了一个名为“mysql-deployment”的 MySQL 部署,它具有单个副本。MySQL 容器使用带有 8.0.23 版本的官方 MySQL Docker 镜像。它还指定了一个环境变量 MYSQL_ROOT_PASSWORD,它设置 MySQL 服务器的 root 密码。容器侦听端口 3306,这是 MySQL 的默认端口。

Deployment 还指定了一个名为“mysql-persistent-storage”的 volumeMount,它将持久卷安装到容器的 /var/lib/mysql 目录。卷在 volumes 部分中定义,它引用名为“mysql-pvc”的 PersistentVolumeClaim。

步骤 3:创建 PersistentVolumeClaim

默认情况下,MySQL Pod 没有持久性存储,这意味着如果 Pod 被删除或重新创建,则 Pod 中存储的任何数据都将丢失。要向 MySQL Pod 添加持久性存储,我们需要创建一个 PersistentVolumeClaim (PVC) 并将其附加到 Pod。

这是一个用于创建 PVC 的示例 YAML 文件:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
spec:
  accessModes:
   - ReadWriteOnce
  resources:
   requests:
    storage: 1Gi

此 YAML 文件描述了一个名为“mysql-pvc”的 PVC,它请求 1GB 的存储空间,并具有 ReadWriteOnce 访问模式。这意味着该卷可以被集群中的单个节点以读写方式挂载。

步骤 4:使用服务公开 MySQL

要从 Kubernetes 集群外部访问 MySQL 服务器,我们需要创建一个 Service 对象。该服务通过创建可用于连接到 MySQL 服务器的稳定 IP 地址和端口来公开 MySQL 部署。

这是一个用于为 MySQL 创建 Service 对象的示例 YAML 文件:

apiVersion: v1
kind: Service
metadata:
name: mysql-service
spec:
type: ClusterIP
selector:
app: mysql
ports:
- name: mysql
port: 3306
targetPort: 3306

此 YAML 文件描述了一个名为“mysql-service”的服务,它公开了 MySQL 的 3306 端口。它使用 ClusterIP 类型,这为 Kubernetes 集群内的服务提供了一个稳定的 IP 地址。

创建服务后,您可以使用其 IP 地址和端口从集群外部连接到 MySQL 服务器。如果您在云平台上运行 Kubernetes,则可能需要创建防火墙规则以允许外部流量访问该服务。

步骤 5:测试 MySQL 部署

现在我们已经部署了 MySQL 并使用服务公开它,我们可以测试部署以确保它正常工作。我们可以通过连接到 MySQL 服务器并创建测试数据库来做到这一点。

要连接到 MySQL 服务器,您可以使用以下命令:

$ kubectl run -it --rm --image=mysql:5.7 --restart=Never mysql-client -- mysql -h mysql-service -p

此命令创建一个运行 MySQL 客户端的新 Pod,并使用服务 IP 地址将其连接到 MySQL 服务器。系统将提示您输入 MySQL root 密码,您可以在我们之前创建的密钥中找到它。

连接到 MySQL 服务器后,您可以创建测试数据库和表:

mysql> CREATE DATABASE test;
mysql> USE test;
mysql> CREATE TABLE messages (message VARCHAR(255));

这将创建一个名为“test”的新数据库和一个名为“messages”的表,该表只有一个名为“message”的列。

要验证是否创建了该表,您可以运行以下命令:

mysql> SHOW TABLES;

这将显示当前数据库中的表列表,其中应包含“messages”表。

步骤 6:清理

完成 MySQL 部署测试后,您可以通过运行以下命令删除部署、服务和 PVC:

$ kubectl delete deployment mysql
$ kubectl delete service mysql-service
$ kubectl delete pvc mysql-pvc

这将删除与 MySQL 部署相关的所有资源。

结论

在 Kubernetes 上部署 MySQL 可能是一项复杂的任务,但是使用正确的工具和知识,它可以成为一个简单的过程。通过遵循本指南中概述的步骤,您可以创建一个可靠且可扩展的 Kubernetes 上的 MySQL 部署,以满足应用程序的需求。

请记住始终彻底测试您的部署并监控其性能和可用性。使用 Kubernetes,您可以创建高度可用且可扩展的基础架构,以适应应用程序不断变化的需求。

更新于:2023年6月26日

3K+ 次浏览

开启您的职业生涯

通过完成课程获得认证

开始
广告
© . All rights reserved.