Mission Control 是一个用于监控、配置和操作 Kubernetes 上 LangSmith 的集群内控制台。它运行在您的集群内,可通过以下方式访问 kubectl port-forward 默认情况下,因此无需入口。
有两种安装方式:
| 方式 | 最佳适用场景 |
|---|---|
| 快速安装 | 可以运行经过审查的 shell 安装程序并希望最短时间完成设置的用户。 |
| 手动安装 | 不允许运行安装脚本或需要审查每个 Kubernetes 命令的组织。 |
公开的安装资源包括:
- -
install-script.sh:一个包含单独prereqs,namespace,secret,values,install和forwardsteps. - -
values.yaml:用于仅端口转发安装的默认 Helm values。
Mission Control 镜像发布到两个 Docker Hub 仓库: langchain/mission-control-backend 和 langchain/mission-control-frontend。可以使用以下命令查看最新镜像:
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.sh - -
https://github.com/langchain-ai/helm/tree/main/charts/mission-control/values.yaml
以下命令使用原始 GitHub URL,以便 curl 可以直接下载文件。如果您从其他仓库或分支发布这些文件,请替换下面的原始基础 URL。
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 集群上运行安装程序。继续之前,请确认当前上下文:
kubectl config current-context
安装程序身份需要获得创建 Mission Control 命名空间资源和集群级 RBAC 的权限:
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 的运行时权限。
快速安装
运行以下三个命令:
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.yaml
此 all step:
- - 检查必需工具和 RBAC。
- - 创建
langsmithnamespace. - - 提示输入 Mission Control 用户名和密码。
- - 将这些凭证存储在
mission-control-authKubernetes Secret 中。 - - 写入
values.yaml(如果尚不存在)。 - - 如果您不是从本地 chart 检出运行,则从公共 Helm chart 仓库安装。
- - 使用 Helm 安装 Mission Control。
RBAC 检查运行:
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 安装,请运行:
./install-script.sh all -f values.yaml --skip-rbac-check
访问 UI
安装完成后,启动本地端口转发:
./install-script.sh forward
打开 http://localhost:3000 并使用您输入的用户名和密码登录。
首先查看脚本
快速安装路径会在运行前下载脚本,这样您可以在运行前查看 install-script.sh 本地文件后再执行第三个命令。
安装前编辑配置值
快速安装路径还会下载 values.yaml 然后再运行安装程序。如果需要更改命名空间、资源、入口、功能标志或诊断持久化,请在第三个命令之前查看或编辑该文件。
常见编辑项:
| 配置项 | 何时更改 |
|---|---|
namespace | 在其他位置安装 Mission Control,而不是 langsmith。同时传递 -n <namespace> 给脚本。 |
resources | 您的命名空间有 ResourceQuota or your platform requires specific requests/limits. |
ingress.enabled 和 ingress.host | 您希望通过 ingress 控制器公开 Mission Control,而不是端口转发。 |
config.features.* | 您需要移除特定的写入权限或外部出口功能。 |
diagnostics.persistence.enabled | 您希望诊断包在 pod 重启和 Helm 升级后保留。 |
backend.podSecurityContext 和 frontend.podSecurityContext | 您的平台要求容器以特定非 root UID 运行,例如 1001. |
使用自定义命名空间的示例:
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
脚本命令参考
./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
常用标记:
./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 仓库:
helm repo add langchain https://langchain-ai.github.io/helm
helm repo update langchain
下载客户配置文件:
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 后再安装:
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:
- ALL
Create the namespace
kubectl create namespace langsmith --dry-run=client -o yaml | kubectl apply -f -
Create the auth credentials Secret
凭据存储在 Kubernetes Secret 中。它们不会写入 values.yaml.
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 签名密钥并设置 config.auth.jwtSecretKey: jwtSecret in values.yaml:
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
helm upgrade --install mission-control langchain/mission-control \
--namespace langsmith \
--create-namespace \
--values values.yaml \
--rollback-on-failure
等待两个工作负载就绪(后端作为 StatefulSet 运行,前端作为 Deployment 运行):
kubectl rollout status statefulset/mission-control-backend -n langsmith
kubectl rollout status deployment/mission-control-frontend -n langsmith
您也可以直接检查 pods:
kubectl get pods -n langsmith
Access the UI
kubectl port-forward svc/mission-control-frontend 3000:3000 -n langsmith
打开 http://localhost:3000 并使用第 3 步中的凭据登录。
升级
下载最新的公共配置文件,合并您需要的任何本地更改,然后运行:
helm repo update langchain
helm upgrade --install mission-control langchain/mission-control \
--namespace langsmith \
--values values.yaml \
--rollback-on-failure
如果您是从本地 chart 检出版本工作:
helm upgrade --install mission-control . \
--namespace langsmith \
--values values.yaml \
--rollback-on-failure
如果您使用快速脚本安装并将其保存在本地:
./install-script.sh install -f values.yaml
卸载
helm uninstall mission-control -n langsmith
这会删除 Mission Control release。它不会删除您的命名空间或无关的 LangSmith 资源。
可选的 Mission Control 拥有的 Secrets 清理:
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 | 检查命名空间 ResourceQuota, node capacity, and PVC/storage class events with kubectl describe pod -n langsmith <pod>. |
| 镜像拉取错误 | 确认集群能够拉取 langchain/mission-control-backend:latest 和 langchain/mission-control-frontend:latest. |
| 登录失败 | 确认 mission-control-auth 存在于同一命名空间中且具有 username 和 password 密钥。 |
| 浏览器无法连接 | 确认端口转发命令仍在运行且没有其他本地进程使用端口 3000. |
权限参考
Helm chart 创建了一个 ServiceAccount, ClusterRole,以及 ClusterRoleBinding 名为 mission-control。大多数权限为只读。写操作动词范围狭窄,由功能标志控制。
安装或升级需要能够创建集群范围的 RBAC(ClusterRole 和 ClusterRoleBinding),通常为 cluster-admin 或自定义等效项。最广泛的运行时权限集仅在 config.features.deploy: true时使用;该标志默认启用,设置为 false 以进行只读安装。
始终存在的只读权限
| 资源组 | 资源 | 动词 |
|---|---|---|
| Workloads | 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 | 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)、后端 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 |
将功能标志设置为 false in values.yaml 以移除相应的写操作动词。禁用所有功能标志后,Mission Control 除了 config.auth.enabled: true.