学习 / 开始使用 Milvus 在 GCP Kubernetes 上高效部署 Milvus:开源数据库管理指南

2024-07-25

By Roy Lam

学习 / 开始使用 Milvus 在 GCP Kubernetes 上高效部署 Milvus:开源数据库管理指南

引言 向量数据库如 Milvus 支持强大的相似性搜索,以基于内容的检索能力革新了行业。Milvus 是一个开源向量数据库,擅长高效存储、管理和搜索大量高维向量嵌入,释放非结构化数据的潜力,增强 AI 应用和机器学习模型理解上下文、细微差别和语义关系的能力。 在 Google Cloud Platform (GCP) 环境中自行托管 Kubernetes (K8s) 上的 Milvus 有许多好处。它提供了部署的灵活性和控制权,允许组织根据其特定需求定制设置。K8s 支持无缝扩展和负载均衡,确保高效的资源利用和高可用性。GCP 生态系统提供强大的安全性、监控和与其他 GCP 服务的集成,简化了 Milvus 部署的整体管理和操作。自行托管使组织能够充分利用 Milvus 的全部潜力,同时保持对其数据和基础设施的控制。

为什么选择 GCP 上的 Kubernetes 部署 Milvus? 在 K8s 上部署 Milvus,这是一个为可扩展和快速向量数据搜索设计的开源向量数据库,提供了可扩展性、弹性和管理性方面的显著优势。以下是 K8s 成为 Milvus 部署的理想选择的几个原因,特别是在 GCP 上:

  • 可扩展性:K8s 擅长管理水平扩展,允许 Milvus 容器无缝扩展以处理不同的工作负载和大型数据集。这种能力对于维护向量搜索操作的性能和效率至关重要,是成功的云部署策略的关键组成部分。
  • 弹性:K8s 通过其自愈机制和对持久卷的支持提高了 Milvus 的弹性。这些特性确保了高可用性和数据持久性,对于维护强大的数据库安全至关重要。
  • 管理性:从管理的角度来看,K8s 通过自动化的推出、回滚和声明式配置简化了部署。这简化了像 Milvus 这样的复杂应用程序的维护,这对于任何开源项目来说都是至关重要的。
  • 与 GCP 服务的集成:在 GCP 环境中的 K8s 上部署 Milvus 通过与 GCP 服务的集成解锁了协同效应和好处:
  • 安全且可扩展的网络:GCP 上的 K8s 集群可以利用 Google 的虚拟专用云 (VPC) 进行安全网络,这对于维护数据库安全至关重要。
  • 高效的负载均衡:GCP 的负载均衡解决方案确保了跨 Milvus 实例的高效请求分发,优化了资源使用和响应时间。
  • 高性能存储:GCP 的持久磁盘非常适合像 Milvus 这样的数据库,可以轻松地附加到 K8s 容器,简化了存储管理并提高了性能。
  • 全面的监控:与 GCP 操作套件集成使得对 Milvus 部署进行全面监控、记录和诊断,这对于维护系统健康和性能至关重要。
  • 成本效益的扩展:GCP 还提供自定义机器类型和抢占式 VM,允许根据工作负载需求以成本效益的方式扩展 Milvus 部署。

这些因素使 K8s 成为在 GCP 上部署 Milvus 的优秀平台,增强了可扩展性、弹性、管理性,并与强大的云服务集成,同时支持开源软件开发的原则。

  1. 先决条件 在 GCP 上部署 Milvus 之前,请确保您已经设置了一个名为 milvus-testing-nonprod 的 GCP 项目。如果您没有项目,可以按照创建和管理项目的说明创建一个。 您需要在本地计算机上安装 gcloud CLI,或使用基于浏览器的 Google Cloud Shell。kubectl 和 Helm 也应该在本地安装,因为它们对于管理 K8s 集群和应用程序至关重要。确保使用您的 GCP 帐户凭据初始化 gcloud CLI,以有效管理您的 GCP 资源。

所需工具和访问权限 要部署 GCP 上的 Milvus,需要以下工具和访问权限:

  1. Google Cloud Platform 帐户:需要访问 GCP 帐户的权限,以创建和管理资源。
  2. gcloud CLI:此命令行界面对于管理 GCP 服务(包括网络和 VM)是必要的。您必须在本地计算机上安装此工具或使用 Google Cloud Shell。
  3. kubectl:这是一个用于 K8s 集群管理的命令行工具。对于部署和管理 K8s 资源至关重要。
  4. Helm:Helm 用于通过图表管理 K8s 应用程序,简化了应用程序的部署和维护。
  5. 网络访问:您需要足够的权限来配置 GCP 项目中的网络和防火墙规则。以下是设置虚拟网络和配置防火墙规则的命令,以确保 Milvus 的安全和功能性连接:

创建 VPC 网络:

--bgp-routing-mode=regional

设置防火墙规则:

--project=milvus-testing-nonprod 
    --network=projects/milvus-testing-nonprod/global/networks/milvus-network 
    --description="Allows ICMP connections from any source to any instance on the network." 
    --direction=INGRESS 
    --priority=65534 
    --source-ranges=0.0.0.0/0 
    --action=ALLOW 
    --rules=icmp

gcloud compute firewall-rules create milvus-network-allow-internal 
    --project=milvus-testing-nonprod 
    --network=projects/milvus-testing-nonprod/global/networks/milvus-network 
    --description="Allows connections from any source in the network IP range to any instance on the network using all protocols." 
    --direction=INGRESS 
    --priority=65534 
    --source-ranges=10.128.0.0/9 
    --action=ALLOW 
    --rules=all

gcloud compute firewall-rules create milvus-network-allow-rdp 
    --project=milvus-testing-nonprod 
    --network=projects/milvus-testing-nonprod/global/networks/milvus-network 
    --description="Allows RDP connections from any source to any instance on the network using port 3389." 
    --direction=INGRESS 
    --priority=65534 
    --source-ranges=0.0.0.0/0 
    --action=ALLOW 
    --rules=tcp:3389

gcloud compute firewall-rules create milvus-network-allow-ssh 
    --project=milvus-testing-nonprod 
    --network=projects/milvus-testing-nonprod/global/networks/milvus-network 
    --description="Allows TCP connections from any source to any instance on the network using port 22." 
    --direction=INGRESS 
    --priority=65534 
    --source-ranges=0.0.0.0/0 
    --action=ALLOW 
    --rules=tcp:22

确保这些工具配置正确,并且您有必要的管理访问权限,以在您的 GCP 项目内执行操作。

在 GCP 上设置 Kubernetes 集群 创建和配置集群 要使用 Google Kubernetes Engine (GKE) 在 GCP 上设置适合 Milvus 的 K8s 集群,请按照以下详细说明操作:

打开 Google Cloud 控制台:导航到 Google Cloud 控制台并使用您的 Google 帐户登录。

访问 GKE:从导航菜单中选择“Kubernetes Engine”,然后选择“集群”。

创建集群:点击“创建”按钮开始配置您的 K8s 集群。

基本配置

命名您的集群:输入“milvus-cluster-1”作为集群名称。 选择区域:选择“us-west1-a”作为集群区域,以确保与您的数据源或用户的接近性。

节点配置

  • 机器类型:为每个节点选择“c2-standard-4”,每节点提供 16 GB 内存,确保最佳性能。
  • 镜像类型:选择“COS_CONTAINERD”。
  • 磁盘类型和大小:将磁盘类型设置为“pd-standard”,大小为 100 GB。

高级设置

取消选中“启用基本认证”框以禁用基本认证。

在“主版本”下拉菜单下将 K8s 版本设置为“1.27.3-gke.100”。

启用 IP 别名以获得更好的网络性能和管理。

部署集群:点击“创建”以提供您的集群。集群准备就绪需要几分钟时间。 一旦集群激活,获取其凭据以进行远程管理

gcloud container clusters get-credentials milvus-cluster-1 --zone "us-west1-a"

Milvus 的集群优化 为了优化您的 GKE 集群以提高 Milvus 性能,请考虑实施以下设置:

  • 资源分配:根据预期的工作负载,调整节点数量。为最佳性能和弹性,建议维护至少 3 个节点。此设置有助于分发负载并确保系统弹性。
  • 网络性能:利用 Google 的虚拟专用云 (VPC) 和高级网络层级。这种增强将提高节点之间的吞吐量,并促进与其他 GCP 服务的有效通信。
  • 存储性能:对于 Milvus 操作至关重要的更好 I/O 性能,选择高性能 SSD (pd-ssd) 而不是标准磁盘 (pd-standard),如果预算允许的话。
  • 磁盘大小:如果您预计处理大型数据集,请考虑增加磁盘大小以适应您的数据存储需求而不降低性能。
  • 扩展和自动扩展:在集群内启用自动扩展以有效管理工作负载波动。重要的是根据观察到的 CPU 和内存使用模式仔细配置自动扩展参数,以在不浪费资源的情况下保持性能。
  • Pod 密度:根据 Milvus 实例的操作要求和节点的容量,您可能需要增加每个节点的最大 Pod 数量。最多支持每个节点 110 个 Pod,这允许在部署中进行显著的扩展和灵活性。

通过仔细配置这些参数,您可以显著提高 Milvus 在您的 GKE 集群上的性能和稳定性,确保管理查询向量数据的强大环境。

  1. 在 Kubernetes 上部署 Milvus 在 K8s 集群上部署 Milvus 涉及设置 Helm,添加 Milvus Helm 仓库,并使用 Helm 部署 Milvus 应用程序。以下是逐步指南:

Helm 安装和设置 Helm 是 Kubernetes 的包管理器,简化了应用程序的部署和管理。要使用 Helm 安装 Milvus,您必须首先安装 Helm 本身,然后添加 Milvus 仓库。

  1. 安装 Helm:按照官方 Helm 安装指南在您的系统上安装 Helm。
  2. 添加 Milvus 仓库:运行以下命令以添加 Milvus Helm 仓库。此仓库包含在 K8s 上部署 Milvus 所有必要图表。

helm repo update

使用 Helm 部署 Milvus 一旦 Helm 设置完成并添加了 Milvus 仓库,您可以继续在您的 K8s 集群上部署 Milvus。

准备配置 创建一个 values.yaml 文件,指定您的 Milvus 部署的配置设置。此文件控制诸如持久性、资源分配和服务类型等各个方面。

helm show values milvus/milvus > values.yaml

部署 Milvus 执行以下命令以部署 Milvus:

helm install -f values.yaml my-release milvus/milvus

在此命令中:

  • -f values.yaml 指定配置文件。
  • my-release 是您的 Helm 版本名称。
  • milvus/milvus 标识要安装的图表。

服务类型 确保 values.yaml 中的 service.type 值设置为 LoadBalancer,如果您计划通过第 4 层负载均衡器公开 Milvus 实例。

验证部署 运行以下命令以查找您的 Milvus 部署的外部 IP 地址: kubectl get services | grep my-release-milvus | grep LoadBalancer | awk '{print $4}'

此命令有助于确认所有 pod 正在平稳运行,并且服务是可访问的。

  1. 为 GCP 上的 Milvus 配置持久存储 持久卷设置 要在 GCP 上为 Milvus 设置持久卷 (PV),请先在 Google Cloud 控制台中创建 GCP 持久磁盘。选择合适的磁盘类型和大小。接下来,在 K8s 中定义一个引用此磁盘的 PV,指定存储容量、访问模式和磁盘名称等属性。最后,创建一个持久卷声明 (PVC) 以从您的 PV 请求存储,确保它符合您的 Milvus 部署要求。

存储管理实践 在 GCP 上进行有效的存储管理,定期使用 GCP 快照备份您的 Milvus 数据以防止数据丢失。通过 Google Cloud 的操作套件自动化这些备份并监控它们的状态。此外,注意磁盘使用情况和性能指标,及时扩展您的存储资源。实施警报以监控异常活动,维护数据完整性并优化成本,确保您的 Milvus 安装继续高效安全地运行。

访问和管理 Milvus 访问技术

  • 内部访问:

  • 使用内部网络配置和服务发现机制在集群内访问 Milvus。

  • 外部访问:

  • 通过公开的端点访问 Milvus,例如:

  • RESTful API

  • SDKs

  • 通过公共 IP 地址或域名连接。

  • 管理工具

  • Milvus Insight:

    • 用于交互式管理的基于 GUI 的工具。
    • 监控系统健康和查询性能。
    • 高效管理资源。
  • 命令行界面 (CLI):

    • 为高级用户提供直接命令控制。

示例用法 导入必要的库 首先,导入必要的库和模块。 code block

连接到 Milvus 一旦您获得了集群凭据或 API 密钥,现在就可以使用它连接到您的 Milvus。

# 1. Set up a Milvus client
client = MilvusClient(
    uri=”http://my-cluster.com/endpoint:19530”,
    token=”mypassword”,
    uri="http://localhost:19530"
)

创建集合 在 Milvus 中,您需要将向量嵌入存储在集合中。存储在集合中的所有向量嵌入共享相同的维度和用于测量相似性的距离度量。您可以以以下任一方式创建集合。

快速设置 要在快速设置模式下设置集合,您只需要设置集合名称和集合的向量字段的维度。

python

# 2. 在快速设置模式下创建集合client.create_collection( collection_name="quick_setup", dimension=5)

自定义设置 要自己定义集合模式,使用自定义设置。通过这种方式,您可以定义集合中每个字段的属性,包括其名称、数据类型和特定字段的额外属性。

# 3. Create a collection in customized setup mode

# 3.1. Create schema
schema = MilvusClient.create_schema(
    auto_id=False,
    enable_dynamic_field=True,
)

# 3.2. Add fields to schema
schema.add_field(field_name="my_id", datatype=DataType.INT64, is_primary=True)
schema.add_field(field_name="my_vector", datatype=DataType.FLOAT_VECTOR, dim=5)

# 3.3. Prepare index parameters
index_params = client.prepare_index_params()

# 3.4. Add indexes
index_params.add_index(
    field_name="my_id"
)

index_params.add_index(
    field_name="my_vector", 
    index_type="AUTOINDEX",
    metric_type="IP"
)

# 3.5. Create a collection
client.create_collection(
    collection_name="customized_setup",
    schema=schema,
    index_params=index_params
)

在上述设置中,您在创建集合时具有定义集合的各种方面的灵活性,包括其模式和索引参数。

插入数据 在快速设置和自定义设置模式下创建的集合都已建立索引并加载。一旦您准备好,可以插入一些示例数据。

    # 3. Create a collection in customized setup mode

    # 3.1. Create schema
    schema = MilvusClient.create_schema(
        auto_id=False,
        enable_dynamic_field=True,
    )

    # 3.2. Add fields to schema
    schema.add_field(field_name="my_id", datatype=DataType.INT64, is_primary=True)
    schema.add_field(field_name="my_vector", datatype=DataType.FLOAT_VECTOR, dim=5)

    # 3.3. Prepare index parameters
    index_params = client.prepare_index_params()

    # 3.4. Add indexes
    index_params.add_index(
        field_name="my_id"
    )

    index_params.add_index(
        field_name="my_vector", 
        index_type="AUTOINDEX",
        metric_type="IP"
    )

    # 3.5. Create a collection
    client.create_collection(
        collection_name="customized_setup",
        schema=schema,
        index_params=index_params
    )

获取实体 如果您知道要检索的实体的 ID,可以按以下方式通过其 ID 获取实体:

# 5. Get entities by IDs
res = client.get(
    collection_name="quick_setup",
    ids=[1,2,3],
    output_fields=["color", "vector"]
)

print(res)

删除实体 Milvus 允许通过 ID 和过滤器删除实体。 # 6. Delete entities by IDs res = client.delete( collection_name="quick_setup", ids=[0,1,2,3,4] )

print(res)

# 7. 删除集合

)

本指南提供了如何使用 Milvus 插入、检索和删除数据以及创建集合的概述。请注意,数据插入过程可能需要一些时间。建议在插入数据后等待几秒钟,然后再进行相似性搜索。过滤器表达式可以用于搜索和查询请求。但是,它们对于查询请求是强制性的。

在 Milvus 上提交开源问题 当您遇到 Milvus 向量数据库的问题时,提交问题的流程直接但需要注重细节,以帮助维护者有效理解和解决问题:

检查现有问题:在提交新问题之前,请访问 Milvus GitHub Issues 页面,检查是否有其他人已经报告了相同的问题。这有助于避免重复问题报告。

创建新问题:如果问题尚未报告,请创建一个新问题。确保提供详细的描述,包括:

    1. 重现步骤:清楚地描述重现错误的步骤。这对于维护者看到问题的实际发生至关重要。
    2. 预期结果:描述在执行上述步骤时预期发生的情况。
    3. 实际结果:清楚地说明实际发生的情况,包括任何错误消息或不正确的行为。
    4. 环境细节:包括 Milvus 版本、操作系统和任何相关配置的细节。
    5. 日志/错误消息:如果可用,附上日志或错误消息。使用 Markdown 格式化日志,使其更易于阅读。

提交问题:一旦您整理了所有必要的信息,提交问题。Milvus 社区和维护者将审查它,并在需要时提供反馈或请求更多信息。

解决常见的 Milvus 部署问题 对于 Milvus 的常见部署问题,请考虑以下故障排除步骤:

  • 检查 Docker 日志:如果您在容器中运行 Milvus,请使用命令 docker logs <container_id> 检查是否有任何错误消息,可能表明出了什么问题。
  • 审查兼容性:确保 Milvus 部署的所有组件彼此兼容。Milvus GitHub 仓库的文档通常包括特定版本要求和兼容性信息。
  • 配置检查:验证所有配置文件是否根据 Milvus GitHub 仓库中提供的文档正确设置。

Milvus 社区和支持资源 如果您需要进一步的帮助,可以访问几个支持资源:

  • Milvus Discord 社区:加入 Milvus Discord 社区,进行实时讨论和从其他用户和 Milvus 团队获得支持。您可以使用此邀请链接加入:Milvus Discord。
  • GitHub 讨论:对于更结构化的讨论或分享想法,请查看 GitHub 上的 Milvus 讨论。
  • GCP 部署:如果您的部署问题特定于 GCP,请参阅 Google Cloud Platform 文档或联系 GCP 支持以获得专门帮助。

有效利用这些资源将帮助您解决问题,并充分利用您与 Milvus 的体验。

) code block # # 5. Get e # 6. Delet

  • Roy Lam

    Roy Lam

    Freelance Technical Writer

    准备好开始了吗?

    立刻创建 Zilliz Cloud 集群,存储和检索您的向量。

    免费试用 Zilliz Cloud