Namespace 配置
针对环境特定的保留需求,按 Namespace 配置不同的 pruning 策略。
配置层级
设置流转:Global → Namespace → Resource Group
在全局配置中设置 enforcedConfigLevel: namespace,以启用 Namespace 级别覆盖。
验证边界
WARNING
关键 - 系统边界:仅在 PipelineRuns/TaskRuns 运行的用户 Namespace 中创建 Namespace 级别的 ConfigMaps。
禁止的 namespaces(验证将拒绝):
- 系统:
kube-*
- Tekton controllers:
tekton-pipelines, tekton-*
所有 configs 所需的 labels:
labels:
app.kubernetes.io/part-of: tekton-pruner
pruner.tekton.dev/config-type: <global|namespace>
WARNING
Namespace 级别的 ConfigMaps 不在 TektonConfig 生命周期内。如果您稍后需要备份或恢复 Tekton 配置,请单独保存这些 ConfigMaps。
方法 1:内联 Namespace 规格(集中式)
在 TektonConfig 中定义所有 namespace 配置:
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
pruner:
disabled: true # Must disable job-based pruner
tektonpruner:
disabled: false # Enable event-based pruner
global-config:
enforcedConfigLevel: namespace
ttlSecondsAfterFinished: 3600 # Global fallback
namespaces:
dev:
ttlSecondsAfterFinished: 300
successfulHistoryLimit: 3
staging:
ttlSecondsAfterFinished: 86400
successfulHistoryLimit: 5
prod:
ttlSecondsAfterFinished: 604800
successfulHistoryLimit: 10
方法 2:按 Namespace 的 ConfigMaps(自助式)
推荐用于 Namespace 隔离和团队自治。
步骤 1: 在 TektonConfig 中启用 Namespace 级别配置:
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
pruner:
disabled: true # Must disable job-based pruner
tektonpruner:
disabled: false # Enable event-based pruner
global-config:
enforcedConfigLevel: namespace
ttlSecondsAfterFinished: 3600 # Fallback for namespaces without config
步骤 2: 创建特定于 namespace 的 ConfigMap(固定名称:tekton-pruner-namespace-spec):
apiVersion: v1
kind: ConfigMap
metadata:
name: tekton-pruner-namespace-spec # Fixed name
namespace: my-app # User namespace only
labels:
app.kubernetes.io/part-of: tekton-pruner
pruner.tekton.dev/config-type: namespace
data:
ns-config: |
ttlSecondsAfterFinished: 300
successfulHistoryLimit: 5
failedHistoryLimit: 10
优点:
- Namespace 所有者可自助管理
- 独立的生命周期管理
- 优先于全局配置
验证规则
Namespace 配置会根据限制进行验证,以防止资源耗尽。
1. 显式全局限制
当全局配置定义了限制时,Namespace 配置不能超过该限制。
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
pruner:
disabled: true # Must disable job-based pruner
tektonpruner:
disabled: false # Enable event-based pruner
global-config:
ttlSecondsAfterFinished: 3600
successfulHistoryLimit: 10
namespaces:
development:
ttlSecondsAfterFinished: 7200 # Invalid: exceeds global limit
successfulHistoryLimit: 5 # Valid: within global limit
2. 系统默认限制
当未定义全局限制时,系统会强制执行以下最大值:
示例:
spec:
tektonpruner:
global-config:
enforcedConfigLevel: namespace
# No limits defined - system maximums apply
---
apiVersion: v1
kind: ConfigMap
metadata:
name: tekton-pruner-namespace-spec
namespace: my-app
data:
ns-config: |
ttlSecondsAfterFinished: 2592001 # Invalid: exceeds system maximum
successfulHistoryLimit: 150 # Invalid: exceeds system maximum
3. 覆盖默认值
集群管理员可以通过全局配置设置更严格的限制。全局限制会覆盖系统默认值,但不能超过系统最大值。
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
pruner:
disabled: true # Must disable job-based pruner
tektonpruner:
disabled: false # Enable event-based pruner
global-config:
ttlSecondsAfterFinished: 86400 # Admin limit: 1 day
successfulHistoryLimit: 20 # Admin limit: 20 runs
namespaces:
development:
ttlSecondsAfterFinished: 3600 # Valid: within global limit
# ttlSecondsAfterFinished: 172800 # Invalid example: exceeds global limit
配置继承
未指定的设置将从更高层级继承:
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
pruner:
disabled: true # Must disable job-based pruner
tektonpruner:
disabled: false # Enable event-based pruner
global-config:
enforcedConfigLevel: namespace
ttlSecondsAfterFinished: 3600 # Global default
successfulHistoryLimit: 5 # Global default
namespaces:
dev:
ttlSecondsAfterFinished: 300 # Override TTL
# Inherits successfulHistoryLimit: 5 from global
Selector 支持
重要: 资源 selector(matchLabels、matchAnnotations)仅适用于 Namespace 级别 ConfigMaps(tekton-pruner-namespace-spec),不适用于 全局 ConfigMap 中的内联 namespace 规格。
这可以工作(namespace ConfigMap):
apiVersion: v1
kind: ConfigMap
metadata:
name: tekton-pruner-namespace-spec
namespace: my-app
labels:
app.kubernetes.io/part-of: tekton-pruner
pruner.tekton.dev/config-type: namespace
data:
ns-config: |
pipelineRuns:
- selector:
matchLabels:
critical: "true"
ttlSecondsAfterFinished: 2592000
这会被忽略(全局 ConfigMap 中的内联 namespace):
spec:
tektonpruner:
global-config:
namespaces:
production:
pipelineRuns:
- selector:
matchLabels:
critical: "true"
对于基于 selector 的 resource groups,请使用单独的 Namespace ConfigMaps(方法 2)。
常见模式
基于环境:
spec:
tektonpruner:
global-config:
enforcedConfigLevel: namespace
namespaces:
dev:
ttlSecondsAfterFinished: 300
successfulHistoryLimit: 3
staging:
ttlSecondsAfterFinished: 86400
successfulHistoryLimit: 5
prod:
最佳实践
- 使用清晰的 namespace 命名约定
- 在开发环境从宽松的限制开始
- 在生产环境实施更严格的保留策略
- 记录 namespace 配置决策
- 定期审查并调整设置
- 在部署前测试配置
- 对基于 selector 的分组使用 Namespace ConfigMaps
下一步