在 Distributed Cloud 纯软件参考实现上为 kagent 部署 Solo Enterprise

借助 Solo Enterprise for kagent,平台管理员可以在 Google Distributed Cloud (GDC) 纯软件 (GDC-SO) 上部署和管理 AI 智能体。在此参考实现中,您会将容器映像和 Helm 图表镜像到私有 Harbor 注册表,部署 kagent 控制平面、界面和 Solo Enterprise for agentgateway,并查看集群规模调整指南。如需详细了解该架构,请参阅将您自己的 MCP 服务器引入 kagent 参考架构。

前提条件

在开始之前,请确保您可以使用安装了 Chrome、Docker、crane、kubectl、Helm、envsubst 和 gdcloud CLI 的 Linux 工作站。 确保为您的 GDC-SO 环境配置了以下组件:

组件 详细信息或要求 示例值
Google Cloud GDC-SO 项目 与 GDC-SO 集群关联的项目 kagent-enterprise
集群 目标 GDC-SO 集群 user-project-8a210897
Kubernetes 凭证(Connect 网关) 与集群的连接 gcloud container fleet memberships get-credentials user-project-8a210897
私有注册表 Harbor 注册表网址 solo-kagent-enterprise.org-1.zone1.google.gdch.test
项目代码库 项目代码库路径 solo-kagent-enterprise.org-1.zone1.google.gdch.test/kagent-enterprise
拉取 Secret Docker 拉取 Secret 名称 solo-harbor-pull-secret

以下说明适用于 Solo Enterprise for kagent 0.4.0 版及更高版本。

此部署已在 GDC-SO 版本 1.31.5-gke.300 上通过验证。

在 GDC-SO 集群上部署

根据您的集群和注册表配置创建一个 .env 文件:

export PUBLIC_REGISTRY="us-docker.pkg.dev/solo-public/kagent-enterprise-helm/charts"
export PUBLIC_MANAGEMENT_REGISTRY="us-docker.pkg.dev/solo-public/solo-enterprise-helm/charts"
export PUBLIC_AGENTGATEWAY_REGISTRY="us-docker.pkg.dev/solo-public/enterprise-agentgateway/charts"

# Set these based on your desired installation version
export KAGENT_ENT_VERSION=0.4.1
export KAGENT_VERSION=0.9.1
export AGENTGATEWAY_VERSION=v2.4.0-beta.0
export SOLO_LICENSE_KEY="SOLO_LICENSE_KEY"

# Set the following values based on your GDC setup
export PROJECT_ID="kagent-enterprise"
export CLUSTER_NAME="user-project-8a210897"
export NAMESPACE="solo-kagent"
export USER_CONTEXT="user-vm-1-zone1-gdch_console-org-1-zone1-google-gdch-test_user-vm-1"
export MGMT_CONTEXT="user-project-8a210897-zone1-gdch_console-org-1-zone1-google-gdch-test_user-project-8a210897"
export PULL_SECRET_NAME="solo-harbor-pull-secret"

# Set the following values based on your Harbor registry setup
export ORG="ORG"
export ZONE="ZONE"
export PRIVATE_REGISTRY="solo-kagent-enterprise.${ORG}.${ZONE}.google.gdch.test"
export PRIVATE_REPO="${PRIVATE_REGISTRY}/${PROJECT_ID}"
export PRIVATE_CHART_REGISTRY="${PRIVATE_REPO}/charts"

替换以下内容:

  • SOLO_LICENSE_KEY:您的 Solo Enterprise 许可密钥
  • ORG:您的 GDC 组织名称
  • ZONE:您的 GDC 区域名称

创建 Helm 值文件

为这三个图表创建 Helm 值文件。除非您想自定义安装,否则无需修改任何值。您稍后可以在 kagent 界面中配置其他模型和代理。

创建 enterprise-agentgateway-values.yaml 文件:

image:
  registry: ${PRIVATE_REPO}/enterprise-agentgateway
  tag: ${AGENTGATEWAY_VERSION}
licensing:
  licenseKey: ${SOLO_LICENSE_KEY}
imagePullSecrets:
- name: ${PULL_SECRET_NAME}
inferenceExtension:
  enabled: true

创建 kagent-enterprise-values.yaml 文件:

registry: ${PRIVATE_REPO}
cluster: ${CLUSTER_NAME}
imagePullSecrets:
- name: ${PULL_SECRET_NAME}
global:
  imagePullSecrets:
  - name: ${PULL_SECRET_NAME}
oidc:
  skipOBO: true
otel:
  tracing:
    enabled: true
    exporter:
      otlp:
        endpoint: http://solo-enterprise-telemetry-collector.${NAMESPACE}.svc.cluster.local.:4317
        insecure: true
kubernetes:
  jwksUrl: "https://kubernetes.default.svc.cluster.local/openid/v1/jwks"
providers:
  default: OpenAI # Choose the model API type
  OpenAI:
    provider: OpenAI
    model: "/model/gemma-4-12B" # Choose the model
    apiKeySecretRef: "kagent-openai"
    apiKeySecretKey: "none" # Name of the key in the Secret, or "none" if no API key is required
controller:
  agentDeployment:
    podLabels:
      egress.networking.gke.io/enabled: "true"
  imagePullSecrets:
  - name: ${PULL_SECRET_NAME}
  image:
    registry: ${PRIVATE_REPO}
  agentImage:
    registry: ${PRIVATE_REPO}
    repository: "kagent-dev/kagent/app"
    pullSecret: "${PULL_SECRET_NAME}"
licensing:
  createSecret: true
  secretName: "enterprise-kagent-license"
kmcp:
  imagePullSecrets:
  - name: ${PULL_SECRET_NAME}
  image:
    registry: ${PRIVATE_REPO}
  enabled: true
kagent-tools:
  enabled: true
  imagePullSecrets:
  - name: ${PULL_SECRET_NAME}
  tools:
    image:
      registry: ${PRIVATE_REPO}
agents:
  k8s-agent:
    enabled: true
grafana-mcp:
  enabled: false # Pull secret is not supported
tools:
  grafana-mcp:
    enabled: false # Pull secret is not supported
database:
  postgres:
    bundled:
      storageClassName: local-shared
      image:
        registry: ${PRIVATE_REPO}
      enabled: true

创建 management-values.yaml 文件:

cluster: ${CLUSTER_NAME}
context: "${USER_CONTEXT}"

management-crds:
  enabled: false

global:
  imagePullPolicy: IfNotPresent
  imagePullSecrets:
  - name: ${PULL_SECRET_NAME}

products:
  kagent:
    enabled: true
  agentgateway:
    enabled: true
  mesh:
    enabled: false
  agentregistry:
    enabled: false

oidc:
  issuer: ""

traces:
  verbose: false

tunnelserver:
  registry: ${PRIVATE_REPO}
  repository: solo-enterprise
  name: solo-enterprise-tunnel-server

ui:
  backend:
    registry: ${PRIVATE_REPO}
    repository: solo-enterprise
    name: solo-enterprise-ui-backend
    clickhouse:
      migrations:
        registry: ${PRIVATE_REPO}
  frontend:
    registry: ${PRIVATE_REPO}
    repository: solo-enterprise
  telemetryGateway:
    repository: ${PRIVATE_REPO}/otel/opentelemetry-collector-contrib

idp:
  registry: ${PRIVATE_REPO}
  repository: solo-enterprise

telemetry:
  image:
    registry: ${PRIVATE_REPO}
    repository: otel
    name: opentelemetry-collector-contrib
  k8sobjects:
    enabled: true
  metrics:
    enabled: false
  selfMonitoring:
    enabled: false
    verbose: false
  traces:
    enabled: true

clickhouse:
  enabled: true
  image:
    repository: ${PRIVATE_REPO}/clickhouse/clickhouse-server

设置环境

在 .env 和 Helm 值文件所在的目录中,加载环境变量并呈现 Helm 值模板。在同一 shell 会话中运行本指南中的其余命令,以便这些变量保持设置状态:

SCRIPT_DIR="${PWD}"

set -a
source "$SCRIPT_DIR/.env"
set +a

COMMON_FLAGS=(--kube-context "$MGMT_CONTEXT" -n "$NAMESPACE" --create-namespace --insecure-skip-tls-verify)

# Values files live alongside the script. Render them with envsubst into
# *.generated.yaml siblings that are then fed to helm upgrade.

MANAGEMENT_VALUES_GENERATED="$SCRIPT_DIR/management-values.generated.yaml"
KAGENT_ENTERPRISE_VALUES_GENERATED="$SCRIPT_DIR/kagent-enterprise-values.generated.yaml"
ENTERPRISE_AGENTGATEWAY_VALUES_GENERATED="$SCRIPT_DIR/enterprise-agentgateway-values.generated.yaml"

envsubst < "$SCRIPT_DIR/management-values.yaml"            > "$MANAGEMENT_VALUES_GENERATED"
envsubst < "$SCRIPT_DIR/kagent-enterprise-values.yaml"     > "$KAGENT_ENTERPRISE_VALUES_GENERATED"
envsubst < "$SCRIPT_DIR/enterprise-agentgateway-values.yaml" > "$ENTERPRISE_AGENTGATEWAY_VALUES_GENERATED"

从公共注册表镜像映像和图表

向您的私有 Harbor 注册表对 Docker 和 Helm 进行身份验证,然后从公共注册表镜像 Helm 图表和容器映像:

# Authenticate to the private Harbor registry before mirroring charts and images.
helm registry login "$PRIVATE_REGISTRY"
docker login "$PRIVATE_REGISTRY"

function mirror() {
  if command -v crane &> /dev/null; then
    crane cp "$1" "$2"
  else
    docker pull "$1"
    docker tag "$1" "$2"
    docker push "$2"
  fi
}

MANAGEMENT_CHARTS=(management-crds management)
KAGENT_CHARTS=(kagent-enterprise-crds kagent-enterprise)
AGENTGATEWAY_CHARTS=(enterprise-agentgateway-crds enterprise-agentgateway)

# Mirror Helm chart OCI artifacts to the private registry using the same mirror() helper.

for CHART in "${MANAGEMENT_CHARTS[@]}"; do
  mirror \
    "${PUBLIC_MANAGEMENT_REGISTRY}/${CHART}:${KAGENT_ENT_VERSION}" \
    "${PRIVATE_CHART_REGISTRY}/${CHART}:${KAGENT_ENT_VERSION}"
done

for CHART in "${KAGENT_CHARTS[@]}"; do
  mirror \
    "${PUBLIC_REGISTRY}/${CHART}:${KAGENT_ENT_VERSION}" \
    "${PRIVATE_CHART_REGISTRY}/${CHART}:${KAGENT_ENT_VERSION}"
done

for CHART in "${AGENTGATEWAY_CHARTS[@]}"; do
  mirror \
    "${PUBLIC_AGENTGATEWAY_REGISTRY}/${CHART}:${AGENTGATEWAY_VERSION}" \
    "${PRIVATE_CHART_REGISTRY}/${CHART}:${AGENTGATEWAY_VERSION}"
done

# Discover images by templating the charts directly from their public OCI source.

IMAGES=$( (
  helm template management "oci://${PUBLIC_MANAGEMENT_REGISTRY}/management" \
    --version "$KAGENT_ENT_VERSION" \
    --set products.kagent.enabled=true \
    --set products.agentgateway.enabled=true \
    --set products.agentregistry.enabled=true \
    --set licensing.licenseKey=placeholder
  helm template kagent-enterprise "oci://${PUBLIC_REGISTRY}/kagent-enterprise" \
    --version "$KAGENT_ENT_VERSION" \
    --set licensing.licenseKey=placeholder \
    --set kmcp.licensing.licenseKey=placeholder \
    --set ui.enabled=true \
    --set kagent-tools.enabled=true \
    --set agents.k8s-agent.enabled=true
  helm template enterprise-agentgateway "oci://${PUBLIC_AGENTGATEWAY_REGISTRY}/enterprise-agentgateway" \
    --version "$AGENTGATEWAY_VERSION" \
    --set licensing.licenseKey=placeholder
) | grep "image:" | grep -v '{' | sed 's/.*image: //' | tr -d '" ' | grep -E '^[a-zA-Z0-9].*[:/]' | sort -u)

IMAGES_EXTRA="cr.kagent.dev/kagent-dev/kagent/golang-adk:$KAGENT_VERSION cr.kagent.dev/kagent-dev/kagent/app:$KAGENT_VERSION ghcr.io/kagent-dev/kagent/skills-init:$KAGENT_VERSION"

TARGET_PREFIX="${PRIVATE_REPO//\//\\/}"

for IMG in $IMAGES $IMAGES_EXTRA; do
  echo "From: $IMG"
  NEW_IMG=$(echo "$IMG" | sed s/'us-docker\.pkg\.dev\/solo-public'/"$TARGET_PREFIX"/ | sed s/'^clickhouse\/'/"$TARGET_PREFIX\/clickhouse\/"/ | sed s/'^argoproj\/'/"$TARGET_PREFIX\/argoproj\/"/ | sed s/'^docker.io\/otel\/'/"$TARGET_PREFIX\/otel\/"/ | sed s/'^docker.io\/library\/postgres'/"$TARGET_PREFIX\/library\/postgres"/ | sed s/'^cr.kagent.dev\/kagent-dev\/'/"$TARGET_PREFIX\/kagent-dev\/"/ | sed s/'^docker.io\/mcp\/'/"$TARGET_PREFIX\/mcp\/"/ | sed s/'^ghcr.io\/kagent-dev\/'/"$TARGET_PREFIX\/kagent-dev\/"/)
  echo "To  : $NEW_IMG"
  mirror "$IMG" "$NEW_IMG"
done

在 GDC-SO 集群中创建命名空间

在集群中创建目标命名空间:

kubectl create namespace "$NAMESPACE" --context "$MGMT_CONTEXT" \
    --dry-run=client -o yaml | kubectl apply --context "$MGMT_CONTEXT" -f -

创建 Docker 拉取 Secret 并将其应用于集群

在集群中创建 Docker 注册表拉取 Secret:

kubectl create secret docker-registry "$PULL_SECRET_NAME" \
    --context "$MGMT_CONTEXT" \
    --namespace "$NAMESPACE" \
    --docker-server="$PRIVATE_REGISTRY" \
    --docker-username="REGISTRY_USERNAME" \
    --docker-password="REGISTRY_PASSWORD"

替换以下内容:

  • REGISTRY_USERNAME:您的 Harbor 注册表用户名
  • REGISTRY_PASSWORD:您的 Harbor 注册表密码

安装 kagent

安装 CRD 图表和 Solo Enterprise for kagent Helm 图表:

# Standard clusters allow cluster-scoped resources, so install CRD charts first.

helm upgrade -i management-crds \
  "oci://${PRIVATE_CHART_REGISTRY}/management-crds" \
  "${COMMON_FLAGS[@]}" \
  --version "$KAGENT_ENT_VERSION"

helm upgrade -i kagent-enterprise-crds \
  "oci://${PRIVATE_CHART_REGISTRY}/kagent-enterprise-crds" \
  "${COMMON_FLAGS[@]}" \
  --version "$KAGENT_ENT_VERSION"

helm upgrade -i enterprise-agentgateway-crds \
  "oci://${PRIVATE_CHART_REGISTRY}/enterprise-agentgateway-crds" \
  "${COMMON_FLAGS[@]}" \
  --version "$AGENTGATEWAY_VERSION"

helm upgrade -i management \
  "oci://${PRIVATE_CHART_REGISTRY}/management" \
  "${COMMON_FLAGS[@]}" \
  --version "$KAGENT_ENT_VERSION" \
  --values "$MANAGEMENT_VALUES_GENERATED" \
  --set "licensing.licenseKey=$SOLO_LICENSE_KEY"

helm upgrade -i kagent-enterprise \
  "oci://${PRIVATE_CHART_REGISTRY}/kagent-enterprise" \
  "${COMMON_FLAGS[@]}" \
  --version "$KAGENT_ENT_VERSION" \
  --values "$KAGENT_ENTERPRISE_VALUES_GENERATED" \
  --set "licensing.licenseKey=$SOLO_LICENSE_KEY" \
  --set "kmcp.licensing.licenseKey=$SOLO_LICENSE_KEY" \
  --set "controller.agentImage.tag=$KAGENT_VERSION" \
  --set "controller.skillsInitImage.tag=$KAGENT_VERSION"


helm upgrade -i enterprise-agentgateway \
  "oci://${PRIVATE_CHART_REGISTRY}/enterprise-agentgateway" \
  "${COMMON_FLAGS[@]}" \
  --version "$AGENTGATEWAY_VERSION" \
  --values "$ENTERPRISE_AGENTGATEWAY_VALUES_GENERATED" \
  --set "licensing.licenseKey=$SOLO_LICENSE_KEY"

验证部署

验证 Pod 是否正在命名空间中运行:

kubectl get pods -n "$NAMESPACE" --context "$MGMT_CONTEXT"

输出类似于以下内容:

NAME                                                  READY   STATUS    RESTARTS   AGE
enterprise-agentgateway-5b57c9496b-hfnqq              1/1     Running   0          36m
k8s-agent-796b6674f5-fd8cq                            1/1     Running   0          4m8s
kagent-controller-5f7b44f647-9nd95                    1/1     Running   0          5m31s
kagent-postgresql-688d8c679d-4g9n9                    1/1     Running   0          36m
kagent-tools-6b9f8d58c6-t5zsm                         1/1     Running   0          23m
kmcp-enterprise-controller-manager-7886cdfb57-kgnmw   1/1     Running   0          23m
management-clickhouse-shard0-0                        1/1     Running   0          14m
solo-enterprise-telemetry-collector-0                 1/1     Running   0          23m
solo-enterprise-ui-7c7c889d6-frkvn                    5/5     Running   0          9m34s

将本地端口转发到 solo-enterprise-ui 服务:

kubectl port-forward -n "$NAMESPACE" --context "$MGMT_CONTEXT" \
    svc/solo-enterprise-ui 9090:80

在浏览器中,前往 http://localhost:9090 打开 Solo Enterprise for kagent 界面,然后配置模型和智能体:

Solo Enterprise for kagent UI dashboard。

性能注意事项和部署容量调整

以下部分介绍了组件资源消耗如何扩缩,并提供了单集群部署的基准存储和资源大小。

扩缩特性

在单集群安装中,随着代理数量和每个代理的请求负载增加,资源消耗会发生质的变化(management 和 kagent-enterprise 图表,不含中继)。在调整资源分配或规划容量之前,请使用这些特征来确定哪些组件对特定伸缩维度敏感。

影响伸缩的关键架构因素

  • 智能体到 LLM 的流量是直接传输的。智能体直接调用大语言模型 (LLM) 端点(例如集群内模型服务)。此流量不会通过控制器或任何其他管理平面组件。添加代理或提高请求速率不会增加任何共享组件上与 LLM 相关的负载。
  • MCP 服务器位于智能体工具执行的热路径中。当智能体调用由 Model Context Protocol (MCP) 服务器支持的工具时,该调用是同步且阻塞的。MCP 服务器延迟时间和吞吐量会直接影响智能体请求延迟时间。每个已部署的 MCPServer 资源都是一个单独的 Deployment,具有自己的资源封装。
  • 遥测是主要的伸缩依据。指标、跟踪记录和 Kubernetes 对象快照都会通过遥测流水线流入 ClickHouse。此流水线会随着代理数量和请求量的增加而增长,是系统中最消耗资源的部分。
  • 隧道服务器存在,但在单集群安装中不承载任何有意义的流量。tunnel-server 容器在界面 Pod 中运行,但它没有要提供服务的客户端,也不会增加伸缩压力。

组件伸缩行为

以下部分介绍了各个组件如何随代理数量和请求负载而扩缩。

kagent-controller
  • 随智能体数量呈次线性增长,每个智能体都保持一个智能体到智能体 (A2A) 流连接。
  • 对请求量不敏感,因为 LLM 调用和工具执行会绕过控制器。
  • 支持横向伸缩,以分配连接和政策评估负载。
KMCP 企业控制器

KMCP 企业控制器仅由 MCPServer 资源更改事件驱动,对代理数量或请求量不敏感。

MCP 服务器
  • 为每个 MCPServer 自定义资源 (CR) 部署一个 Deployment;舰队规模会随着部署的 MCPServer 资源数量而增长。
  • 在智能体工具执行的同步热路径中运行,延迟时间和吞吐量会直接影响智能体。
  • 当多个代理同时调用共享服务器时,会根据所有使用方的总工具调用速率进行扩缩。
  • 默认情况下,将内置服务器(grafana-mcp、querydoc)作为单个副本运行;对于大量共享使用,请增加副本或限制。
  • 为用户部署的 MCP 服务器使用用户定义的映像、资源请求和资源限制。
遥测收集器
  • 随请求量线性扩缩 - 每个请求都会发出指标和跟踪记录(可选)。
  • 是在高代理负载下最有可能受到资源限制的组件。
  • 在多集群安装中,充当远程集群的 OpenTelemetry 协议 (OTLP) 网关(端口 4316-4318 上的接收器);不存在单独的网关 Pod。
  • 使用 k8sobjects 边车,该边车会随 Kubernetes 资源清单大小(而非请求速率)而扩缩。
ClickHouse

在持续负载下,ClickHouse 是主要的资源瓶颈。存储空间、内存和 CPU 都会随着以下因素而增长:

  • 代理数量:每增加一种代理类型,指标基数(唯一标签组合)就会增加。
  • 请求量:每个请求都会生成指标数据点和跟踪记录 span,这些数据点和 span 会被写入并编入索引。
  • Kubernetes 资源清单大小:无论请求负载如何,系统都会定期存储 k8sobjects 快照。

写入吞吐量是最初的压力点;随着数据量增长,如果不调整架构或保留策略,查询性能(由界面后端使用)会下降。 默认配置针对的是中等单节点部署;负载较重时,可能需要增加 replicasPerShard 或 shards,或调整保留 TTL。

界面后端
  • 无状态且受查询限制;可根据 ClickHouse 中的数据量(而非实时请求吞吐量)进行扩缩。
  • 随着代理数量和历史数据的增加,舰队图和跟踪查询的费用也会增加。
代理
  • 基于 Python 的智能体:
    • 每个代理都是一个独立的 Deployment,添加代理纯粹是叠加,不会产生共享状态惩罚。
    • 每个代理的资源消耗量会随着请求并发量和工具链深度而扩缩。
  • 基于 Go 的代理:
    • 空闲内存用量减少约 36 倍(每个代理在静止状态下为 7 MB,而之前为 253 MB)。
    • 使用大约小 11 倍的容器映像(29.7 MB 与 335.4 MB)。
    • 启动速度大约快 6.7 倍(2.7 秒,而之前为 18.2 秒)。

扩缩特性摘要

下表总结了每个组件如何随代理数量和请求负载而扩缩:

组件 对智能体数量敏感 对请求负载敏感 备注
控制器 中 低 为每个智能体维护 A2A 流;不受 LLM 调用速率的影响
扩缩器 无 无 事件驱动型,实际上是静态的
KMCP 企业控制器 无 无 仅对 MCPServer 资源更改做出响应
MCP 服务器 高 高 每个 MCPServer CR 一个 Deployment;在工具执行的热路径中
遥测收集器 高 高 主要伸缩面;与请求量呈线性关系
ClickHouse 高 高 主要瓶颈;由基数和写入速率驱动
界面后端 低 低 受查询限制;受历史数据量影响
智能体(Python 和 Go) 不适用 高 独立部署;通过并发进行扩缩

存储空间大小调整

下表提供了有关初始存储卷大小的初步建议:

  • PostgreSQL 存储(kagent 状态,包括会话、记忆和生命周期管理)会随着聊天会话数量的增加而线性扩缩。
  • ClickHouse 存储空间(跟踪)也会随着唯一聊天会话数量的增加而线性扩缩。
组件 建议的初始音量
PostgreSQL 50 GiB
ClickHouse 50 GiB

部署规模调整

以下部分列出了 Helm 图表的默认 CPU、内存和存储资源请求和限制。

管理图表

management 图表会部署 solo-enterprise-ui Pod、独立遥测收集器和 ClickHouse。

solo-enterprise-ui 个 Pod 容器

下表列出了 solo-enterprise-ui Pod 容器的默认资源请求和限制:

容器 已启用 CPU 请求 CPU 上限 内存请求 内存上限
ui-backend 始终 250m 500m 512Mi 1024Mi
ui-frontend 始终 250m 500m 512Mi 1024Mi
k8sobjects-collector telemetry.k8sobjects.enabled 100m 300m 384Mi 768Mi
idp autoAuth 已启用 100m 250m 256Mi 512Mi
遥测收集器(StatefulSet 或 Deployment)

下表列出了遥测收集器的默认资源请求和限制:

组件 CPU 请求 CPU 上限 内存请求 内存上限
telemetry-collector 200m 1000 米 512Mi 2Gi

遥测网关(OpenTelemetry 收集器)也会单独定义自己的资源:

组件 CPU 请求 CPU 上限 内存请求 内存上限
telemetry-gateway 100m 500m 300Mi 1024Mi
ClickHouse 子图表

下表列出了 ClickHouse 子图表的默认资源请求和限制,这些请求和限制基于 Bitnami 2xlarge 预设,并使用 replicasPerShard 和 shards 值进行配置:

组件 CPU 请求 CPU 上限 内存请求 内存上限 临时存储
clickhouse 1000m(1 个核心) 6000m(6 核) 3072Mi (3 GiB) 12288Mi (12 GiB) 50Mi

kagent-enterprise 图表

kagent-enterprise 图表会部署核心控制器、kmcp-enterprise 子图表、内置 MCP 工具服务器和可选智能体。

核心组件

下表列出了核心控制器的默认资源请求和限制:

组件 已启用 CPU 请求 CPU 上限 内存请求 内存上限
controller 始终 100m 2000m(2 个核心) 128Mi 512Mi
kmcp-enterprise 子图表

下表列出了 kmcp-enterprise 控制器的默认资源请求和限制:

组件 CPU 请求 CPU 上限 内存请求 内存上限
kmcp-enterprise-controller 100m 500m 128Mi 512Mi
内置工具

下表列出了内置工具服务器的默认资源请求和限制:

组件 已启用 CPU 请求 CPU 上限 内存请求 内存上限
kagent-tools kagent-tools.enabled 100m 1000 米 256Mi 1Gi
grafana-mcp grafana-mcp.enabled 100m 500m 128Mi 512Mi
querydoc querydoc.enabled 100m 500m 128Mi 512Mi
代理

所有代理都共享相同的默认资源配置文件。每个代理默认处于停用状态,需要单独启用:

代理 CPU 请求 CPU 上限 内存请求 内存上限
k8s-agent 100m 1000 米 256Mi 1Gi
kgateway-agent 100m 1000 米 256Mi 1Gi
istio-agent 100m 1000 米 256Mi 1Gi
promql-agent 100m 1000 米 256Mi 1Gi
observability-agent 100m 1000 米 256Mi 1Gi
argo-rollouts-agent 100m 1000 米 256Mi 1Gi
helm-agent 100m 1000 米 256Mi 1Gi
cilium-policy-agent 100m 1000 米 256Mi 1Gi
cilium-manager-agent 100m 1000 米 256Mi 1Gi
cilium-debug-agent 100m 1000 米 256Mi 1Gi