所有帖子

使用Kubernetes和MinIO的运营商简化对象存储即服务

使用Kubernetes和MinIO的运营商简化对象存储即服务

对象存储即服务是当今存储中最热门的概念。原因很简单:对象存储是云的存储类别,并且能够无缝地将其提供给应用程序或开发人员的功能使其对于任何规模的企业都具有巨大的价值。

挑战在于,传统上很难交付对象存储即服务。过于复杂,难以调整的性能,容易发生大规模故障等。尽管像Kubernetes这样的系统提供了用于自动化这些系统的部署和管理的强大工具,但复杂性的总体问题仍未解决,因为管理员仍必须投入大量时间和精力来甚至部署小型对象存储资源。

通过将Kubernetes与我们的新Operator和Operator Console图形用户界面相结合,MinIO极大地改变了这种动态。应该预先说明,MinIO一直痴迷于简单性。它渗透到我们所做的一切,我们做出的每个设计决策,我们编写的每一行代码中。

尽管如此,我们看到了更多的简化机会。为此,我们创建了MinIO Operator和MinIO kubectl插件,以方便在Kubernetes上部署和管理MinIO对象存储。尽管操作员命令对于已经精通Kubernetes的用户来说至关重要,但我们也想面向更广泛的受众,因此我们为操作员创建了图形用户界面,并将其合并到新的MinIO操作员控制台中,以使组织中的任何人都可以创建,部署并将对象存储作为服务进行管理。

Kubernetes是Internet的平台。考虑到它的广泛采用,我们选择保持与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安装

kubectl krew install minio


之后,我们只需执行以下操作即可安装操作员

kubectl minio init


使用kustomize安装

另外,对于喜欢基于kustomize方法的任何人,我们的存储库都支持安装特定标签,当然,您也可以将其用作kustomization.yaml文件的基础

kubectl apply -k github.com/minio/operator/\?ref\=v4.0.2


供应对象存储

我们用来表示MinIO对象存储集群的类比是Tenant。我们这样做是为了与MinIO Operator交流,可以在同一个Kubernetes集群中分配多个租户。每个租户又可以具有不同的容量(即:一个小的500GB租户与一个100TB租户),资源(1000m CPU和4Gi RAM与4000m CPU和16Gi RAM)和服务器(4个容器对16个容器)以及一个有关身份提供者,加密和版本的单独配置。

让我们从在4个节点上创建一个容量16Ti的小型租户开始我们将首先为要安装的租户创建一个名为“ minio-tenant-1 ”的命名空间,然后使用“ kubectl minio tenant create ”命令将租户放置在该命名空间中

密切注意存储类别在这里,我们将使用集群的默认存储类-标准,但是您应该使用任何可以容纳16Ti(或1Ti永久卷)的存储类。

kubectl create ns minio-tenant-1
kubectl minio tenant create minio-tenant-1 \
      --servers 4                             \
      --volumes 16                            \
      --capacity 16Ti                         \
      --namespace minio-tenant-1              \

      --storage-class standard


此命令将输出连接到该租户所需的凭据。MinIO只显示一次这些凭据,因此请确保将它们复制到安全位置。

Tenant 'minio-tenant-1' created in 'minio-tenant-1' Namespace
  Username: admin
  Password: dbc978c2-bfbe-41bf-9dc6-699c76bafcd0 

  Note: Copy the credentials to a secure location. MinIO will not display these   

  again
+-------------+------------------------+------------------+--------------+-----------------+
| APPLICATION |      SERVICE NAME      |     NAMESPACE    | SERVICE TYPE | SERVICE PORT(S) |
+-------------+------------------------+------------------+--------------+-----------------+
| MinIO       | minio                  | minio-tenant-1   | ClusterIP    | 443             |
| Console     | minio-tenant-1-console | minio-tenant-1   | ClusterIP    | 9090,9443       |
+-------------+------------------------+------------------+--------------+-----------------+






通常,在MinIO Operator通过Kubernetes证书签名请求为MinIO和操作员控制台请求TLS证书时,租户需要花费几分钟的时间进行调配,您可以通过以下步骤检查进度:

kubectl get tenant -n minio-tenant-1

这将告诉您租户的当前状态:

kubectl get tenants -n minio-tenant-1
NAME             STATE                               AGE
minio-tenant-1   Waiting for MinIO TLS Certificate   19s

几分钟后,租户应报告初始化状态,表明您的对象存储集群已准备就绪:

kubectl get tenants -n minio-tenant-1      
NAME             STATE         AGE
minio-tenant-1   Initialized   3m21s

就是这样,我们的对象存储集群已启动并正在运行,我们可以通过kubectl port-forward访问它对于MinIO:

kubectl port-forward svc/minio 9000:443 -n minio-tenant-1
Forwarding from 127.0.0.1:9000 -> 9000
Forwarding from [::1]:9000 -> 9000

然后在您的本地浏览器中转到https:// localhost:9000 / minio /



或者,您也可以转到MinIO控制台

kubectl port-forward svc/minio-tenant-1-console 9090:9443 -n minio-tenant-1
Forwarding from 127.0.0.1:9090 -> 9443
Forwarding from [::1]:9090 -> 9443

kubectl port-forward svc/minio-tenant-1-console 9090:9443 -n minio-tenant-1
Forwarding from 127.0.0.1:9090 -> 9443
Forwarding from [::1]:9090 -> 9443



很容易吧?

但是现在让我们停止使用MinIO Console for Operator(又称Operator UI)停止,倒带和重新混合以添加租户要访问它,我们只需运行kubectl minio proxy命令。这将告诉我们如何访问操作员UI。



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



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



要添加另一个,点击创建租户第一个屏幕将询问一些配置问题:

1)命名租户

2)选择一个名称空间

3)选择一个存储类别

如果您希望为此租户配置身份提供者,TLS证书,加密或资源,我邀请您使用这些配置选项所在高级模式进行游戏



在下一个屏幕上,系统将要求您确定租户的大小,并预览选择的服务器,驱动器和擦除编码奇偶校验值的数量:



以下屏幕预览了将要配置的内容:



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



返回到租户列表,我们可以在使用Operator UI创建的租户旁边看到原始的cli-proved租户。这些过程是等效的。选择仅是个人喜好。



最后,如果您对如何通过良好的旧Yaml来配置MinIO租户感到好奇,则可以获取租户的定义并熟悉我们的自定义资源定义:

➜ kubectl get tenant bigdata-storage -o yaml

哪个返回

apiVersion: minio.min.io/v2
kind: Tenant
metadata:
name: bigdata-storage
namespace: default
spec:
console:
  consoleSecret:
    name: bigdata-storage-console-secret
  image: minio/console:v0.6.0
  replicas: 1
  resources:
    requests:
      memory: 64Mi
credsSecret:
  name: bigdata-storage-secret
env:
  - name: MINIO_STORAGE_CLASS_STANDARD
    value: EC:8
exposeServices:
  console: true
  minio: true
image: minio/minio:RELEASE.2021-03-01T04-20-55Z
imagePullSecret: { }
log:
  audit:
    diskCapacityGB: 10
  image: minio/logsearch:v4.0.0
  resources: { }
mountPath: /export
pools:
  - affinity:
      podAntiAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
                - key: v1.min.io/tenant
                  operator: In
                  values:
                    - bigdata-storage
                - key: v1.min.io/pool
                  operator: In
                  values:
                    - pool-0
            topologyKey: kubernetes.io/hostname
    name: pool-0
    resources:
      limits:
        memory: 32Gi
      requests:
        memory: 2Gi
    servers: 4
    volumeClaimTemplate:
      metadata:
        name: data
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: "68719476736"
        storageClassName: standard
    volumesPerServer: 4
prometheus:
  diskCapacityGB: 5
  resources: { }
requestAutoCert: true



结论

我们已经竭尽全力简化了Kubernetes上MinIO的部署和管理。安装操作员并通过命令行或图形用户界面使用它来创建租户很简单。但是,这只是Kubernetes上MinIO功能的一部分。每个MinIO租户都具有裸机部署可用的全部功能集-因此您可以对功能完全充满信心地将现有的MinIO部署迁移到Kubernetes

我鼓励您自己尝试使用MinIO Operator,并探索其他很酷的功能,例如使用Prometheus度量标准和审核日志,或使用外部身份提供程序(例如LDAP / Active Directory或OpenID提供程序)保护MinIO租户。

无论采用哪种方法,现在都可以将多租户,对象存储作为服务进行配置,这已成为各种IT管理员,开发人员和架构师的技能组合。



上一篇 下一篇