主题
安装 Mission Control
安装 Mission Control,一个用于在 Kubernetes 上监控、配置和操作自托管 LangSmith 的集群内控制台。
Mission Control 是一个用于在 Kubernetes 上监控、配置和操作 LangSmith 的集群内控制台。它运行在你的集群内部,默认通过 kubectl port-forward 访问,因此不需要 ingress。
有两条安装路径:
| 路径 | 最适合 |
|---|---|
| 快速安装 | 能运行经审阅的 shell 安装器、想要最短设置流程的客户。 |
| 手动安装 | 不允许安装器脚本、或需要逐条审阅每个 Kubernetes 命令的组织。 |
公开的安装资源包括:
install-script.sh:一个安装器,含独立的prereqs、namespace、secret、values、install和forward步骤。values.yaml:仅端口转发安装的默认 Helm values。
Mission Control 镜像发布到两个 Docker Hub 仓库:langchain/mission-control-backend 和 langchain/mission-control-frontend。可用以下命令查看最新镜像:
bash
docker pull langchain/mission-control-backend:latest
docker pull langchain/mission-control-frontend:latest浏览器审阅链接:
https://github.com/langchain-ai/helm/tree/main/charts/mission-control/install-script.shhttps://github.com/langchain-ai/helm/tree/main/charts/mission-control/values.yaml
下面的命令使用原始 GitHub URL,以便 curl 能直接下载文件。如果你从不同的仓库或分支发布这些文件,请替换下方的原始基础 URL。
bash
MC_RAW_BASE=https://raw.githubusercontent.com/langchain-ai/helm/main/charts/mission-control前置条件
| 工具 | 最低版本 | 安装示例 |
|---|---|---|
kubectl | 1.24+ | brew install kubectl |
helm | 3.x | brew install helm |
curl | 任何当前版本 | 通常已预装 |
你必须针对已安装或将要安装 LangSmith 的那个 Kubernetes 集群运行安装器。继续之前请确认活动上下文:
bash
kubectl config current-context安装器身份需要权限来创建 Mission Control 命名空间资源和集群范围的 RBAC:
bash
kubectl auth can-i create clusterrole
kubectl auth can-i create clusterrolebinding
kubectl auth can-i create serviceaccount -n langsmith
kubectl auth can-i create deployment -n langsmith
kubectl auth can-i create secret -n langsmith这五个命令都应返回 yes。有关授予 Mission Control 的运行时权限,参阅权限参考。
快速安装
运行这三个命令:
bash
curl -fsSLO https://raw.githubusercontent.com/langchain-ai/helm/main/charts/mission-control/install-script.sh && chmod +x install-script.sh
curl -fsSL https://raw.githubusercontent.com/langchain-ai/helm/main/charts/mission-control/values.yaml -o values.yaml
./install-script.sh all -f values.yamlall 步骤会:
- 检查必需的工具和 RBAC。
- 创建
langsmith命名空间。 - 提示输入 Mission Control 用户名和密码。
- 将这些凭据存储在
mission-control-authKubernetes Secret 中。 - 如果
values.yaml尚不存在则写入它。 - 如果你不是从本地 chart 检出运行,则从公共 Helm chart 仓库安装。
- 用 Helm 安装 Mission Control。
RBAC 检查运行:
bash
kubectl auth can-i create clusterrole
kubectl auth can-i create clusterrolebinding
kubectl auth can-i create serviceaccount -n langsmith
kubectl auth can-i create deployment -n langsmith
kubectl auth can-i create secret -n langsmith如果你的组织有意封锁 kubectl auth can-i,但通过另一条控制路径批准了 Helm 安装,运行:
bash
./install-script.sh all -f values.yaml --skip-rbac-check访问 UI
安装完成后,启动一个本地端口转发:
bash
./install-script.sh forward打开 http://localhost:3000 并用你输入的用户名和密码登录。
先审阅脚本
快速安装路径会在运行前下载脚本,因此你可以在第三个命令之前本地审阅 install-script.sh。
安装前编辑 values
快速安装路径也会在运行安装器前下载 values.yaml。如果你需要更改命名空间、资源、ingress、功能标志或诊断持久化,请在第三个命令之前审阅或编辑那个文件。
常见编辑:
| 设置 | 何时更改 |
|---|---|
namespace | 在 langsmith 之外的地方安装 Mission Control。也要给脚本传 -n <namespace>。 |
resources | 你的命名空间有 ResourceQuota,或你的平台要求特定的请求/限制。 |
ingress.enabled 和 ingress.host | 你想通过你的 ingress 控制器而非端口转发来暴露 Mission Control。 |
config.features.* | 你需要移除特定的写权限或外部出口功能。 |
diagnostics.persistence.enabled | 你想让诊断包在 pod 重启和 Helm 升级后仍能存续。 |
backend.podSecurityContext 和 frontend.podSecurityContext | 你的平台要求容器以特定非 root UID(例如 1001)运行。 |
带自定义命名空间的示例:
bash
curl -fsSLO https://raw.githubusercontent.com/langchain-ai/helm/main/charts/mission-control/install-script.sh && chmod +x install-script.sh
curl -fsSL https://raw.githubusercontent.com/langchain-ai/helm/main/charts/mission-control/values.yaml -o values.yaml
./install-script.sh all -n mission-control -f values.yaml脚本命令参考
bash
./install-script.sh prereqs
./install-script.sh namespace
./install-script.sh secret
./install-script.sh values
./install-script.sh install
./install-script.sh forward
./install-script.sh all有用的标志:
bash
./install-script.sh all -n langsmith -f values.yaml
./install-script.sh all -u admin
printf '%s\n' 'your-password' | ./install-script.sh secret -u admin --password-stdin
./install-script.sh all -f values.yaml --skip-rbac-check
./install-script.sh install --chart-ref langchain/mission-control
./install-script.sh install --chart-path /path/to/mission-control
./install-script.sh forward --port 3001:3000手动安装
在不允许安装器脚本时使用此路径。这些步骤只使用普通的 kubectl、helm 和 curl 命令。
Add the Helm repo and get the values file
添加 LangChain Helm 仓库:
bash
helm repo add langchain https://langchain-ai.github.io/helm
helm repo update langchain下载客户 values 文件:
bash
curl -fsSL https://raw.githubusercontent.com/langchain-ai/helm/main/charts/mission-control/values.yaml -o values.yaml安装前审阅 values.yaml。生产环境请保持 config.auth.enabled: true。
如果你的平台要求非 root 容器,Mission Control 可以 UID 1001 运行。在安装前把以下内容添加到 values.yaml:
yaml
backend:
podSecurityContext:
runAsNonRoot: true
runAsUser: 1001
runAsGroup: 1001
fsGroup: 1001
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
extraEnv:
- name: HOME
value: /tmp
- name: HELM_CACHE_HOME
value: /tmp/.cache/helm
- name: HELM_CONFIG_HOME
value: /tmp/.config/helm
- name: HELM_DATA_HOME
value: /tmp/.local/share/helm
frontend:
podSecurityContext:
runAsNonRoot: true
runAsUser: 1001
runAsGroup: 1001
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALLCreate the namespace
bash
kubectl create namespace langsmith --dry-run=client -o yaml | kubectl apply -f -Create the auth credentials Secret
凭据存储在一个 Kubernetes Secret 中。它们不会被写入 values.yaml。
bash
read -r -p "Username: " MC_USER
read -r -s -p "Password: " MC_PASS; echo
kubectl create secret generic mission-control-auth \
--namespace=langsmith \
--from-literal=username="$MC_USER" \
--from-literal=password="$MC_PASS" \
--dry-run=client -o yaml | kubectl apply -f -对于多副本后端部署,在同一个 Secret 中包含一个共享的 JWT 签名密钥,并在 values.yaml 中设置 config.auth.jwtSecretKey: jwtSecret:
bash
JWT_SECRET="$(openssl rand -base64 32)"
kubectl create secret generic mission-control-auth \
--namespace=langsmith \
--from-literal=username="$MC_USER" \
--from-literal=password="$MC_PASS" \
--from-literal=jwtSecret="$JWT_SECRET" \
--dry-run=client -o yaml | kubectl apply -f -Install with Helm
bash
helm upgrade --install mission-control langchain/mission-control \
--namespace langsmith \
--create-namespace \
--values values.yaml \
--rollback-on-failure等待两个工作负载就绪(后端作为 StatefulSet 运行,前端作为 Deployment 运行):
bash
kubectl rollout status statefulset/mission-control-backend -n langsmith
kubectl rollout status deployment/mission-control-frontend -n langsmith你也可以直接检查 pod:
bash
kubectl get pods -n langsmithAccess the UI
bash
kubectl port-forward svc/mission-control-frontend 3000:3000 -n langsmith打开 http://localhost:3000 并用步骤 3 中的凭据登录。
升级
下载最新的公开 values 文件,合并你需要的任何本地更改,然后运行:
bash
helm repo update langchain
helm upgrade --install mission-control langchain/mission-control \
--namespace langsmith \
--values values.yaml \
--rollback-on-failure如果你改从本地 chart 检出操作:
bash
helm upgrade --install mission-control . \
--namespace langsmith \
--values values.yaml \
--rollback-on-failure如果你用快速脚本安装并保留了它:
bash
./install-script.sh install -f values.yaml卸载
bash
helm uninstall mission-control -n langsmith这会移除 Mission Control release。它不会删除你的命名空间或无关的 LangSmith 资源。
对 Mission Control 自有 Secret 的可选清理:
bash
kubectl delete secret -n langsmith \
mission-control-auth \
mission-control-draft \
mission-control-deployed \
mission-control-backup \
mission-control-history \
mission-control-alerts-config \
mission-control-alerts-log \
mission-control-alerts-key \
mission-control-setup-token \
--ignore-not-found其他资源
故障排查
| 症状 | 检查什么 |
|---|---|
kubectl auth can-i ... 返回 no | 请集群管理员授予安装时 RBAC,或代你运行安装。 |
Pod 保持 Pending | 用 kubectl describe pod -n langsmith <pod> 检查命名空间 ResourceQuota、节点容量,以及 PVC/存储类事件。 |
| 镜像拉取错误 | 确认集群能拉取 langchain/mission-control-backend:latest 和 langchain/mission-control-frontend:latest。 |
| 登录失败 | 确认 mission-control-auth 存在于同一命名空间,且含 username 和 password 键。 |
| 浏览器无法连接 | 确认端口转发命令仍在运行,且没有其他本地进程使用端口 3000。 |
权限参考
Helm chart 创建一个名为 mission-control 的 ServiceAccount、ClusterRole 和 ClusterRoleBinding。大多数权限是只读的。写动词很窄且由功能标志控制。
安装或升级需要创建集群范围 RBAC(ClusterRole 和 ClusterRoleBinding)的能力,通常是 cluster-admin 或自定义等价物。最广的运行时权限集仅在 config.features.deploy: true 时才使用;该标志默认启用,对于只读安装请设为 false。
始终存在的只读权限
| 资源组 | 资源 | 动词 |
|---|---|---|
| 工作负载 | pods, pods/log, deployments, statefulsets, replicasets, daemonsets, jobs, cronjobs | get, list, watch |
| 网络 | services, endpoints, ingresses, ingressclasses | get, list, watch |
| 存储 | persistentvolumeclaims, storageclasses | get, list, watch |
| 集群 | nodes, namespaces, events, serviceaccounts, resourcequotas | get, list, watch |
| 配置 | configmaps, secrets | get, list |
| 指标 | metrics.k8s.io pods/nodes | get, list, watch |
| RBAC | roles, rolebindings, clusterroles, clusterrolebindings | get, list, watch |
| CRD 与扩展 | customresourcedefinitions, leases, scaledobjects, httproutes, virtualservices, lgps | get, list, watch |
功能门控权限
| 功能标志 | 资源 | 额外动词 |
|---|---|---|
config.features.configSave | secrets(mission-control-draft) | create, update, delete |
config.features.alerts | secrets(mission-control-alerts-*) | create, update, delete |
config.features.fixIssue | pods | delete |
config.features.adopt | secrets, configmaps, serviceaccounts, deployments, statefulsets | patch |
config.auth.enabled | secrets(mission-control-auth、setup-token)、backend statefulset | create, update, delete, patch |
config.features.valuesOverride | secrets(mission-control-values-overrides) | create, update, delete |
config.features.deploy | 工作负载、网络、RBAC、CRD、Helm release secrets | create, update, patch, delete |
在 values.yaml 中将功能标志设为 false 以移除相应的写动词。在所有功能标志都禁用时,Mission Control 实际是只读的,除了当 config.auth.enabled: true 时的身份验证设置权限。