在 Tekton 中使用自定义镜像时,由于配置错误导致无法创建 pod
目录
问题描述错误表现根因分析故障排查解决方案方案 1:调整镜像构建配置,将默认用户设置为非 root 用户前提条件步骤方案 2:修改 TaskRun 或 PipelineRun 执行配置前提条件步骤方案 3:修改全局 Tekton 配置前提条件步骤方案 4:修改 Task 定义前提条件步骤防止出错相关内容问题描述
在 Tekton pipeline 中,使用产品提供的镜像可以正常工作,但当使用用户自定义镜像时,可能会遇到 TaskRun 执行失败。
错误表现
-
TaskRun 执行失败,状态为
False,原因是CreateContainerConfigError: -
TaskRun 事件显示如下错误信息:
-
相关 pod 事件显示如下错误信息:
根因分析
此类问题通常由以下两个原因导致:
- 镜像本身存在问题。
- 镜像与 Task 配置不兼容。
故障排查
如果该问题仅在使用自定义镜像时出现,建议按照以下步骤进行排查:
-
验证镜像本身是否存在问题:
-
检查 Task 配置与镜像的兼容性:
- 检查 Task 是否配置了
runAsNonRoot: true。 - 检查镜像的默认用户是 root 还是非数字型用户 ID。
- 检查 Task 是否配置了
Task 配置示例:
Containerfile 配置示例:
解决方案
方案 1:调整镜像构建配置,将默认用户设置为非 root 用户
前提条件
- 具备重新构建镜像的环境和权限。
步骤
参考 为 Task 兼容的自定义镜像调整 Containerfile 修改 Containerfile 配置。
方案 2:修改 TaskRun 或 PipelineRun 执行配置
前提条件
- 具备修改 TaskRun 或 PipelineRun 的权限。
步骤
-
单独执行 TaskRun 时添加配置:
-
执行 PipelineRun 时添加配置:
方案 3:修改全局 Tekton 配置
前提条件
- 具备集群操作权限。
- 具备修改 TektonConfig 资源的权限。
- 注意:此配置会影响所有 Tasks。
步骤
-
修改 TektonConfig 资源: 增加以下
spec.pipeline.default-pod-template配置: -
验证配置是否生效:
方案 4:修改 Task 定义
前提条件
- 具备修改 Task 的权限。
- 注意:此配置会影响所有使用该 Task 的 TaskRuns 或 PipelineRuns。
步骤
-
方法 1:移除 runAsNonRoot 配置:
-
方法 2:添加 runAsUser 配置:
防止出错
-
镜像构建
- 优先使用非 root 用户构建镜像。
- 始终使用 UID 65532 作为非 root 用户。
- 确保应用可以在非 root 用户下正常运行。
-
Task 配置
- 根据安全要求决定是否启用
runAsNonRoot。 - 如果需要,按相应方式配置
runAsUser。
- 根据安全要求决定是否启用
-
权限管理
- 遵循最小权限原则。
- 事先规划目录权限。
- 定期检查权限配置。