Конфигурация политики хранения
Политика хранения Tekton Results обеспечивает автоматическую очистку как записей базы данных, так и архивных логов в системах хранения, совместимых с S3. Агент хранения периодически удаляет просроченные результаты и связанные с ними лог-файлы в соответствии с настраиваемыми временными политиками.
Конфигурация
Политики хранения настраиваются через пользовательский ресурс TektonConfig с помощью поля spec.result.options, где задаются переопределения ConfigMap:
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
result:
logs_api: true
logs_type: S3
secret_name: my-s3-secret
is_external_db: true
db_host: your-postgres-host.example.com
db_port: 5432
db_name: tekton_results
db_sslmode: require
db_secret_name: tekton-results-postgres
options:
configMaps:
tekton-results-config-results-retention-policy:
data:
defaultRetention: "30" # Количество дней хранения результатов (30 дней)
runAt: "0 2 * * *" # Расписание cron: ежедневно в 2:00
Параметры конфигурации
-
defaultRetention: Указывает количество дней, в течение которых результаты хранятся до автоматического удаления. По истечении этого срока будут очищены как записи в базе данных, так и связанные лог-файлы в хранилище S3.
-
runAt: Cron-выражение, определяющее время запуска агента хранения.
"0 2 * * *" — ежедневно в 2:00
"0 2 * * 0" — еженедельно по воскресеньям в 2:00
"0 2 1 * *" — ежемесячно первого числа в 2:00
Применение конфигурации
Примените конфигурацию TektonConfig:
kubectl apply -f tekton-config-retention-config.yaml
Пример вывода:
tektonconfig.operator.tekton.dev/config configured
Дождитесь перезапуска агента хранения:
kubectl rollout status -n tekton-pipelines deployment/tekton-results-retention-policy-agent
Пример вывода:
deployment "tekton-results-retention-policy-agent" successfully rolled out
Проверьте, что конфигурация активна:
kubectl get pods -n tekton-pipelines -l app.kubernetes.io/name=tekton-results-retention-policy-agent
Пример вывода:
NAME READY STATUS RESTARTS AGE
tekton-results-retention-policy-agent-5c9g2 1/1 Running 0 5m
Важное замечание
Важно: Унифицированная функция очистки (удаление как записей базы данных, так и логов в S3 одновременно) является улучшением (патчем) и в настоящее время недоступна в сообществе Tekton Results. В версии сообщества удаляются только записи базы данных, а лог-файлы в хранилище S3 остаются, что может привести к неограниченному росту объема хранения.
Проверьте конфигурацию хранения TektonConfig:
kubectl get tektonconfig config -o yaml
Пример вывода (сокращённый):
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
result:
logs_api: true
logs_type: S3
secret_name: my-s3-secret
is_external_db: true
db_host: your-postgres-host.example.com
options:
configMaps:
tekton-results-config-results-retention-policy:
data:
defaultRetention: "30"
runAt: "0 2 * * *"
Проверьте логи агента хранения:
kubectl logs -n tekton-pipelines deployment/tekton-results-retention-policy-agent
Пример вывода:
{"level":"info","ts":"2023-05-15T10:30:45.123Z","caller":"retention/main.go:89","msg":"Starting Tekton Results retention policy agent"}
{"level":"info","ts":"2023-05-15T10:30:45.124Z","caller":"retention/agent.go:45","msg":"Retention policy configured: 30 days, schedule: 0 2 * * *"}
{"level":"info","ts":"2023-05-15T10:30:45.125Z","caller":"retention/scheduler.go:123","msg":"Next execution scheduled for: 2023-05-16T02:00:00Z"}
Проверка
Для быстрой проверки работы политики хранения выполните следующие шаги:
-
Создайте тестовые результаты/логи: Сгенерируйте несколько PipelineRuns или TaskRuns в Tekton, которые создадут результаты и логи в вашей базе Tekton Results.
# Создать пример PipelineRun для генерации тестовых данных
kubectl apply -f sample-pipelinerun.yaml
-
Проверьте исходное состояние: Убедитесь, что результаты и логи присутствуют в базе данных и в хранилище S3 (если применимо).
# Проверить Tekton Results
tkn results list
# Или выполнить запрос напрямую к базе, если доступно
kubectl exec -it -n tekton-pipelines deployment/tekton-results-read-api -- grpcurl -plaintext -d '{}' localhost:8080 api.v1alpha2.Results.ListResults
-
Измените политику хранения для теста: Временно установите очень короткий срок хранения и конкретное cron-расписание для тестирования (например, выполнить один раз через 10 минут от текущего времени).
options:
configMaps:
tekton-results-config-results-retention-policy:
data:
defaultRetention: "0" # Хранить 0 дней (немедленная очистка)
# Выполнить один раз в конкретное время (текущее время + 10 минут)
# Пример: если текущее время 14:30, установить "40 14 * * *" для 14:40
# Измените значение минут на текущее + 10 (с учётом корректировки дня/часа при необходимости)
runAt: "40 14 * * *" # Пример: запуск в 14:40 (примерно текущее время + 10 мин)
-
Примените изменённую конфигурацию: Примените временную тестовую конфигурацию и дождитесь перезапуска агента хранения.
kubectl apply -f tekton-config-test-config.yaml
kubectl rollout restart -n tekton-pipelines deployment/tekton-results-retention-policy-agent
-
Отслеживайте логи агента хранения: Следите за логами агента, чтобы подтвердить выполнение операций очистки.
kubectl logs -n tekton-pipelines deployment/tekton-results-retention-policy-agent -f
-
Проверьте, что очистка произошла: После выполнения расписания убедитесь, что старые результаты и логи были удалены.
# Проверить, что результаты очищены
tkn results list
# Также проверьте хранилище S3, чтобы убедиться, что лог-файлы удалены
# Используйте ваш S3-клиент для просмотра объектов в бакете
aws s3 ls s3://your-bucket-name/path/to/tekton-logs/ --recursive
-
Верните настройки в рабочее состояние: После проверки восстановите политику хранения с нужными значениями для продакшена.
Предупреждение: Будьте осторожны при установке очень коротких сроков хранения, так как это приведёт к немедленному удалению результатов. Для проверки используйте тестовую среду.