Skip to main content

安装

概述

Sandbox Controller、Sandbox Manager 和 Sandbox Gateway 是 OpenKruise 生态中的三个核心组件,共同构成完整的 Sandbox 运行环境:

  • Sandbox Controller:负责管理 Sandbox 相关的 CRD 资源,包括 SandboxSet、Sandbox、SandboxClaim 和 SandboxTemplate 的生命周期管理。
  • Sandbox Manager:提供 Sandbox 的 API 服务和控制面,负责 Sandbox 实例的调度、创建与回收,支持 E2B 协议访问。
  • Sandbox Gateway(0.2.0 新增):独立的数据面网关服务,基于 Envoy + Golang Filter 构建,负责流量路由、负载均衡与熔断保护,支持独立扩缩容。

版本兼容性

组件Chart 版本镜像版本Kubernetes 兼容性
Sandbox Controller0.2.0v0.2.0>= 1.28
Sandbox Manager0.2.0v0.2.0>= 1.28
Sandbox Gatewayv0.2.1>= 1.28

说明:Sandbox Gateway 随 Sandbox Manager chart 一起部署,无需单独安装。


前置条件

  1. Kubernetes 集群版本 >= 1.28
  2. 已安装 Helm v3.5+
  3. 手动创建 Namespace(见下文安装步骤)

通过 Helm 安装

1. 添加 OpenKruise Charts 仓库

## 添加 openkruise charts 仓库
helm repo add openkruise https://openkruise.github.io/charts/

## 更新仓库(如果已经安装过openkruise charts仓库)
helm repo update

2. 安装 Sandbox Controller

手动创建 Namespace

kubectl create ns sandbox-system

安装顺序:Sandbox Controller 必须先于 Sandbox Manager 安装,因为它提供了 Sandbox Manager 所需的 CRD 资源。

helm install agents-sandbox-controller openkruise/agents-sandbox-controller \
-n sandbox-system \
--version 0.2.0

3. 安装 Sandbox Manager

必填参数说明:以下参数在安装时必须显式指定:

  • e2b.adminApiKey:E2B 管理员 API Key,用于认证
  • ingress.className:Ingress 控制器类名(如 nginxalb 等,取决于集群的 Ingress 实现)
helm install agents-sandbox-manager openkruise/agents-sandbox-manager \
-n sandbox-system \
--version 0.2.0 \
--set e2b.adminApiKey=<your-api-key> \
--set ingress.className=<your-ingress-class>

说明:0.2.0 版本的 Sandbox Manager chart 会同时部署 Sandbox Gateway,无需额外安装。


使用国内镜像源

由于网络原因,国内用户可能无法直接从 Docker Hub 拉取镜像。建议使用阿里云容器镜像服务提供的国内镜像。

国内镜像地址

组件镜像地址版本
Sandbox Controlleropenkruise-registry.cn-shanghai.cr.aliyuncs.com/openkruise/agent-sandbox-controllerv0.2.0
Sandbox Manageropenkruise-registry.cn-shanghai.cr.aliyuncs.com/openkruise/sandbox-managerv0.2.0
Sandbox Gatewayopenkruise-registry.cn-shanghai.cr.aliyuncs.com/openkruise/sandbox-gatewayv0.2.1
Envoy Proxyopenkruise-registry.cn-shanghai.cr.aliyuncs.com/openkruise/envoyv1.33-latest

使用国内镜像安装

安装 Sandbox Controller(使用国内镜像)

helm install agents-sandbox-controller openkruise/agents-sandbox-controller \
-n sandbox-system \
--version 0.2.0 \
--set image.repository=openkruise-registry.cn-shanghai.cr.aliyuncs.com/openkruise/agent-sandbox-controller

安装 Sandbox Manager(使用国内镜像)

helm install agents-sandbox-manager openkruise/agents-sandbox-manager \
-n sandbox-system \
--version 0.2.0 \
--set e2b.adminApiKey=<your-api-key> \
--set ingress.className=<your-ingress-class> \
--set controller.repository=openkruise-registry.cn-shanghai.cr.aliyuncs.com/openkruise/sandbox-manager \
--set proxy.repository=openkruise-registry.cn-shanghai.cr.aliyuncs.com/openkruise/envoy \
--set proxy.tag=v1.33-latest \
--set gateway.image.repository=openkruise-registry.cn-shanghai.cr.aliyuncs.com/openkruise/sandbox-gateway

说明:如需启用 Gateway 初始化容器,请额外添加:

--set gateway.initContainer.enabled=true \
--set gateway.initContainer.image.repository=registry.cn-beijing.aliyuncs.com/acs/busybox \
--set gateway.initContainer.image.tag=1.36.1

通过 Helm 升级

升级 Sandbox Controller

helm upgrade agents-sandbox-controller openkruise/agents-sandbox-controller \
-n sandbox-system \
--version 0.2.0

升级 Sandbox Manager

helm upgrade agents-sandbox-manager openkruise/agents-sandbox-manager \
-n sandbox-system \
--version 0.2.0

注意:

  1. 升级顺序:先升级 Sandbox Controller,再升级 Sandbox Manager,确保 CRD 兼容。
  2. 在升级之前,必须先阅读 Change Log ,确保你已经了解新版本的不兼容变化。
  3. 如果你要重置之前旧版本上用的参数或者配置一些新参数,建议在 helm upgrade 命令里加上 --reset-values

从 0.1.0 升级到 0.2.0

0.2.0 版本引入了独立的 Sandbox Gateway 组件和多项 CRD 变更,升级时请注意:

  1. 手动更新 CRD(必须):Helm upgrade 不会自动更新 crds/ 目录下的 CRD 定义。0.2.0 版本对 CRD 有大量变更,必须在 执行 helm upgrade 之前手动应用新的 CRD,否则新功能将无法正常工作。

    # 从 chart 包中提取 CRD 并应用(以在线安装为例)
    helm pull openkruise/agents-sandbox-controller --version 0.2.0 --untar
    kubectl apply -f agents-sandbox-controller/crds/
    rm -rf agents-sandbox-controller

    0.2.0 版本 CRD 的主要变化包括:

    • 新增 Checkpoint CRDcheckpoints.agents.kruise.io):用于沙箱状态的检查点/快照管理
    • 所有 CRD 新增 runtimes 字段:Sandbox、SandboxSet、SandboxClaim、SandboxTemplate 均新增运行时配置
    • SandboxSet 新增 updateStrategy:支持滚动更新策略配置(maxUnavailable),以及 updatedReplicasupdatedAvailableReplicas 状态字段
    • SandboxClaim 功能增强:新增动态卷挂载(dynamicVolumesMount)、原地资源更新(inplaceUpdate.resources)、 跳过初始化运行时(skipInitRuntime);ttlAfterCompleted 默认值从 5m 调整为 60m
    • Webhook 增强:新增 Pod Delete 和 Pod Eviction 的 ValidatingWebhook
  2. 新增 Gateway Deployment:0.2.0 在保留 Manager Pod 内 Envoy Sidecar 的基础上,新增了独立的 Sandbox Gateway Deployment, 可根据流量压力单独扩缩容。

  3. Ingress 路由变更:0.2.0 新增了 ingress.dataplaneService 参数(默认 sandbox-gateway),数据面流量将路由到 Gateway Service 而非 Manager Service。请确认你的 Ingress 配置已正确更新。

  4. 新增必填参数ingress.className e2b.adminApiKey 在 0.2.0 中默认值为空字符串,需显式指定。


手工下载 Charts 包

如果你在生产环境无法连接到 https://openkruise.github.io/charts/,可以先在 GitHub Releases 手工下载 chart 包,再用它安装或更新到集群中。

helm install/upgrade agents-sandbox-controller /PATH/TO/CONTROLLER/CHART -n sandbox-system
helm install/upgrade agents-sandbox-manager /PATH/TO/MANAGER/CHART -n sandbox-system

可选项

Sandbox Controller 安装参数

下表展示了 Sandbox Controller chart 所有可配置的参数和它们的默认值:

ParameterDescriptionDefault
replicaCountController 副本数2
image.repositoryController 镜像仓库openkruise/agent-sandbox-controller
image.tagController 镜像版本v0.2.0
image.pullPolicyController 镜像拉取策略IfNotPresent
webhook.portWebhook 服务端口9443
metrics.portMetrics 服务端口8443
healthProbe.port健康检查端口8081
resources.limits.cpuController CPU 资源限制2
resources.limits.memoryController 内存资源限制4Gi
resources.requests.cpuController CPU 资源请求2
resources.requests.memoryController 内存资源请求4Gi
namespace.name部署的命名空间sandbox-system
serviceAccount.create是否创建 ServiceAccounttrue
serviceAccount.automount是否自动挂载 ServiceAccount Tokentrue
serviceAccount.annotationsServiceAccount 注解{}
serviceAccount.nameServiceAccount 名称""
rbac.create是否创建 RBAC 资源true
imagePullSecrets镜像拉取密钥列表[]
nameOverride覆盖 Chart 名称""
fullnameOverride覆盖完整名称""
podAnnotationsPod 注解{}
podLabelsPod 标签{}
podSecurityContextPod 安全上下文{runAsNonRoot: true, seccompProfile: {type: RuntimeDefault}}
securityContext容器安全上下文{allowPrivilegeEscalation: false, capabilities: {drop: [ALL], add: [NET_BIND_SERVICE]}, readOnlyRootFilesystem: true}
nodeSelectorPod 调度的节点选择器{}
tolerationsPod 调度的容忍度[]
affinityPod 调度的亲和性{}

Sandbox Manager 安装参数

下表展示了 Sandbox Manager chart 所有可配置的参数和它们的默认值:

Controller 参数

ParameterDescriptionDefault
replicaCountManager 副本数2
controller.repositoryController 镜像仓库openkruise/sandbox-manager
controller.tagController 镜像版本v0.2.0
controller.pullPolicyController 镜像拉取策略IfNotPresent
controller.logLevel日志级别5
controller.infraSandbox 基础设施类型sandbox-cr
controller.hostNetwork是否使用 Host Networkfalse
controller.maxClaimWorkers最大 Claim 工作线程数100
controller.maxCreateQPS创建 Sandbox 的最大 QPS200
controller.extProcMaxConcurrency外部处理器最大并发数3000
controller.resources.cpuController CPU 资源限制2
controller.resources.memoryController 内存资源限制4Gi

Proxy (Envoy) 参数

ParameterDescriptionDefault
proxy.repositoryEnvoy 代理镜像仓库envoyproxy/envoy
proxy.tagEnvoy 代理镜像版本v1.33-latest
proxy.pullPolicyEnvoy 代理镜像拉取策略IfNotPresent

Gateway 参数(新增)

ParameterDescriptionDefault
gateway.replicaCountGateway 副本数2
gateway.image.repositoryGateway 镜像仓库openkruise/sandbox-gateway
gateway.image.tagGateway 镜像版本v0.2.1
gateway.image.pullPolicyGateway 镜像拉取策略IfNotPresent
gateway.resources.cpuGateway CPU 资源2
gateway.resources.memoryGateway 内存资源4Gi
gateway.livenessProbe存活探针配置见下方配置
gateway.readinessProbe就绪探针配置见下方配置
gateway.envoy.admin.addressEnvoy 管理接口地址127.0.0.1
gateway.envoy.admin.portEnvoy 管理接口端口9901
gateway.envoy.listener.addressEnvoy 监听地址0.0.0.0
gateway.envoy.listener.portEnvoy 监听端口10000
gateway.envoy.logLevelEnvoy 日志级别warn
gateway.envoy.concurrencyEnvoy 并发数4
gateway.envoy.circuitBreakers熔断器配置见下方配置
gateway.service.typeGateway Service 类型ClusterIP
gateway.service.portGateway Service 端口7788
gateway.service.targetPortGateway Service 目标端口10000
gateway.podAntiAffinity.typePod 反亲和性类型soft
gateway.podAntiAffinity.weightPod 反亲和性权重100
gateway.podAntiAffinity.topologyKeyPod 反亲和性拓扑键kubernetes.io/hostname
gateway.initContainer.enabled是否启用初始化容器false

E2B 协议参数

ParameterDescriptionDefault
e2b.domainE2B 协议域名your.domain.com
e2b.enableAuth是否启用 E2B 认证true
e2b.adminApiKeyE2B 管理员 API Key""
e2b.maxTimeoutE2B 最大超时时间(秒)2592000

服务与 Ingress 参数

ParameterDescriptionDefault
service.typeManager Service 类型ClusterIP
service.portManager Service 端口7788
ingress.classNameIngress 控制器类名""
ingress.annotationsIngress 注解{}
ingress.certSecretNameIngress TLS 证书 Secret 名称sandbox-manager-tls
ingress.dataplaneService数据平面 Service 名称sandbox-gateway

其他参数

ParameterDescriptionDefault
imagePullSecrets镜像拉取密钥列表{}
nameOverride覆盖 Chart 名称""
fullnameOverride覆盖完整名称""
serviceAccount.automount是否自动挂载 ServiceAccount Tokentrue
serviceAccount.annotationsServiceAccount 注解{}
serviceAccount.nameServiceAccount 名称""
podAnnotationsPod 注解{}
podLabelsPod 标签{}
podSecurityContextPod 安全上下文{fsGroup: 2000, seccompProfile: {type: RuntimeDefault}}
securityContext容器安全上下文{capabilities: {drop: [ALL], add: [NET_BIND_SERVICE]}, readOnlyRootFilesystem: true, allowPrivilegeEscalation: false, runAsNonRoot: true, runAsUser: 65532}
nodeSelectorPod 调度的节点选择器{}
tolerationsPod 调度的容忍度[]
affinityPod 调度的亲和性默认配置软性 Pod 反亲和(preferredDuringSchedulingIgnoredDuringExecution),按主机名分散调度

以上参数均可通过 --set key=value[,key=value]helm installhelm upgrade 命令中指定。

Gateway 默认探针配置参考:

# 存活探针
gateway.livenessProbe:
tcpSocket:
port: 10000
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3

# 就绪探针
gateway.readinessProbe:
tcpSocket:
port: 10000
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 3
failureThreshold: 3

Gateway 默认熔断器配置参考:

gateway.envoy.circuitBreakers:
enabled: true
thresholds:
- priority: DEFAULT
maxConnections: 32768
maxPendingRequests: 32768
maxRequests: 65536
maxRetries: 5

最佳实践

自定义资源配置

根据你的集群规模,建议调整以下资源参数:

Sandbox Controller 资源调整

helm install agents-sandbox-controller openkruise/agents-sandbox-controller \
-n sandbox-system \
--version 0.2.0 \
--set resources.limits.cpu=4 \
--set resources.limits.memory=8Gi \
--set resources.requests.cpu=2 \
--set resources.requests.memory=4Gi

Sandbox Manager + Gateway 资源调整

helm install agents-sandbox-manager openkruise/agents-sandbox-manager \
-n sandbox-system \
--version 0.2.0 \
--set e2b.adminApiKey=<your-api-key> \
--set ingress.className=<your-ingress-class> \
--set controller.resources.cpu=4 \
--set controller.resources.memory=8Gi \
--set gateway.resources.cpu=4 \
--set gateway.resources.memory=8Gi

配置 E2B 域名和认证

helm install agents-sandbox-manager openkruise/agents-sandbox-manager \
-n sandbox-system \
--version 0.2.0 \
--set e2b.domain=sandbox.example.com \
--set e2b.enableAuth=true \
--set e2b.adminApiKey=your-secure-api-key \
--set ingress.className=<your-ingress-class>

使用 Ingress 暴露服务

helm install agents-sandbox-manager openkruise/agents-sandbox-manager \
-n sandbox-system \
--version 0.2.0 \
--set e2b.adminApiKey=<your-api-key> \
--set ingress.className=nginx \
--set ingress.annotations."cert-manager\.io/cluster-issuer"=letsencrypt-prod \
--set ingress.certSecretName=sandbox-manager-tls

配置 Gateway 高可用

helm install agents-sandbox-manager openkruise/agents-sandbox-manager \
-n sandbox-system \
--version 0.2.0 \
--set e2b.adminApiKey=<your-api-key> \
--set ingress.className=<your-ingress-class> \
--set gateway.replicaCount=3 \
--set gateway.podAntiAffinity.type=hard \
--set gateway.resources.cpu=4 \
--set gateway.resources.memory=8Gi

启用 Gateway 初始化容器

如果需要特殊的初始化操作(如 sysctl 调优等),可以启用初始化容器:

helm install agents-sandbox-manager openkruise/agents-sandbox-manager \
-n sandbox-system \
--version 0.2.0 \
--set e2b.adminApiKey=<your-api-key> \
--set ingress.className=<your-ingress-class> \
--set gateway.initContainer.enabled=true \
--set gateway.initContainer.image.repository=busybox \
--set gateway.initContainer.image.tag=1.36.1

卸载

注意:

  • helm uninstall 会删除 Deployment、Service、Webhook Configurations 等 chart 管理的资源,但 不会删除 CRD。 这是 Helm 的标准行为——CRD 位于 crds/ 目录下,Helm 只在首次安装时创建,卸载和升级时均不处理。
  • CRD 不被删除意味着已创建的 Sandbox、SandboxSet 等 CR 资源及其关联的 Pod 会被保留
  • Namespace 也不会被自动删除。如需完全清理,请参考下方"完全清理"章节。

卸载顺序:先卸载 Sandbox Manager,再卸载 Sandbox Controller。

卸载 Sandbox Manager

helm uninstall agents-sandbox-manager -n sandbox-system

卸载 Sandbox Controller

helm uninstall agents-sandbox-controller -n sandbox-system

完全清理(可选)

如需彻底清理所有资源,包括 CRD 和 Namespace:

# 删除所有 Sandbox 相关 CRD(会级联删除所有 Sandbox CR 和对应的 Pod)
kubectl get crd | grep agents.kruise.io | awk '{print $1}' | xargs kubectl delete crd

# 删除 Namespace
kubectl delete ns sandbox-system

⚠️ 警告:删除 CRD 将不可逆地销毁所有 Sandbox 实例及其关联 Pod,请确认数据已备份后再执行。


版本更新说明

0.2.0 相比 0.1.0 的主要变化

类别变更内容
架构变更新增独立的 Sandbox Gateway Deployment,在保留 Manager 内 Envoy Sidecar 的基础上提供独立可扩展的数据面网关
CRD 变更新增 Checkpoint CRD;所有 CRD 新增 runtimes 字段;SandboxSet 新增 updateStrategy;SandboxClaim 新增动态卷挂载、原地资源更新等(升级时需手动更新 CRD)
Webhook新增 Pod Delete 和 Pod Eviction 的 ValidatingWebhook,增强 Pod 生命周期管理
日志级别Controller 日志级别默认值从 3 调整为 5,便于排查问题
Ingress新增 dataplaneService 参数;className 默认值改为空字符串,需显式指定
E2BadminApiKey 默认值改为空字符串(0.1.0 为 admin-987654321),安装时必须显式指定
Gateway新增完整的 Gateway 配置项,包括副本数、资源、探针、Envoy 配置、熔断器、Pod 反亲和性等
安全性podSecurityContextAllowPrivilegeEscalation 参数已移除,改为在 securityContext 中统一管理
RBAC新增 pods/resizecheckpointssandboxtemplates 资源权限

详细变更请参考 Change Log