自定义Kuberhealthy CosmosDB检查报错:等待检查Pod报告超时
解决Kuberhealthy自定义检查超时问题(CosmosDB校验场景)
针对你遇到的Check execution error: default/cosmoscheck: timed out waiting for checker pod to report in错误——尽管Pod日志显示CosmosDB响应正常,但Kuberhealthy无法识别检查结果,以下是排查和解决方向:
1. 确认自定义检查容器的输出格式符合Kuberhealthy规范
Kuberhealthy要求自定义检查容器必须向**标准输出(stdout)**输出特定结构的JSON结果,否则会判定为未上报结果,触发超时:
- 成功场景的正确输出示例:
{"ok": true, "error": "", "message": "CosmosDB HTTP response check passed"} - 失败场景的正确输出示例:
{"ok": false, "error": "CosmosDB connection timed out", "message": "Failed to validate CosmosDB response"}
检查你的cosmoscheck:1镜像脚本,确保最终输出的是符合上述结构的JSON,而非普通的响应内容。
2. 调整只读根文件系统的配置
你的检查容器启用了readOnlyRootFilesystem: true,部分Kuberhealthy检查逻辑需要临时目录(如/tmp)处理上报数据,只读文件系统会导致写入失败。可以添加emptyDir挂载:
修改podSpec中的容器配置:
containers: - name: cosmoscheck image: cosmoscheck:1 imagePullPolicy: IfNotPresent env: - name: COSMOSDB_URL value: "........................" - name: COSMOSDB_AUTH_TOKEN value: "......................." securityContext: runAsNonRoot: true allowPrivilegeEscalation: false readOnlyRootFilesystem: true volumeMounts: - name: tmp-dir mountPath: /tmp volumes: - name: tmp-dir emptyDir: {}
3. 优化检查的时间配置
当前runInterval和timeout都设置为10分钟,可能导致Kuberhealthy在检查容器还未完成上报时就触发超时。建议将timeout设置为略短于runInterval的值:
spec: runInterval: 10m timeout: 9m
4. 检查容器的退出码
Kuberhealthy会通过容器退出码辅助判断检查状态:
- 退出码0:表示检查成功
- 非0退出码:表示检查失败
确保你的检查脚本在CosmosDB响应正常时返回0,异常时返回非0值,避免Kuberhealthy误判。
内容的提问来源于stack exchange,提问作者Gem12346
相关产品推荐
相关产品推荐

