在 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 镜像。
了解用于定义 Kubernetes 资源的 YAML 语法。
在 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 文件 -
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 的默认端口。
该部署还指定了一个名为"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 服务器,我们需要创建一个服务对象。该服务通过创建可用于连接到 MySQL 服务器的稳定 IP 地址和端口来公开 MySQL 部署。
以下是用于为 MySQL 创建服务对象的示例 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 密码,您可以在我们之前创建的 secret 中找到该密码。
连接到 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,您可以创建高可用性、可扩展的基础架构,以适应应用程序不断变化的需求。
相关文章
有用资源
linux 参考教程 - 该教程包含有关 linux 的更多信息:https://www.cainiaomax.com/linux/

