用Minkube在Kubernetes上探索MySQL在这篇博文中,我将展示如何安装与mysql兼容的<一个href="//m.doggingzone.com/doc/kubernetes-operator-for-pxc/index.html">雷竞技下载官网Percona XtraDB Cluster (PXC) Operator在Minikube以及执行一些基本的操作。我绝不是Kubernetes专家,这篇博客文章是我为本地MySQL Meetup做准备的探索的结果,所以如果你对如何做得更好有一些评论或建议,请评论!

在我的实验中,我使用<一个href="https://minikube.sigs.k8s.io/docs/start/">Minikube版本1.26<一个href="https://minikube.sigs.k8s.io/docs/drivers/docker/">码头工人司机在Ubuntu 22.04 LTS的最基本安装中,尽管它也应该与其他组合一起工作。您还可以找到官方的“在Minikube上运行Percona XtraDB集群”文雷竞技下载官网档<一个href="//m.doggingzone.com/doc/kubernetes-operator-for-pxc/minikube.html">在这里

你还需要kubectl安装为了使本教程有效。或者,你可以使用"minikube kubectl而不是"kubectl的例子。

您还需要安装MySQL客户端,“jq”和sysbench实用程序。

我还将在本教程中使用的命令和Yaml配置放在minikube-pxc-tutorialGitHub库

在Minikube中启用度量服务器

由于我们可能希望在某些实验中查看资源使用情况,因此可以考虑启用度量服务器插件这是通过运行完成的:

在Kubernetes上安装和运行基本的MySQL

如果你使用雷竞技下载官网Percona XtraDB集群操作符对于你的MySQL部署在Kubernetes上,你需要做的第一件事是安装这个操作符:

接下来,我们可以创建我们的集群,我们称之为“minimal-cluster”:

注意,这个命令的完成并不意味着集群已经准备好,可以操作了,而是启动了进程,可能需要一些时间才能完成。您可以通过运行以下命令来验证它是否已配置并准备好操作:

您可以看到三个pod正在运行——一个是MySQL (Percona XtraDB集群),一个是pxc-雷竞技下载官网0节点,一个是HAproxy HAproxy -0节点,它用于为“真实”集群提供高可用性,其中有多个集群节点正在运行。

如果您不想尝试高可用性选项,那么对于基本的开发任务来说,这样的单节点部署就足够了。

雷竞技下载官网解释了MySQL自定义资源清单的Percona操作符

在进一步讨论之前,让我们先看看刚刚部署的YAML文件,看看其中有什么内容。有关支持的选项的完整列表,请参阅文档

此资源定义对应于Percona XtraDB Cluster Operator 雷竞技下载官网version 1.11我们的集群将被命名minimal-cluster。

再一次,我们指定了自定义资源定义的版本和这个集群将使用的“secrets”资源的名称。为了方便起见,它来源于集群名称,但实际上可以是任何名称。

我们正在部署一个单节点集群(一开始),它被认为是一个不安全的配置,因此需要允许一个不安全的配置,这样的部署才能成功。对于生产部署,您不应该允许不安全的配置,除非您确实知道自己在做什么。

该部分每天早上4点自动检查更新,并在可用的情况下执行推荐版本的升级。

PXC是这个pod的主容器,它包含集群本身——我们需要将数据存储在一个持久卷上,所以我们在这里定义它。使用默认卷请求6GB的容量大小参数定义要提供多少个节点图像要部署哪个特定的Percona XtraDB群集映像雷竞技下载官网。

部署HAProxy来管理集群的高可用性。我们只部署了一个用于测试。但是在生产中,您至少需要两个以确保没有单点故障。

从Percona XtraDB Cluste雷竞技下载官网r容器收集日志,这样即使该容器被销毁,日志也会被持久化。

访问您提供的MySQL服务器<年代pan style="font-weight: 400;">

但是我们如何访问我们新提供的MySQL/Percona XtraDB集群实例呢?雷竞技下载官网

默认情况下,出于安全考虑,该实例在Kubernetes集群之外是不可访问的,这意味着在Minikube环境之外,但在我们的情况下,如果我们想要它,我们需要公开它:

我们可以通过运行以下命令查看该命令的结果:

与其他只能在Kubernetes集群内访问的服务(因此是ClusterIP类型)不同,我们的“mysql-test服务具有NodePort类型,这意味着它在本地节点的端口上公开。在我们的例子中,端口3306 (MySQL监听的标准端口)被映射到端口30504。

注意IP10.108.103.151这里提到的是内部集群IP,不可访问。要找出你应该利用哪个IP,你可以使用:

尽管这不是一个HTTP协议服务,URL在显示我们可以用来访问MySQL的IP和端口方面是非常有用的。

除了运行“expose service命令”进行公开,您还可以设置haproxy.serviceType = NodePort在清单。

接下来,我们需要MySQL密码!为了保证安全,Percona Operator雷竞技下载官网 MySQL没有默认密码,而是生成一个唯一的安全密码,存储在Kubernetes Secrets中。事实上,这里创建了两个秘密:一个用于内部使用,另一个用于用户访问-这是我们将使用的秘密:

让我们更深入地了解最小集群的秘密:

我们可以看到MySQL雷竞技下载官网的Percona Operator创建了许多用户,并将他们的密码存储在Kubernetes Secrets中。注意,这些值是用base64编码的。

现在让我们获取我们讨论过的所有MySQL连接信息,并将其存储在不同的变量中:

我们使用这些特定的名称mysql命令行客户端(但不是mysqladmin),并将默认使用这些变量,这使得它非常方便。

让我们检查MySQL是否可以使用这些凭证访问:

效果好极了!

在Kubernetes的MySQL上运行Sysbench

现在我们知道了如何访问MySQL,让我们创建一个测试数据库并加载一些数据:

现在我们可以做一个测试:

很好,我们可以看到我们的小测试集群每秒可以运行大约30,000个查询!

让我们让MySQL在Kubernetes上高度可用!

让我们看看我们是否可以将我们的单节点Percona XtraDB集群转换为一个高可用集群雷竞技下载官网(假的-因为MinKube运行在单节点上,我们不会受到实际硬件故障的保护)。

为了实现这一点,我们可以简单地将集群扩展到三个节点:

和往常一样,Kubernetes的“集群扩展”在这里并不是指实际扩展了什么集群,而是指配置了什么新的所需状态,然后操作员开始对集群进行扩展。

您可以等待几分钟,然后注意到其中一个pod处于挂起状态,它看起来不像是在进行:

为了弄清楚发生了什么,我们可以描述这个豆荚:

输出中有很多信息,但对于我们的目的来说,事件部分是最重要的。

这里的警告消息是说只有一个节点可用,而反亲和规则阻止在这个节点上调度更多pod。这是有道理的——在真实的生产环境中,在同一个物理服务器上调度多个Percona XtraDB集群pod是不可接受的,因为这最终会导致单点故障。雷竞技下载官网

不过,这是用于生产的,但对于测试,我们可以允许在同一台物理机器上运行多个pod,因为我们只有一台物理机器。因此,我们通过禁用反亲和保护来修改资源定义:

让我们将修改后的配置应用到集群中。(你可以找到这个和另一个YAML文件在GitHub存储库)。

再试着缩放一下:

我们不需要不断地检查所有新节点的配置是否完成,而是可以观察pod的初始化进程,并检查是否有任何问题:

太棒了!我们看到另外两个“pxc”吊舱已经准备就绪并正在运行!

在Kubernetes上设置MySQL的资源限制

到目前为止,我们还没有为我们的MySQL部署指定任何资源限制(除了持久卷大小)。这意味着它将使用主机上当前可用的所有资源,虽然这可能是测试生产环境的首选方法,但您可能会寻找更可预测的性能和更多的资源隔离,以便单个集群不会使节点过度饱和,从而降低运行在同一节点上的其他pod的性能。

为了设置资源限制,你需要在自定义资源定义中放置适当的部分:

这个资源定义意味着我们请求至少1GB的内存和0.2个CPU核心,并将此实例的资源限制为0.5个CPU核心和相同的1GB内存。

请注意,如果“请求”条件不能满足,即如果集群中没有所需的CPU或内存,pod将不会被调度,等待资源变得可用(可能永远)。

让我们把这些限制应用到集群中:

如果我们看看应用这个命令后pod发生了什么,我们可以看到:

因此改变资源限制需要重新启动集群。

如果您设置了资源限制,操作员将自动设置MySQL的一些配置参数(例如max_connections)根据请求(资源保证可用)。如果没有指定资源约束,操作人员将不执行任何自动配置。

如果我们再次运行相同的Sysbench测试,我们将看到:

这比不受限制地跑步的结果要温和得多。

我们可以在运行基准测试时验证pods的实际CPU使用情况:

我们可以观察到一些有趣的事情:

  • Percona XtraDB雷竞技下载官网集群的限制看起来很受尊重。
  • 我们可以看到只有一个Percona XtraDB集群节雷竞技下载官网点正在获得负载。这是预期的,因为HAProxy不负载均衡集群节点之间的查询,只是确保高可用性。如果希望查看查询负载均衡,可以使用单独的端口进行负载均衡读取,也可以部署ProxySQL智能查询路由
  • HAProxy pod需要大约Percona XtraDB Cluster pod的50%的资源(这是雷竞技下载官网非常简单的内存查询的最坏情况),所以不要低估它的资源使用需求!

在Kubernetes上暂停和恢复MySQL<年代pan style="font-weight: 400;">

如果你有一个用于测试/开发的MySQL实例,或者不需要它一直运行,如果你运行的是Linux,你可以停止MySQL进程,或者如果你运行的是Docker,停止MySQL容器。如何在Kubernetes中实现同样的目标?

首先,你需要小心——如果你删除集群实例,它将破坏计算和存储资源,您将丢失所有数据。而不是删除你需要的暂停集群。

要暂停集群,你可以在集群自定义资源定义中添加一个暂停选项:

让我们应用CR启用这个选项,看看会发生什么:

暂停过程完成后,我们将不会看到任何集群pod正在运行,只有operator:

然而,你仍然会看到包含集群数据的持久化卷声明:

我们还可以通过这个命令看到集群处于暂停状态:

我们可以通过应用与该值相同的CR来取消暂停集群暂停:假集群将在几分钟后恢复在线:

MySQL在Kubernetes备份(和恢复)

如果你关心你的数据,你需要备份,Percona Operator for MySQL提供了相当多的备雷竞技下载官网份备份功能包括计划备份、时间点恢复、备份到S3兼容存储等等。但是,在本演练中,我们将研究最简单的备份和恢复—将备份保存到持久卷。

首先,我们需要为备份配置集群;我们需要配置将执行备份的存储,以及为负责管理备份的容器提供一个映像:

和前面一样,我们可以应用一个包含此部分的新配置kubectl应用-<年代pan class="crayon-i">f6-<年代pan class="crayon-cn">1-<年代pan class="crayon-i">备份-<年代pan class="crayon-i">配置.yaml。虽然我们可以安排自动执行备份,但我们将重点关注手动运行备份。为此,您可以应用以下备份CR:

它基本上定义了为名为“minimal-cluster”的集群创建名为“backup1”的备份,并将其存储在“fs-pvc”存储卷上:

备份任务成功完成后,可以查看备份任务的状态。

现在让我们在尝试恢复之前搞乱我们的数据库:

恢复与备份类似,在集群上运行restore Job,配置如下:

我们可以通过应用配置并检查其状态来做到这一点:

如果您再次搞乱了数据库(在开发环境中并不少见),并希望再次恢复相同的备份,该怎么办?

如果您只是再次运行还原,它将不起作用。

由于系统中已经存在同名的作业,您可以使用不同的名称创建恢复作业,也可以删除恢复对象后重新运行:

注意,虽然删除恢复任务不会影响备份数据或正在运行的集群,但删除“backup”也会删除存储在此备份中的数据:

raybet雷竞技竞猜在线官网使用Percona监视和管理(PMM)监视部署雷竞技下载官网

如果没有监控,你的MySQL部署就不完整,在Percona Operator for MySQL中,雷竞技下载官网raybet雷竞技竞猜在线官网<一个href="//m.doggingzone.com/software/database-tools/percona-monitoring-and-management">雷竞技下载官网Praybet雷竞技竞猜在线官网ercona监控和管理(PMM)支持是内置的,可以很容易地启用。

根据Kubernetes的最佳实践,访问PMM的凭证并不存储在资源定义中,而是存储在秘密中。

按照建议,我们将使用PMM API键而不是用户名和密码。我们可以在API key配置部分获得它们:

API密钥配置部分

创建API Key后,我们可以将它存储在集群的secret中:

接下来,我们需要将PMM配置部分添加到集群自定义资源中,指定部署PMM服务器的服务器。

应用完整配置:

部署完成后,您应该会看到MySQL/PXC和HAProxy实例的统计数据在您指定的Percona监控和管理实例中可见:雷竞技下载官网raybet雷竞技竞猜在线官网

雷竞技下载官网Praybet雷竞技竞猜在线官网ercona监控和管理

注意,在撰写本文时(Percona Monitori雷竞技下载官网nraybet雷竞技竞猜在线官网g and Management 2.28), PMM还不能完全感知Kubernetes,因此它将报告节点上下文中的CPU和内存使用情况,而不是特定pod可用的CPU和内存使用情况。

在Kubernetes上配置MySQL

到目前为止,我们一直在默认设置下运行MySQL (Percona 雷竞技下载官网XtraDB Cluster),尽管Percona Operator for MySQL会自动配置一些选项以获得最佳性能,但您可能会想要更改一些配置选项。

雷竞技下载官网Percona操作符为MySQL提供多种方式改变选项,我们将专注于我认为最简单和实用的-包括他们在CR定义。

简单地添加为一个部分:

它将被添加到您的MySQL配置文件中,因此将覆盖任何默认值或操作员在部署期间所做的任何调整。

与往常一样,您可以应用一个新的配置来查看通过运行应用的配置Kubectl应用-f 8-config.yaml。

如果您曾经拼写错配置选项名称,您可能想知道会发生什么。

操作人员将尝试将配置应用到其中一个节点,这将失败,其中一个节点将反复崩溃并重新启动,但集群将以降级状态可用。

要解决这个问题,只需纠正配置错误并重新应用。

访问MySQL日志

为了在Kubernetes部署中解决MySQL问题,您可能需要访问MySQL日志。日志在每个PXC节点pod中的“Logs”容器中提供。(更多信息)要访问它们,您可以使用以下命令:

注意:如您所见,日志是JSON格式提供的,如果需要,可以使用“jq”命令进行处理。

删除MySQL部署

删除已部署的集群非常容易,所以请记住能力越大,责任越大。只需一个命令就会破坏整个集群及其所有数据:

注意:这只适用于PXC集群;从集群中获取的任何备份都被视为单独的对象,该操作不会删除。

保护室内室不被删除

这对于你的生产环境来说可能还不够好,你可能想要有更多的保护来防止你的数据意外丢失,而Percona Operator for MySQL允许这样做。雷竞技下载官网如果finalizers.delete-pxc-pvc如果未配置,则在删除集群后不会删除持久卷声明(pvc),因此使用相同的声明重新创建集群将允许您恢复数据。如果这是您选择的路线,请记住使用自己的进程来管理pvc—否则,您可能会看到旧集群占用大量空间。

总结

我希望这个演练能帮助您了解MySQL的Percona Operator的强大功能,以及在Kubernetes上运行MySQL的样子。雷竞技下载官网我建议您不要以阅读结束,而是部署您自己的Minikube,并尝试本文中提到的场景。中包含了所有脚本(以及更多内容)<一个href="https://github.com/PeterZaitsev/minikube-pxc-tutorial">GitHub库通过练习而不是独自阅读,你会学得更快!