使用 Kubernetes 和 MinIO Operator 简化多租户对象存储即服务
这篇文章于 1.12.22 更新。
对象存储即服务是当今存储领域最热门的概念。原因很简单:对象存储是云的存储类别,能够将它无缝地提供给应用程序或开发人员,这使得它对任何规模的企业都具有巨大的价值。
挑战在于,对象存储即服务传统上很难交付。过于复杂、难以调整性能、容易出现大规模故障等。虽然像 Kubernetes 这样的系统提供了强大的工具来自动部署和管理这些系统,但复杂性的总体问题仍未解决,因为管理员仍必须投入大量时间和精力来甚至部署一个小规模的对象存储资源。
通过将 Kubernetes 与我们的新 Operator 和我们的 Operator Console 图形用户界面相结合,MinIO 正在极大地改变这种动态。应该预先声明 MinIO 一直痴迷于简单性。它渗透到我们所做的每一件事、我们做出的每一个设计决策、我们编写的每一行代码。
尽管如此,我们还是看到了更多的简化机会。为此,我们创建了 MinIO Operator 和 MinIO kubectl 插件,以促进 MinIO 对象存储在 Kubernetes 上的部署和管理。虽然 Operator 命令对于已经精通 Kubernetes 的用户来说至关重要,但我们也希望面向更广泛的受众,因此我们为 Operator 创建了一个图形用户界面,并将其整合到我们新的 MinIO Operator Console 中,使组织中的任何人都能够创建、部署并将对象存储作为服务进行管理。
Kubernetes 是互联网的平台。鉴于它的广泛采用,我们选择与 Kubernetes 的做事方式保持一致。这意味着不使用任何专门的工具或服务来设置 MinIO。
结果是 MinIO Operator 适用于任何 Kubernetes 发行版,无论是 OpenShift、vSphere 7.0u1、Rancher 还是上游股票。此外,MinIO 将在任何公共云提供商上运行,例如亚马逊的 EKS(弹性 Kubernetes 引擎)、谷歌的 GKE(谷歌 Kubernetes 引擎)、谷歌的 Anthos 或 Azure 的 AKS(Azure Kubernetes 服务)。
几乎所有你需要开始使用 Kubernetes 的任何发行版的是一些存储设备,这些设备可以通过本地持久卷或 CSI 驱动程序呈现给 Kubernetes。
让我们首先回顾一下将 MinIO 与 kubectl 插件和基于 kustomize 的方法结合使用。您需要在可以通过网络访问 Kubernetes 集群的计算机上安装 kubectl 工具。有关安装说明,请参阅安装和设置 kubectl。您可能需要联系您的 Kubernetes 管理员以获取有关配置 kubectl 安装以访问 Kubernetes 集群的帮助。
安装
kubectl 插件
要安装 MinIO Operator,我们可以利用它的kubectl 插件,可以通过krew安装
之后我们可以通过简单地安装 Operator
使用 kustomize 安装
或者,对于喜欢基于 kustomize 的方法的任何人,我们的存储库支持安装特定标签,当然您也可以将其用作kustomization.yaml文件的基础
供应对象存储
我们用来表示 MinIO 对象存储集群的类比是租户。我们这样做是为了与 MinIO Operator 沟通,可以在同一个 Kubernetes 集群中分配多个租户。反过来,每个租户可以有不同的容量(即:500GB 的小型租户与 100TB 的租户)、资源(1000m CPU 和 4Gi RAM 与 4000m CPU 和 16Gi RAM)和服务器(4 个 pod 与 16 个 pod),以及关于身份提供者、加密和版本的单独配置。
让我们首先创建一个跨 4 个节点具有16Ti容量的小型租户。我们将首先为要安装的租户创建一个名为“ minio-tenant-1 ”的命名空间,然后使用“ kubectl minio tenant create ”命令将租户放置在那里。
密切关注存储类。在这里,我们将使用集群的默认存储类——称为标准,但您应该使用任何可以容纳 16Ti(或 1Ti 持久卷)的存储类。
此命令将输出连接到此租户所需的凭据。MinIO 只显示一次这些凭据,因此请确保将它们复制到安全位置。
通常租户需要几分钟的时间来配置,而 MinIO 操作员通过 Kubernetes 证书签名请求为 MinIO 和操作员控制台请求 TLS 证书,您可以通过以下方式检查进度:
这将告诉您租户的当前状态:
几分钟后,租户应报告Initialized状态,表明您的对象存储集群已准备就绪:
就是这样,我们的对象存储集群已经启动并运行,我们可以通过kubectl port-forward 访问它。要访问 MinIO 的控制台:
然后在本地浏览器中访问https://localhost:9443/

很容易吧?
但现在让我们停下来,倒带并重新混合,使用MinIO操作员控制台(又名操作员 UI)添加租户。要访问它,我们可以简单地运行kubectl minio proxy命令。这将告诉我们如何访问 Operator UI。

如您所见,它告诉您访问本地浏览器的http://localhost:9090/login并且还告诉您 JWT 访问控制台 UI

在 Operator UI 中,我们可以看到之前使用 kubectl 插件配置的租户。

要添加另一个,请点击Create Tenant。第一个屏幕会询问一些配置问题:
1) 命名租户
2)选择命名空间
3)选择存储类
4)规模你的租户
如果您希望为此租户配置身份提供者、TLS 证书、加密或资源,我邀请您使用这些配置选项所在的左侧部分。
在此屏幕中,您可以使用服务器数量、每台服务器的驱动程序数量和所需的原始容量来调整租户的大小,此外,您还可以预览可用容量和 SLA 保证以及您选择的每个纠删码奇偶校验值。

现在点击创建。这就对了。

回到租户列表,我们可以在使用 Operator UI 创建的租户旁边看到我们最初的 cli-provisioned 租户。这些过程是等价的。您选择哪个仅是个人喜好。

最后,如果您对如何通过良好的旧yaml提供 MinIO 租户感到好奇,您可以获取租户的定义并熟悉我们的自定义资源定义:
哪个返回
结论
我们竭尽全力简化 Kubernetes 上 MinIO 的部署和管理。安装 Operator 并使用它通过命令行或图形用户界面创建租户很简单。然而,这只是 Kubernetes 上 MinIO 功能的一个子集。每个 MinIO 租户都具有裸机部署可用的完整功能集——因此您可以对功能充满信心地将现有的 MinIO 部署迁移到 Kubernetes
我鼓励您自己尝试 MinIO Operator 并探索其他很酷的功能,例如使用 Prometheus 指标和审计日志,或者使用外部身份提供程序(例如 LDAP/Active Directory 或 OpenID 提供程序)保护您的 MinIO 租户。
无论您采用何种方法,提供多租户、对象存储即服务的能力现在都属于广泛的 IT 管理员、开发人员和架构师的技能组合。