milvus集群版使用阿里云OSS

841 阅读4分钟

背景

milvus会将元信息存放在etcd中,文件存放在minio中。如果自建minio,需要随着使用量增加,扩容磁盘较为麻烦。官方也提供了S3云提供商("aws", "gcp", "aliyun")的方式存放文件。本文为阿里云 OSS 存储方式实践。

准备资源

  1. 阿里云ack集群
  2. 阿里云OSS bucket

创建阿里云OSS Bucket

创建Bucket milvus-orrn

开启阿里云ACK RRSA功能

阿里云文档地址:www.alibabacloud.com/help/zh/ack…

RRSA功能目前仅支持1.22及以上版本的集群,即ACK标准版、ACK Pro版、ASK标准版和ASK Pro版集群。

启用RRSA功能

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏,单击集群
  3. 集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群详情页面,单击基本信息页签,然后在集群信息区域单击RRSA OIDC对应的启用RRSA
  5. 在弹出的启用RRSA对话框,单击确定
    基本信息区域,当集群状态由更新中变为运行中后,表明该集群的RRSA特性已变更完成,RRSA OIDC右侧将显示OIDC提供商的URL链接和ARN信息。

使用RRSA功能

  1. 安装ack-pod-identity-webhook组件。

    a. 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理
    b. 在组件管理页面,单击安全页签,找到ack-pod-identity-webhook组件,单击组件右下方的安装
    c. 在提示对话框确认组件信息后,单击确定

配置权限

创建RAM账号

  1. 创建ram账号 image.png
  2. 授权sts权限 image.png

创建RAM角色

创建一个名为rrsa-role-milvus的RAM角色。

  1. 使用阿里云账号登录RAM控制台
  2. 在左侧导航栏,选择身份管理 > 角色,然后在角色页面,单击创建角色
  3. 创建角色面板,选择可信实体类型为身份提供商,然后单击下一步
  4. 配置角色页面,配置如下角色信息后,单击完成
    本示例配置如下。
配置项描述本文示例参数
角色名称demo-role-for-rrsa。rrsa-role-milvus
备注选填有关该角色的备注信息。rrsa-role-milvus
身份提供商类型OIDCOIDC
选择身份提供商ack-rrsa-<cluster_id>。其中,<cluster_id>为您的集群ID。ack-rrsa-c6e78616e09974a7fa143db06d5ccbd53
限制条件oidc:iss:保持默认。
oidc:aud:选择sts.aliyuncs.com
oidc:sub:条件判定方式选择StringEquals,值的格式为system:serviceaccount:<namespace>:<serviceAccountName>
<namespace>:应用所在的命名空间。
<serviceAccountName>:服务账户名称。
根据测试应用的信息,此处需要填入system:serviceaccount:rrsa-demo:demo-sa
oidc:iss oidc-ack-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/c6e78616e09…
oidc:aud sts.aliyuncs.com
oidc:sub system:serviceaccount:milvus:milvus-serviceaccount

以下为配置截图: image.png

image.png

为RAM角色授权

需授权以下权限:

  1. bucket(milvus-orrn)读写权限。示例:
{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "oss:*",
            "Resource": [
                "acs:oss:*:*:milvus-orrn",
                "acs:oss:*:*:milvus-orrn/*"
            ]
        },
        {
            "Action": [
                "oss:Get*",
                "oss:List*"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

配置namespace

为命名空间(milvus)增加标签pod-identity.alibabacloud.com/injection: 'on'

部署方式

helm方式部署

  1. 添加chart仓
$ helm repo add milvus https://milvus-io.github.io/milvus-helm/
  1. 更新chart仓
$ helm repo update
  1. 部署milvus
helm upgrade --install milvus milvus/milvus -n milvus -f values.yaml
#values.yaml
image:
  all:
    repository: milvusdb/milvus
    tag: v2.2.13
  tools:
    repository: milvusdb/milvus-config-tool
    tag: v0.1.1
serviceAccount:
  create: true
  name: milvus-serviceaccount
  annotations: 
    pod-identity.alibabacloud.com/role-name: rrsa-role-milvus # 此处为RAM角色名称
standalone:
  replicas: 0
extraConfigFiles:
  user.yaml: |+
    common:
      security:
        authorizationEnabled: true
proxy:
  replicas: 1
rootCoordinator:
  replicas: 1
queryCoordinator:
  replicas: 1
queryNode:
  replicas: 1
indexCoordinator:
  replicas: 1
indexNode:
  replicas: 1
dataCoordinator:
  replicas: 1
dataNode:
  replicas: 1
minio:
  enabled: false
externalS3:
  enabled: true
  host: oss-cn-hangzhou-internal.aliyuncs.com #阿里云OSS endpoint地址
  port: 443 # 80端口报错,必须使用443
  accessKey: LT******************** #阿里云Ram账号ak
  secretKey: ********************** #阿里云Ram账号ak
  useSSL: true
  bucketName: milvus-orrn #阿里云bucket名称
  rootPath: "" #根据个人需求填写路径,可不填
  useIAM: true #aliyun必须使用IAM方式
  cloudProvider: aliyun #配置为aliyun
etcd:
  enabled: true
  name: etcd
  replicaCount: 3
  image:
    repository: "milvusdb/etcd"
    tag: "3.5.5-r2"    
  persistence:
    enabled: true
    storageClass: alicloud-nas-cnfs
    accessMode: ReadWriteOnce
    size: 20Gi
pulsar:
  enabled: true
  zookeeper:
    replicaCount: 1
    resources:
      requests:
        memory: 512Mi
        cpu: 50m
      limits:
        memory: 2048Mi
        cpu: 1
    volumes:
      persistence: true
      data:
        name: data
        size: 20Gi
        storageClassName: alicloud-nas-cnfs
    configData:
      PULSAR_MEM: >
        -Xms512m
        -Xmx512m
  bookkeeper:
    replicaCount: 2
    volumes:
      journal:
        name: journal
        size: 20Gi
        storageClassName: alicloud-nas-cnfs
      ledgers:
        name: ledgers
        size: 20Gi
        storageClassName: alicloud-nas-cnfs
    resources:
      requests:
        memory: 512Mi
        cpu: 10m
      limits:
        memory: 2048Mi
        cpu: 1
    configData:
      PULSAR_MEM: >
        -Xms512m
        -Xmx512m
        -XX:MaxDirectMemorySize=512m
    autorecovery:
      resources:
        requests:
          memory: 256Mi
          cpu: 50m
      limits:
        memory: 1024Mi
        cpu: 1
  broker:
    component: broker
    replicaCount: 1
    resources:
      requests:
        memory: 512Mi
        cpu: 20m
      limits:
        memory: 2048Mi
        cpu: 1
    configData:
      PULSAR_MEM: >
        -Xms512m
        -Xmx512m
        -XX:MaxDirectMemorySize=512m
  proxy:
    replicaCount: 1
    resources:
      requests:
        memory: 256Mi
        cpu: 10m
      limits:
        memory: 1024Mi
        cpu: 1
    configData:
      PULSAR_MEM: >
        -Xms256m -Xmx256m
      PULSAR_GC: >
        -XX:MaxDirectMemorySize=256m
      httpNumThreads: "10"
attu:
  enabled: true
  name: attu
  image:
    repository: zilliz/attu
    tag: v2.2.7
metrics:
  enabled: true
  serviceMonitor:
    enabled: true
    interval: "15s"