AWS Marketplace 上提供 MinIO 多云对象存储

AWS Marketplace 上提供 MinIO 多云对象存储

MinIO 的多云凭证在这一点上得到了很好的确立,在公共云、私有云和边缘上进行了数百万次部署,仅在 AWS 上就有近百万次部署。

我们将 MinIO 添加到AWS Marketplace 的目标是让客户更轻松地在最大的公共云中运行 MinIO - 在此过程中获得运营和经济利益。

作为领先的云提供商,AWS 在许多多云战略中占据突出地位。


pasted image 0 - 2023-04-02T201028.598.png



我们对 AWS Marketplace 的方法是固执己见并且以 Kubernetes 为中心。我们对客户的需求进行了长期而认真的思考,并开发了一种基于 YAML 的方法,只需点击几下鼠标即可交付。

经验丰富的用户可以继续推出自己的解决方案,但我们认为对于大多数市场而言,我们的“点击几下即可完成”方法将提供弹性、安全性、可扩展性和运营效率的最佳组合。使用MinIO Operator 和 Operator Console管理这些环境的能力将进一步简化第 2 天的操作。

为了给我们的客户提供最简单、最流畅的 MinIO-on-AWS 体验,我们对 220 多种 AWS 实例类型进行了 TCO 分析,以确保我们为您的对象存储选择最佳基础设施。我们考虑了存储类型、CPU 类型、内核和网络性能等因素,并计算了使用该实例类型作为 MinIO 节点的每 GB 成本。然后,我们将 MinIO 作为一个小型集群部署在具有最佳 TCO 的实例上。该练习使我们得出结论,在针对性能进行优化时,采用 NVMe 的 i3en.12xlarge 系列实例以及针对容量进行优化时,采用 HDD 的 d3en.12xlarge 系列实例可提供最佳的 TCO/性能比。

随着存储需求不断增长,我们让客户可以轻松扩展——只需在四个 AWS 实例的倍数中添加 MinIO 集群即可。配置额外的虚拟机以满足您的容量和纠删码需求,然后使用满足您财务需求的条款购买它们。例如,通过签订为期三年的预留实例合同,最多可以节省 58%,通过预付费用甚至可以节省更多。由于涉及许多因素,定价实例可能会很复杂,请随时通过“联系销售”按钮与我们联系以寻求帮助。  

您可以利用 MinIO 复杂的数据生命周期功能来启用存储分层 - 并获得比仅仅依赖 S3 本身更好的性能和更低的成本!在 i3en.12xlarge 上为 NVMe 提供一个快速的 MinIO 主存储集群,然后在 d3en.12xlarge 上为 HDD 分层到一个更便宜但速度不那么快的 MinIO 二级存储集群,最后将对性能最不敏感的数据分层到更便宜的AWS S3 冰川。

也有经济利益。虽然这是一篇技术文章,但您可以找到有关在 AWS 内部运行 MinIO所提供的成本节约、运营节约和锁定避免的更多信息。  

AWS Marketplace 上的 MinIO 多云对象存储入门

先决条件

您必须在 AWS Marketplace 中为 MinIO 创建订阅,否则由于缺少授权,此设置的自动化将无法运行。

您还必须安装:

配置参数

要开始,您将需要集群的三个基本配置参数:在下面输入它们将填充必要的命令以通过 EKS 部署 MinIO。


pasted image 0 - 2023-04-02T201057.133.png


第 1 步:设置集群

eksctl create cluster --config-file minio-cluster.yaml

其中 minio-cluster.yaml 文件如下:

apiVersion: eksctl.io/v1alpha5
availabilityZones:
  - us-west-2c
  - us-west-2d
  - us-west-2b
cloudWatch:
  clusterLogging: { }
iam:
  vpcResourceControllerPolicy: true
  withOIDC: false
kind: ClusterConfig
managedNodeGroups:
  - amiFamily: AmazonLinux2
    desiredCapacity: 2
    maxSize: 2
    minSize: 2
    disableIMDSv1: false
    disablePodIMDS: false
    iam:
      withAddonPolicies:
        albIngress: false
        appMesh: false
        appMeshPreview: false
        autoScaler: false
        certManager: false
        cloudWatch: false
        ebs: false
        efs: false
        externalDNS: false
        fsx: false
        imageBuilder: false
        xRay: false
    instanceSelector: { }
    instanceType: m5.xlarge
    labels:
      alpha.eksctl.io/cluster-name: minio-cluster
      alpha.eksctl.io/nodegroup-name: ng-minio-mngt
      alpha.min.io/nodegroup-template: template
    name: ng-minio-mngt
    privateNetworking: false
    releaseVersion: ""
    securityGroups:
      withLocal: null
      withShared: null
    ssh:
      allow: false
      publicKeyPath: ""
    tags:
      alpha.eksctl.io/nodegroup-name: ng-minio-mngt
      alpha.eksctl.io/nodegroup-type: managed
    volumeIOPS: 3000
    volumeSize: 80
    volumeThroughput: 125
    volumeType: gp3
    preBootstrapCommands:
      - echo IyEvYmluL2Jhc2gKI3NldCAteAoKbW91bnRfZGV2aWNlKCl7CkRFVklDRT0iL2Rldi8kMSIKVk9MVU1FX05BTUU9JDIKTU9VTlRfUE9JTlQ9JDMKCmZvcm1hdF9kZXZpY2UoKSB7CiAgZWNobyAiRm9ybWF0dGluZyAkREVWSUNFIgogIG1rZnMueGZzIC1pbWF4cGN0PTI1IC1mIC1MICRNT1VOVF9QT0lOVCAkREVWSUNFCn0KY2hlY2tfZGV2aWNlKCkgewogIGlmIFsgLWYgIi9ldGMvc3lzdGVtZC9zeXN0ZW0vJE1PVU5UX1BPSU5ULm1vdW50IiBdOyB0aGVuCiAgICBlY2hvICJEZXZpY2UgJE1PVU5UX1BPSU5UICgkREVWSUNFKSBleGlzdHMiCiAgICBlY2hvICJObyBhY3Rpb25zIHJlcXVpcmVkLi4uIgogIGVsc2UKICAgIGVjaG8gIiRNT1VOVF9QT0lOVC5tb3VudCB3YXMgbm90IGZvdW5kLCBjcmVhdGluZyB2b2x1bWUiCiAgICBmb3JtYXRfZGV2aWNlCiAgZmkKfQpjaGVja19tb3VudCgpIHsKICBpZiBbIC1mICIvZXRjL3N5c3RlbWQvc3lzdGVtLyRNT1VOVF9QT0lOVC5tb3VudCIgXTsgdGhlbgogICAgZWNobyAiRm91bmQgJE1PVU5UX1BPSU5ULm1vdW50IGluIC9ldGMvc3lzdGVtZC9zeXN0ZW0vIgogICAgZWNobyAiTm8gYWN0aW9ucyByZXF1aXJlZC4uLiIKICBlbHNlCiAgICBlY2hvICIkTU9VTlRfUE9JTlQubW91bnQgd2FzIG5vdCBmb3VuZCBpbiAvZXRjL3N5c3RlbWQvc3lzdGVtLyBhZGRpbmcgaXQiCiAgICBta2RpciAtcCAvJE1PVU5UX1BPSU5UCiAgICAKICAgIGVjaG8gIltVbml0XSIgPj4gL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kTU9VTlRfUE9JTlQubW91bnQKICAgIGVjaG8gIkRlc2NyaXB0aW9uPU1vdW50IFN5c3RlbSBCYWNrdXBzIERpcmVjdG9yeSIgPj4gL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kTU9VTlRfUE9JTlQubW91bnQKICAgIGVjaG8gIiIgPj4gL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kTU9VTlRfUE9JTlQubW91bnQKICAgIGVjaG8gIltNb3VudF0iID4+IC9ldGMvc3lzdGVtZC9zeXN0ZW0vJE1PVU5UX1BPSU5ULm1vdW50CiAgICBlY2hvICJXaGF0PUxBQkVMPSRNT1VOVF9QT0lOVCIgPj4gL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kTU9VTlRfUE9JTlQubW91bnQKICAgIGVjaG8gIldoZXJlPS8kTU9VTlRfUE9JTlQiID4+IC9ldGMvc3lzdGVtZC9zeXN0ZW0vJE1PVU5UX1BPSU5ULm1vdW50CiAgICBlY2hvICJUeXBlPXhmcyIgPj4gL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kTU9VTlRfUE9JTlQubW91bnQKICAgIGVjaG8gIk9wdGlvbnM9bm9hdGltZSIgPj4gL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kTU9VTlRfUE9JTlQubW91bnQKICAgIGVjaG8gIiIgPj4gL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kTU9VTlRfUE9JTlQubW91bnQKICAgIGVjaG8gIltJbnN0YWxsXSIgPj4gL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kTU9VTlRfUE9JTlQubW91bnQKICAgIGVjaG8gIldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0IiA+PiAvZXRjL3N5c3RlbWQvc3lzdGVtLyRNT1VOVF9QT0lOVC5tb3VudAoKICAgIHN5c3RlbWN0bCBlbmFibGUgJE1PVU5UX1BPSU5ULm1vdW50CiAgICBzeXN0ZW1jdGwgc3RhcnQgJE1PVU5UX1BPSU5ULm1vdW50CiAgZmkKfQpMQUJFTD0kKGJsa2lkIC1MICRWT0xVTUVfTkFNRSkKY2hlY2tfZGV2aWNlCmNoZWNrX21vdW50CnN5c3RlbWN0bCBkYWVtb24tcmVsb2FkCn0KCmZvciBpIGluIGBsc2JsayAtZCB8IGdyZXAgLXYgTkFNRSB8IGdyZXAgLXYgbnZtZTAgfCBhd2sgJ3twcmludCAkMX0nYDsgZG8KICBtbnRfcG9pbnQ9YGVjaG8gJGkgfCBzZWQgLWUgJ3MvbnZtZS9kaXNrL2cnIC1lICdzL24xLy9nJ2AKICBtb3VudF9kZXZpY2UgJGkgJGkgJG1udF9wb2ludDsKZG9uZQo= | base64 --decode > mount_drives.sh
      - chmod +x mount_drives.sh
      - ./mount_drives.sh
metadata:
  name: minio-cluster
  region: us-west-2
  version: "1.21"
privateCluster:
  enabled: false
  skipEndpointCreation: false
vpc:
  autoAllocateIPv6: false
  cidr: 192.168.0.0/16
  clusterEndpoints:
    privateAccess: false
    publicAccess: true
  manageSharedNodeSecurityGroupRules: true
  nat:
    gateway: Single

第 2 步。设置所需的角色、策略和连接器

所有这些都限定minio-cluster在该区域中调用的特定集群us-west-2和帐号中000000000000,因此请确保在“配置参数”步骤中更新这些值。

2.1 创建 IAM 政策

aws iam create-policy \
    --policy-name minio-eks-minio-cluster-group-scaling \
    --policy-document file://iam-policy.json

其中 iam-policy.json 文件如下:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Action": [
        "eks:DescribeNodegroup",
        "eks:ListNodegroups"
      ],
      "Resource": [
        "arn:aws:eks:*:000000000000:nodegroup/minio-cluster/*/*",
        "arn:aws:eks:us-west-2:000000000000:cluster/minio-cluster"
      ]
    },
    {
      "Sid": "",
      "Effect": "Allow",
      "Action": "eks:UpdateNodegroupConfig",
      "Resource": [
        "arn:aws:eks:*:000000000000:nodegroup/minio-cluster/*/*",
        "arn:aws:eks:us-west-2:000000000000:cluster/minio-cluster"
      ]
    },
    {
      "Sid": "",
      "Effect": "Allow",
      "Action": [
        "eks:CreateNodegroup",
        "eks:TagResource"
      ],
      "Resource": "arn:aws:eks:us-west-2:000000000000:cluster/minio-cluster"
    },
    {
      "Sid": "",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole",
        "iam:ListAttachedRolePolicies"
      ],
      "Resource": "arn:aws:iam::000000000000:role/eksctl-minio-cluster*"
    },
    {
      "Sid": "",
      "Effect": "Allow",
      "Action": [
        "iam:GetRole"
      ],
      "Resource": "*"
    },
    {
      "Sid": "",
      "Effect": "Allow",
      "Action": [
        "ec2:RunInstances",
        "ec2:DescribeSubnets",
        "autoscaling:Describe*",
        "ec2:DescribeLaunchTemplateVersions"
      ],
      "Resource": "*"
    },
    {
      "Sid": "",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags"
      ],
      "Resource": "*"
    }}

2.2 创建 OIDC Provider

eksctl utils associate-iam-oidc-provider --region=us-west-2 --cluster=minio-cluster --approve

2.3 创建信任+角色+服务账号

eksctl create iamserviceaccount \
    --name integration-sa \
    --namespace minio-operator \
    --cluster minio-cluster \
    --attach-policy-arn arn:aws:iam::000000000000:policy/minio-eks-minio-cluster-group-scaling \
    --approve \
    --override-existing-serviceaccounts

步骤 3. 安装 Operator

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

3.1 获取JWT登录Operator UI

kubectl -n minio-operator  get secret $(kubectl -n minio-operator get serviceaccount console-sa -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode


pasted image 0 - 2023-04-02T201214.053.png


步骤 4. 端口转发到操作员 UI

kubectl -n minio-operator port-forward svc/console 9090


pasted image 0 - 2023-04-02T201242.797.png


4.1 打开用户界面并创建租户

转到 http://localhost:9090,输入上一步中的 JWT 并创建一个租户。


pasted image 0 - 2023-04-02T201303.510.png


现在点击“创建租户”。


pasted image 0 - 2023-04-02T201325.600.png


填写所需的 MinIO 租户大小和存储类型:


pasted image 0 - 2023-04-02T201402.292.png


步骤 5. 注册 MinIO 支持

要获得 24/7 支持,请发送电子邮件至 support@min.io 并附上您的 AWS 账号以开始使用。

MinIO 是多云成功的关键

立即在 AWS Marketplace 上开始使用MinIO 如果您有任何疑问,请通过 hello@min.io 联系我们或加入Slack 社区


上一篇 下一篇