如何在 Kubernetes 中部署 MySQL 数据库

MySQL 数据库是一种常用的关系型数据库,许多应用程序都需要使用到它。在 Kubernetes 环境中,我们可以使用 Kubernetes 的资源管理能力来部署和管理 MySQL 数据库,以实现高可用性和弹性扩展。

本文将介绍如何在 Kubernetes 中部署 MySQL 数据库,包括创建 MySQL 镜像、创建 Kubernetes 部署和服务、配置 MySQL 数据库等内容。

创建 MySQL 镜像

首先,我们需要创建 MySQL 镜像,可以使用 Dockerfile 来构建镜像。以下是一个简单的 Dockerfile 示例:

FROM mysql:5.7

ENV MYSQL_ROOT_PASSWORD=root
ENV MYSQL_DATABASE=test
ENV MYSQL_USER=test
ENV MYSQL_PASSWORD=test

COPY ./init.sql /docker-entrypoint-initdb.d/

这个 Dockerfile 基于 MySQL 5.7 镜像创建一个新的镜像,并设置了一些环境变量,包括 root 用户的密码、数据库名称、用户名和密码。此外,还将 init.sql 文件复制到容器的 /docker-entrypoint-initdb.d/ 目录下,这个文件将在容器启动时执行,用于初始化数据库。

创建 Kubernetes 部署和服务

接下来,我们需要创建 Kubernetes 部署和服务,用于部署 MySQL 容器和提供访问服务。以下是一个 Kubernetes 部署和服务的示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: root
        - name: MYSQL_DATABASE
          value: test
        - name: MYSQL_USER
          value: test
        - name: MYSQL_PASSWORD
          value: test
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim
---
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  selector:
    app: mysql
  ports:
  - name: mysql
    port: 3306
    targetPort: 3306
  type: ClusterIP

这个 Kubernetes 部署和服务会创建一个 MySQL 容器和一个 ClusterIP 类型的服务。容器使用上面创建的 MySQL 镜像,并设置了一些环境变量和端口映射。此外,还挂载了一个名为 mysql-persistent-storage 的持久化存储卷,用于保存 MySQL 数据库文件。

服务使用了 selector 来选择标签为 app=mysql 的容器,并将容器的 3306 端口映射到了服务的 3306 端口。

配置 MySQL 数据库

在 MySQL 容器启动后,我们需要进入容器内部进行配置。以下是一个示例的 init.sql 文件:

CREATE TABLE test (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(20) NOT NULL
);

INSERT INTO test (name) VALUES ('test1');
INSERT INTO test (name) VALUES ('test2');
INSERT INTO test (name) VALUES ('test3');

这个 init.sql 文件会创建一个名为 test 的表,并插入了三条测试数据。

使用 kubectl 命令进入 MySQL 容器内部:

然后登录 MySQL 数据库:

输入上面设置的 root 用户密码后,就可以进入 MySQL 数据库了。接下来,执行以下命令来创建 test 数据库和表:

CREATE DATABASE test;
USE test;
SOURCE /docker-entrypoint-initdb.d/init.sql;

这个命令会先创建 test 数据库,然后使用 test 数据库,并执行 init.sql 文件中的 SQL 语句,创建 test 表和插入测试数据。

总结

本文介绍了如何在 Kubernetes 中部署 MySQL 数据库,包括创建 MySQL 镜像、创建 Kubernetes 部署和服务、配置 MySQL 数据库等内容。通过使用 Kubernetes 的资源管理能力,我们可以实现 MySQL 数据库的高可用性和弹性扩展,为应用程序提供更稳定和可靠的数据存储服务。

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