常见问题
从平台生命周期的内层向外排查 Agent Sandbox:先检查 Cluster Plugin 状态、controller、API、Sandbox conditions、managed Pods,然后再检查 workload 依赖项。
在执行任何命令之前,请先确认当前活动的 cluster 和 namespace:
在 global cluster 上运行 ModuleInfo 检查。在目标 workload cluster 上运行所有 controller、CRD、Sandbox、Pod、NetworkPolicy、RuntimeClass 和事件检查。
目录
ModuleInfo 未变为 Running症状检查解决方法Controller Deployment 未就绪症状检查解决方法缺少 Core 或 Extension CRD症状检查解决方法Extension CRD 存在,但资源未进行 reconcile症状检查解决方法Sandbox 未就绪症状检查解决方法Image Pull 失败症状检查解决方法RBAC 或 ServiceAccount 权限不足症状检查解决方法PodSecurity 拒绝 workload症状检查解决方法NetworkPolicy 阻止 DNS 或目标服务症状检查解决方法shutdownTime 无效或已过期症状检查解决方法RuntimeClass 缺失或无法调度症状检查解决方法收集诊断快照ModuleInfo 未变为 Running
症状
Cluster Plugin 的安装或升级一直处于 pending、failed,或者报告的版本与 v0.5.4-1 不同。
检查
在 global cluster 上:
解决方法
通过 ACP Cluster Plugin 工作流解决 ModuleInfo 或 AppRelease 生命周期错误。确认所选 package 为 v0.5.4-1,并且目标 workload cluster 可达。不要通过直接编辑 ModuleInfo、Helm release 或 controller Deployment 来绕过平台。
Controller Deployment 未就绪
症状
agent-sandbox-controller 存在不可用副本,或者其 rollout 超时。
检查
在 workload cluster 上:
解决方法
使用 Pod 状态和事件来修正 image pull、资源、调度、安全性或配置错误。如果 node selector 或 toleration 导致 controller 无法调度,请使用 Update 更改 Cluster Plugin 设置,并等待新的 rollout。
缺少 Core 或 Extension CRD
症状
API server 针对 Sandbox 或 extension 资源返回 “the server doesn't have a resource type”。
检查
解决方法
确认 Cluster Plugin 安装已成功完成。通过 ACP 对安装进行 reconcile。不要在 ACP 管理的安装之上应用无关的 upstream manifest,也不要临时创建 CRD 版本。
Extension CRD 存在,但资源未进行 reconcile
症状
SandboxTemplate、SandboxWarmPool 或 SandboxClaim 对象已被接受,但状态没有变化。
检查
解决方法
controller 参数必须包含 --extensions=true。如果没有,请使用 Cluster Plugin Update 启用 extension controllers,并等待 rollout 完成。同时验证模板和 warm-pool 的引用名称以及所需的 NetworkPolicies。
Sandbox 未就绪
症状
Ready 等待超时,或者 Sandbox 报告 Ready=False 或 DependenciesNotReady。
检查
检查所有 Sandbox conditions:
解决方法
按照最具体的 Pod event 或 Sandbox condition 进行处理。常见原因包括 image pull 失败、PodSecurity 拒绝、资源不可用、调度约束无效、缺少 RuntimeClass、PVC provisioning,或依赖项被阻塞。不要将 Suspended condition 的存在理解为 suspended 状态;请检查其布尔状态。
Image Pull 失败
症状
managed Pod 报告 ErrImagePull 或 ImagePullBackOff。
检查
解决方法
验证 image registry、repository、tag、target-cluster 网络路径、registry 凭证以及 ServiceAccount 的 image pull 配置。使用 workload cluster 可访问的受信任 image。不要通过禁用 image 验证控制来掩盖 registry 或凭证错误。
RBAC 或 ServiceAccount 权限不足
症状
API 返回 Forbidden,客户端无法创建 Sandbox 资源,或者 kubectl exec 被拒绝。
检查
解决方法
通过专用 Role 和 RoleBinding 仅授予所需的 namespaced verbs。仅有 core 权限的用户不需要 extension-resource 权限。不要授予 cluster-admin,也不要赋予业务身份编辑 CRD 或 controller Deployment 的权限。
PodSecurity 拒绝 workload
症状
事件报告 violates PodSecurity "restricted",或者拒绝生成的 Pod。
检查
解决方法
添加与 restricted 兼容的安全上下文:以非 root 身份运行,在 image 支持时使用显式的非 root UID/GID,禁用 privilege escalation,丢弃所有 capabilities,并使用 RuntimeDefault seccomp。应修正 workload manifest,而不是降低 namespace 的 Pod Security standard。
NetworkPolicy 阻止 DNS 或目标服务
症状
Sandbox 已就绪,但 DNS 解析或所需 endpoint 无法访问。
检查
解决方法
确认 policy selector 与 workload labels 匹配。在收紧默认拒绝之前,添加显式的 DNS 访问和最低必需的 destination rules。验证 cluster CNI 是否按预期强制执行 NetworkPolicy。不要用不受限制的 0.0.0.0/0 egress 替换经过审核的 destination rules。
shutdownTime 无效或已过期
症状
资源被拒绝、立即过期,或者没有在预期时间过期。
检查
解决方法
使用带有显式时区的绝对 RFC3339 时间戳,最好使用 UTC Z,并确保其时间在未来。检查 shutdownPolicy。活动不会续期 shutdownTime;它不是 idle timeout。
RuntimeClass 缺失或无法调度
症状
API 报告缺少 RuntimeClass,或者在选择 RuntimeClass 后 Pod 仍然处于 Pending。
检查
解决方法
使用 cluster administrator 已安装并验证过的 RuntimeClass。确认兼容的节点、runtime handlers、node labels、taints、tolerations、资源开销以及硬件虚拟化要求。Agent Sandbox 不会安装 Kata Containers 或 gVisor。
收集诊断快照
当需要升级处理时,请在不包含凭证或 secret 数据的情况下收集资源状态:
排查过程中不要删除 CRD。删除 CRD 会移除 API 定义,并可能删除整个 cluster 中该资源类型的所有实例。