第 1 章 简介

MySQL 和 Kubernetes 共享术语。例如,节点可以是 Kubernetes 节点或 MySQL 节点,集群可以是 MySQL InnoDB 集群或 Kubernetes 集群,而 ReplicaSet 是 MySQL 和 Kubernetes 中的功能。本文档倾向于使用长名称,但这些重载的术语仍然可能导致混淆;上下文很重要。

Kubernetes

Kubernetes 系统使用控制器,通过在 Kubernetes 系统中以Pod的形式运行容器化工作负载,来管理其生命周期。控制器是通用工具,为广泛的服务提供功能,但复杂的服务需要额外的组件,这包括 Operator。 Operator是在 Kubernetes 集群中运行的软件,它与 Kubernetes API 交互以观察资源和服务,从而协助 Kubernetes 进行生命周期管理。

适用于 Kubernetes 的 MySQL Operator

适用于 Kubernetes 的 MySQL Operator 是一个专注于管理一个或多个由一组 MySQL 服务器和 MySQL Router 组成的MySQL InnoDB 集群的 Operator。MySQL Operator 本身在 Kubernetes 集群中运行,并由Kubernetes Deployment控制,以确保 MySQL Operator 保持可用并运行。

MySQL Operator 默认部署在“mysql-operator”Kubernetes 命名空间中;并监视 Kubernetes 集群中的所有 InnoDB 集群和相关资源。为了执行这些任务,Operator 订阅 Kubernetes API 服务器以更新事件,并根据需要连接到托管的 MySQL 服务器实例。在 Kubernetes 控制器之上,Operator 配置 MySQL 服务器、使用 MySQL 组复制的复制和 MySQL Router。

MySQL InnoDB 集群

将 InnoDB 集群 (InnoDBCluster) 资源部署到 Kubernetes API 服务器后,适用于 Kubernetes 的 MySQL Operator 将创建以下资源,包括:

  • 用于 MySQL 服务器实例的Kubernetes StatefulSet

    这将管理 Pod 并分配相应的存储卷。此 StatefulSet 管理的每个 Pod 都运行多个容器。其中几个容器提供了一系列初始化步骤,用于准备 MySQL 服务器配置和数据目录,然后两个容器保持活动状态以供操作模式使用。其中一个容器(名为“mysql”)运行 MySQL 服务器本身,另一个容器(名为“sidecar”)是一个 Kubernetes Sidecar,负责与 Operator 本身协调管理节点的本地管理。

  • 用于 MySQL Router 的Kubernetes Deployment

    MySQL Router 是无状态服务,根据应用程序的选择将应用程序路由到当前的主节点或副本节点。Operator 可以根据集群工作负载的需要向上或向下扩展 Router 的数量。

MySQL InnoDB 集群部署会创建以下Kubernetes 服务

  • 一个服务是 InnoDB 集群的名称。它充当应用程序的主要入口点,并将传入连接发送到 MySQL Router。它们以“{clustername}.svc.cluster.local”的形式提供稳定的名称,并公开特定的端口。

    另请参阅第 3.4 节“MySQL InnoDB 集群服务说明”第 5 章“连接到 MySQL InnoDB 集群”

  • 名为“{clustername}-instances”的第二个服务为各个服务器提供稳定的名称。通常不应直接使用这些名称;而是使用主服务根据需要可靠地访问当前的主节点或辅助节点。但是,出于维护或监控目的,可能需要直接访问实例。每个 Pod 实例都安装了 MySQL Shell。

适用于 Kubernetes 的 MySQL Operator 会创建和管理不应手动修改的其他资源,包括:

适用于 Kubernetes 的 MySQL Operator 架构

图 1.1 适用于 Kubernetes 的 MySQL Operator 架构图

Contains a detailed diagram of the MySQL Operator for Kubernetes