Tekton Pipelines启动的Pod因临时存储超限被K8s驱逐的解决方法
解决Tekton Pod因临时存储限制为0被驱逐的问题
即使你没有主动使用临时存储,Tekton运行的Pod也会产生隐性临时数据(比如镜像拉取缓存、容器运行时临时文件、日志文件等),Kubernetes会将这些计入临时本地存储用量。当集群默认临时存储限制为0时,少量使用就会触发驱逐,可通过以下方式解决:
1. 为单个Tekton Task/PipelineRun配置临时存储资源
直接在Task的步骤容器中显式定义临时存储的请求和限制值,示例:
apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: example-task spec: steps: - name: build-step image: your-build-image:latest resources: requests: ephemeral-storage: "1Gi" # 初始申请的临时存储量 limits: ephemeral-storage: "2Gi" # 允许使用的最大临时存储量
2. 设置Tekton全局默认临时存储配置
通过修改Tekton的config-defaults ConfigMap,为所有TaskRun的Pod设置全局默认临时存储资源,避免逐个配置:
- 编辑ConfigMap:
kubectl edit configmap config-defaults -n tekton-pipelines
- 在
data字段下添加或修改default-resources配置:
data: default-resources: | requests: ephemeral-storage: "1Gi" limits: ephemeral-storage: "2Gi"
3. 检查并调整集群LimitRange配置
如果集群中存在LimitRange对象,可能会强制给容器设置默认临时存储限制为0。执行以下命令查看所有命名空间的LimitRange:
kubectl get limitrange --all-namespaces
若发现包含ephemeral-storage限制为0的规则,修改对应的LimitRange,设置合理默认值,示例:
apiVersion: v1 kind: LimitRange metadata: name: example-limitrange spec: limits: - type: Container defaultRequest: ephemeral-storage: "512Mi" default: ephemeral-storage: "1Gi"
4. 排查临时存储实际占用来源
在Pod被驱逐前,查看容器内临时存储占用情况,定位具体耗存储路径:
# 查看/tmp目录占用 kubectl exec <pod-name> -- df -h /tmp # 查看日志目录占用 kubectl exec <pod-name> -- df -h /var/log
如果是日志占用过高,可配置日志轮转策略;如果是镜像缓存问题,可考虑使用镜像清理工具或调整缓存大小。
内容的提问来源于stack exchange,提问作者BugsBuggy
相关产品推荐
相关产品推荐

