MariaDB 与 K8s:如何在 K8s 中复制 MariaDB

上一篇博客中,我们了解了如何在 K8s 中创建有状态的 MariaDB 应用。此外,我们还在该博客中学习了 MariaDB 的复制工作原理。现在,我们将尝试创建一个复制的有状态应用。关于撰写本博客的良好参考,我在此鸣谢 Kubernetes 文档以及来自 阿里云的一个示例。

配置复制

要复制 MariaDB 应用,我们将创建一个有状态集,该有状态集将包含一个 初始化容器和一个应用容器。

...

在 K8s 中创建有状态的 MariaDB 应用

上一篇博客中,我们创建了一个无状态应用,使用 K8s Deployment 资源部署。虽然这允许复制应用,但在 Pod 重启时数据会丢失,这意味着没有数据一致性。在同一篇博客中,我们使用了 PersistentVolumeClaim 进行 PersistentVolume 的动态配置,但我们使用了 Deployment(适用于无状态应用),这种方式对于每个副本都应有自己的持久卷的有状态应用来说是*不推荐的*。实现这一点的正确方法是通过 Statefulset 资源,本文将对此进行介绍。

在 K8s 中,可以创建有状态应用,例如数据库应用。这类应用需要将数据保存到持久磁盘存储以供服务器/客户端/其他应用使用,需要跟踪其状态,并能够在分布式系统中进行复制和使用。

...

MariaDB 与 K8s:使用持久卷部署 MariaDB 和 WordPress

在上一篇博客《MariaDB 与 K8s:创建 Secret 并在 MariaDB 部署中使用》中,我们使用了 Secrets 资源来隐藏 root 用户的敏感数据,而在本系列更早的一篇博客《MariaDB 与 K8s:容器/Deployment 之间的通信》中,我们在一个 Pod 中创建了 2 个容器(即 MariaDB 和 phpmyadmin)。那种部署方式没有任何持久卷。

在本博客中,我们将为 MariaDB 和 WordPress 应用分别创建 Deployment,并为它们创建一个 Service 以便连接。此外,我们还将在 MariaDB Deployment 的 Pod 中创建 Volume。

...

MariaDB 与 K8s:创建 Secret 并在 MariaDB 部署中使用

在上一篇博客中,我们创建了一个无状态应用,使用 K8s Deployment 资源进行部署,并暴露了 root 密码。从安全角度来看,这当然是不可取的。K8s 允许使用特定的 K8s 资源来隐藏敏感数据。

让我们看看如何在 K8s 中使用 Secrets

K8s 中的 Secrets

为了保存敏感数据,可以使用 K8s 资源 Secret

可以通过运行 kubectl create secret 从 CLI 创建 Secret。

这里我们将使用两种方法来创建 Secret。

...

MariaDB 与 K8s:容器/Deployment 之间的通信

上一篇博客中,通过 YAML 文件创建了一个后台 Deployment 资源,该资源包含一个作为后台容器的单一容器 (MariaDB)。

在本博客中,我们将继续创建前端容器,并通过 Service 和其他资源与后端通信。

关于 Services

当应用通过 Deployment 运行时,Pod 会动态地创建和销毁。创建后,它们会在集群中获得内部 IP 地址。由于 Pod 是短暂的,因此需要一种稳定的方式来实现 Pod 之间的通信。

...

在 K8s 中启动 MariaDB

这是本系列博客的第一篇,解释了如何在 Kubernetes (K8s) 中使用 MariaDB,并解释了 K8s 和 MariaDB 的一些重要概念。

本博客解释了如何在 K8s 中使用 CLI 将 MariaDB 作为无状态应用启动,并探讨了您可以在 CLI 上运行的不同命令。

前提条件是您已安装 kubectl(它也会安装 Docker 运行时)和 minikube(本地 K8s)。

让我们先启动 minikube

$ minikube start && kubectl get nodes
名称 状态 角色 年龄 版本
minikube Ready control-plane,master 104d v1.22.2

Pod 是一个 K8s 资源,也是 K8s 中最小的单元。

...