快速入门

本快速入门会创建一个 MCPServer 资源,并验证 operator 会创建对应的 Kubernetes DeploymentService

先决条件

  • 已安装 Alauda Build 的 MCP Lifecycle Operator。请参见安装
  • 已为目标集群配置 kubectl
  • 已将一个 MCP server 镜像推送到目标集群可以拉取的 registry。

创建 MCPServer

应用一个 MCPServer 资源。当前 API 仅支持 spec.source.type 使用 ContainerImage。请将 <registry>/<project>/<mcp-server-image>:<tag> 替换为一个在配置端口上暴露 MCP HTTP endpoint 的 MCP server 镜像。例如,上游 MCP Lifecycle Operator 示例使用的是 quay.io/containers/kubernetes_mcp_server:latest;仅当目标集群可以从 quay.io 拉取镜像时才使用该镜像。

kubectl apply -f - <<EOF
apiVersion: mcp.x-k8s.io/v1alpha1
kind: MCPServer
metadata:
  name: kubernetes-mcp-server
  namespace: default
spec:
  source:
    type: ContainerImage
    containerImage:
      ref: <registry>/<project>/<mcp-server-image>:<tag>
  config:
    port: 8080
EOF

operator 会在同一命名空间中创建一个名为 kubernetes-mcp-serverDeploymentService

验证 MCPServer

检查 MCPServer 状态:

kubectl get mcpservers -n default
kubectl get mcpserver kubernetes-mcp-server -n default -o yaml

kubectl get mcpservers 的预期输出:

NAME                    READY   ACCEPTED   IMAGE                                           PORT   ADDRESS                                                        AGE
kubernetes-mcp-server   True    True       <registry>/<project>/<mcp-server-image>:<tag>    8080   http://kubernetes-mcp-server.default.svc.cluster.local:8080/mcp   1m

ADDRESS 列是其他工作负载可以调用的集群内部 MCP 端点。

验证受管资源:

kubectl get deployment kubernetes-mcp-server -n default
kubectl get service kubernetes-mcp-server -n default
kubectl get pods -n default -l mcp-server=kubernetes-mcp-server

Deployment 应处于可用状态,Service 应已存在,且 pods 应为 Running

测试端点

转发生成的 Service

kubectl port-forward service/kubernetes-mcp-server 8080:8080 -n default

在另一个终端中测试 server:

curl http://localhost:8080/healthz
curl http://localhost:8080/mcp

确切的响应取决于 MCP server 镜像。端点可访问即可确认 operator 创建的 Service 正在将流量路由到 MCP server pod。

更新端口或路径

默认的 MCP 路径为 /mcp。如果要显式设置该路径或更改端口,请更新 spec.config

kubectl patch mcpserver kubernetes-mcp-server -n default --type merge -p '{
  "spec": {
    "config": {
      "port": 9090,
      "path": "/mcp"
    }
  }
}'

调和完成后,验证更新后的地址:

kubectl get mcpserver kubernetes-mcp-server -n default
kubectl get service kubernetes-mcp-server -n default

常见配置

使用 spec.config 配置容器级设置,例如参数、环境变量和挂载的配置:

spec:
  source:
    type: ContainerImage
    containerImage:
      ref: <registry>/<project>/<mcp-server-image>:<tag>
  config:
    port: 8080
    path: /mcp
    arguments:
      - --config
      - /etc/mcp/config.toml
    env:
      - name: LOG_LEVEL
        value: info
      - name: API_KEY
        valueFrom:
          secretKeyRef:
            name: mcp-server-secret
            key: api-key
    storage:
      - path: /etc/mcp
        permissions: ReadOnly
        source:
          type: ConfigMap
          configMap:
            name: mcp-server-config

引用的 ConfigMaps 和 Secrets 必须与 MCPServer 位于同一命名空间中。

使用 spec.runtime 配置生成的 Deployment

spec:
  runtime:
    replicas: 2
    resources:
      requests:
        cpu: 100m
        memory: 128Mi
      limits:
        cpu: 500m
        memory: 256Mi
    health:
      livenessProbe:
        httpGet:
          path: /healthz
          port: 8080
      readinessProbe:
        httpGet:
          path: /healthz
          port: 8080

当 MCP server 需要特定的 Kubernetes service account 或更严格的 pod 设置时,使用 spec.runtime.security

spec:
  runtime:
    security:
      serviceAccountName: mcp-server
      podSecurityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
      securityContext:
        allowPrivilegeEscalation: false
        readOnlyRootFilesystem: true
        runAsNonRoot: true
        capabilities:
          drop:
            - ALL

如果 MCP server 不保留按客户端划分的会话状态,请将 spec.mcp.stateless 设置为 true,这样生成的 Service 就可以在多个副本之间自由进行负载均衡:

spec:
  runtime:
    replicas: 3
  mcp:
    stateless: true

清理

删除 MCPServer 资源:

kubectl delete mcpserver kubernetes-mcp-server -n default

operator 会移除受管的 DeploymentService