60 秒内上线 [到生产环境]

Gone [to Prod] in 60 Seconds

我们在设计 MinIO 时,加入了丰富的功能,但同时并未牺牲易用性或控制台 UI/UX 的美观性。为了了解企业对对象存储的需求,我们在过去六个月里参加了多次会议,并对数百人进行了调查。他们认为最重要的三个功能/能力中的两个是:MinIO 的安装、使用和管理的便捷性。我们经常将此称为第一天、第二天及以后的挑战,而 MinIO 比任何人都更重视这一点。为了证明这一点,我们将帮助您在 60 秒左右内完成生产环境的部署。我们鼓励您亲自尝试并发布您的视频。对于能在 1 分钟内完成部署的用户,我们将赠送 MinIO T 恤作为奖励。

为什么这很重要?CTO 和其他行业领导者希望他们的团队将更多时间用于使用和学习产品,而不是尝试设置和运行它。调试应用程序的安装部分没有任何好处,一旦应用程序启动并运行,使用它本身会更有乐趣。此外,安装和设置阶段越繁琐,组织就越不愿意使用该产品,因为这意味着在后续安装时,工程师需要花费更多宝贵的时间,例如当他们希望将产品扩展到全球其他地区时。

说到全球化,不仅要确保初始开发阶段顺利进行,还要确保后续的生产阶段顺利进行。在开发模式下,在一个实例上让所有内容都正常工作,但随后却难以在集群模式下设置或扩展该集群,这是没有意义的。

在这篇文章中,我们将向您展示如何快速在几秒钟内启动一个生产级别的 MinIO 集群。不仅如此,我们还将向您展示如何能够在短短几秒钟内扩展该集群。

Kubernetes 集群先决条件

在部署 MinIO 之前,请确保您已设置所需的硬件。

  • 您至少需要 4 个节点。这些可以是虚拟机或物理节点。
  • 您需要在这些节点上运行 Kubernetes。
  • 磁盘、CPU 和内存必须满足 最低要求

将标签添加到 4 个节点到池 `zero` 中,如下所示

kubectl label nodes k8s-worker  pool=zero

kubectl label nodes k8s-worker2 pool=zero

kubectl label nodes k8s-worker3 pool=zero

kubectl label nodes k8s-worker4 pool=zero

接下来,使用 MinIO Enterprise 运营商的 Kustomize 配置。这是存储用于创建我们的 4 节点 MinIO 集群的 Kubernetes yaml 文件的位置。要访问该配置,请务必发送电子邮件至 hello@min.io

部署 MinIO 集群

启动 MinIO 集群非常简单。您可以编辑 yaml 文件以微调设置,但在这里我们将使用已为您设置的合理默认值。

继续应用租户配置以启动 pool-0

$ kubectl apply -k aistore-operator/examples/kustomization/bases

检查以确保池中有 4 个 Pod

名称                         类型        集群IP    外部IP   端口  

minio                        LoadBalancer 10.104.10.9   <pending> 443:31834/TCP

myminio-hl            ClusterIP   无          <none>    9000/TCP

myminio-log-hl-svc    ClusterIP   无          <none>    5432/TCP

myminio-log-search-api ClusterIP   10.102.151.239 <none>    8080/TCP

myminio-prometheus-hl-svc ClusterIP   None          <none>    9090/TCP

就是这样!这是大多数人开始使用的初始设置。这确保了您以一种能够在将来在生产环境中无缝扩展的方式进行设置。

扩展 MinIO 集群

现在理想情况下,MinIO 建议您进行容量规划,预留足够的硬件和存储容量,这样您就不需要添加池来扩展集群。但是,如果您确实需要扩展,这并不困难,只需几秒钟即可完成。

先决条件与 pool-0 类似。启动 4 个没有足够资源的节点,确保在这些节点上安装了 Kubernetes 并应用节点标签。让我们现在就开始吧。

向 4 个节点添加标签到池 zero 中,如下所示

kubectl label nodes k8s-worker5 pool=one

kubectl label nodes k8s-worker6 pool=one

kubectl label nodes k8s-worker7 pool=one

kubectl label nodes k8s-worker8 pool=one

扩展池是一个非中断操作,不会导致集群停机。下图是我们希望达成的最终结果。

编辑 tenant-lite 配置以添加 pool-1

kubectl edit tenant -n tenant-lite

它应该会打开一个 yaml 文件,找到 pools 部分并在其下方添加以下内容。

  - affinity

      podAntiAffinity

        requiredDuringSchedulingIgnoredDuringExecution

        - labelSelector

            matchExpressions

            - key: v1.min.io/tenant

              operator: In

              values

              - myminio

            - key: v1.min.io/pool

              operator: In

              values

              - pool-1

          topologyKey: kubernetes.io/hostname

    name: pool-1

    nodeSelector

      pool: one

    resources: {}

    runtimeClassName: ""

    servers: 4

    volumeClaimTemplate

      metadata

        creationTimestamp: null

        name: data

      spec

        accessModes

        - ReadWriteOnce

        resources

          requests

            storage: "2147483648"

        storageClassName: standard

      status: {}

    volumesPerServer: 2

保存文件后,新的池应该开始部署。通过获取 Pod 列表来验证它。

$ kubectl get pods -n tenant-lite -o wide

NAME               READY   STATUS    RESTARTS   AGE   IP            NODE           NOMINATED NODE   READINESS GATES

myminio-pool-0-0   1/1     Running   0          12h   10.244.7.5    k8s-worker    <none>           <none>

myminio-pool-0-1   1/1     Running   0          12h   10.244.5.5    k8s-worker3   <none>           <none>

myminio-pool-0-2   1/1     Running   0          12h   10.244.4.10   k8s-worker2   <none>           <none>

myminio-pool-0-3   1/1     Running   0          12h   10.244.8.13   k8s-worker4   <none>           <none>

myminio-pool-1-0   1/1     Running   0          12h   10.244.3.10   k8s-worker8   <none>           <none>

myminio-pool-1-1   1/1     Running   0          12h   10.244.6.15   k8s-worker6   <none>           <none>

myminio-pool-1-2   1/1     Running   0          12h   10.244.2.7    k8s-worker5   <none>           <none>

myminio-pool-1-3   1/1     Running   0          12h   10.244.1.10   k8s-worker7   <none>           <none>

就是这样。扩展起来是不是非常容易?

谨慎对待

以上内容请谨慎对待。要实现这种级别的可安装性和可扩展性,您确实需要具备初始硬件和 Kubernetes 集群设置,以便使其尽可能快地完成。但是,在现有的高性能企业级存储系统中,有多少能够以与 MinIO 对象存储相同的速度在生产环境中进行设置?想想看,继续,告诉我一个,我等着…….

想不出来?是的,有些存储解决方案可以在开发模式下快速启动,但要使其在常规裸机 Linux 服务器上的集群模式下正常工作非常麻烦,更不用说在上面添加 Kubernetes 的复杂性了。

在 MinIO,我们构建对象存储时,将简单易安装和易用性作为基础,而不是事后才考虑。虽然我们拥有所有可以想象得到的企业级功能(以及其他一些功能),但最终应用程序必须每天都使用和维护,因此设置、使用、维护和自动化越容易,其对组织的价值就越大。

如果您有任何关于如何快速启动和运行 MinIO 企业对象存储的问题,请务必在Slack上与我们联系!