A Bash-based toolkit for validating Kubernetes cluster behavior under API, scheduler, CPU, memory, DNS, Cilium, fio, and StatefulSet storage workloads.
git clone https://github.com/wasdo129/k8s-check-tests.git
cd k8s-check-tests
kubectl cluster-info
chmod +x run-all-tests.sh
./run-all-tests.shArtifacts are saved under:
artifacts/<timestamp>/
Originally created for MKaaS cluster validation, but kept cluster-agnostic where the test scenario allows it.
- Kubernetes cluster access via
kubectl - Bash
jqkubectl- Optional:
ciliumCLI, required only for Cilium connectivity and network performance tests - Optional:
kube-burner, required only for kube-burner API create/patch/delete tests - Optional: fio-capable images available in the target cluster
- Metrics Server for
kubectl topoutput in diagnostics
Набор Kubernetes-тестов для проверки кластера по нескольким направлениям:
- нагрузка на Kubernetes API;
- scheduler resource-guarded burst;
- CPU и memory saturation;
- fio IO-intensive;
- Cilium connectivity и network perf;
- CoreDNS / DNS load;
- StatefulSet storage tests.
Главный entrypoint проекта:
run-all-tests.sh0.init-cluster/- init baseline диагностика кластера перед нагрузкой.1.1.api-test/- kube-burnercreate / patch / deleteиapi-soak-churn.2.1.sheduler-test/- scheduler resource-guarded burst тест и standalone runner.3.1.test-cpu/- CPU saturation тест.3.2.test-mem/- memory saturation тест.3.3.fio/- fio IO-intensive тесты и standalone runner по профилям.4.1.cilium/- Cilium status, connectivity и network perf.4.2.dns/- DNS / CoreDNS / node-local-dns load runner.5.1.stateful/- StatefulSet storage тесты и отдельный runner для них.run-all-tests.sh- единый orchestration-скрипт для запуска всех этапов по очереди.
Основной runner не содержит реализацию нагрузочных сценариев. Он создает общий
RUN_DIR, выполняет preflight/cleanup и вызывает stage-скрипты в соответствующих
директориях, передавая им LOG_DIR внутри artifacts/<timestamp>/.
- API test сначала запускает kube-burner
create / patch / deleteпо Deployment и Service. После него всегда запускаетсяapi-soak-churn: 5 минут создает и удаляет ConfigMap, Secret, ServiceAccount, Role, RoleBinding, Service и маленькие Deployment, проверяя API/readyz,/livez,/versionи признаки деградации API. - Scheduler test создает много маленьких
pausepod'ов пачками и завершает нагрузку при первомFailedSchedulingсInsufficient cpuилиInsufficient memory, сохраняя events, pod describes и summary. - CPU test запускает
stress-ngpod'ы с маленьким CPU request и постепенно масштабирует Deployment.Insufficient cpuсчитается штатной точкой остановки capacity-теста;Insufficient memoryтоже останавливает stage как resource boundary, чтобы Pending pod'ы не висели без завершения runner. - Memory test запускает
stress-ng --vmpod'ы с маленьким memory request/limit, чтобы тест работал и на небольших кластерах.Insufficient memory,OOMKilled,EvictedиCrashLoopBackOff/Errorостанавливают memory stage с диагностикой и cleanup. - fio IO-intensive stage запускает четыре fio-профиля:
randread,randwrite,seqread,seqwrite. Каждый профиль создает Job'ы ступенями отFIO_INITIAL_JOBSдоFIO_MAX_JOBS, собирает Kubernetes snapshot'ы, fio output и summary. Успех засчитывается только если все созданные Job завершилисьComplete, без Failed/Error/OOMKilled/Evicted pod'ов и без системных storage/network health failures. Активные Job в финальном snapshot считаются ошибкой или timeout, а не успешным частичным результатом. - StatefulSet storage stage проверяет PVC/CSI storage classes
standardиhigh-iops: сначала запускает baseline fio Job на одном PVC, затем в режимеfulloptional longrun Job, после этого масштабирует StatefulSet с отдельным PVC на каждую реплику.Pendingfio pod'ы,CrashLoopBackOff/Error,OOMKilled,Evicted,SystemOOM, NotReady node, Cilium not ready или unhealthy CSI pod считаются ошибкой stage.
Cilium stage проверяет базовую готовность Cilium, connectivity scenarios и network performance. Stage сохраняет cilium status, Cilium pods, Cilium Envoy pods, deployment/daemonset состояние, Cilium node objects, node PodCIDR/IP mapping, cilium-dbg status --verbose key fields и cilium-dbg endpoint list до и после каждого Cilium-сценария.
cilium status: PASS означает только, что Cilium components на момент проверки были Ready. Это не гарантирует прохождение connectivity suite. Основной индикатор сетевой корректности находится в connectivity-test/summary.txt, connectivity-test/output.log и общем artifacts-cilium/summary.txt.
Runner различает итог сценариев и baseline:
result=pass|fail- прошли ли Cilium status/connectivity/perf сценарии.baseline_status=clean|degraded- были ли Cilium warnings/errors в статусе, events или output.perf_validity=valid|degraded|invalid- можно ли использовать perf-результаты как чистый benchmark.baseline_status=degradedне останавливает оставшиеся Cilium сценарии, но снижает доверие к perf-цифрам.
Connectivity/perf failure не должен теряться из-за exit_code=0 у Cilium CLI: runner дополнительно парсит output на tests failed, failed actions и явные failure markers. Если найден fail, stage получает result=fail, но остальные Cilium сценарии продолжают выполняться для сбора полной диагностики.
Runner пишет scenario-summary.tsv с итогом каждого сценария и diagnostics-summary.tsv с оценкой diagnostics snapshot'ов. Diagnostics тоже участвуют в baseline_status=degraded: Cilium warnings, Unhealthy, Failed, BackOff, Error, Timeout, forbidden и connection refused в diagnostics не прерывают stage, но фиксируются в summary. Перед каждым следующим Cilium-сценарием runner удаляет cilium-test-* namespace и по умолчанию ждет их удаления, чтобы старые resources не смешивались с новым сценарием.
cilium connectivity test может падать на старых Cilium log errors, потому что сам Cilium CLI проверяет логи компонентов. Поэтому при разборе failure нужно смотреть не только connectivity-test/summary.txt, но и connectivity-test/output.log, diagnostics-summary.tsv, cilium-diagnostics-*.txt и timestamp stage_started_at_utc в общем summary. Старые ошибки не равны ошибке текущей нагрузки, но они все равно снижают доверие к состоянию кластера.
DNS stage вынесен отдельно от Cilium и запускается флагом RUN_DNS. Он создает нагрузочный Deployment в namespace dns-test, выполняет nslookup из нескольких pod'ов, собирает per-pod counters, агрегированный success rate, health snapshots node-local-dns, node-local-dns logs и DNS pod logs.
Успешный DNS success rate не означает полностью чистый DNS baseline. Нужно отдельно смотреть node-local-dns-summary.txt: result=warning указывает на restarts или suspicious log lines вроде SERVFAIL, plugin/errors, i/o timeout, connection refused.
FIO stage проверяет, что кластер может создать и выполнить IO-нагрузку в namespace load-test, а worker node, container runtime, CNI и ephemeral storage выдерживают короткий профиль чтения/записи без явных отказов. Это не полноценный benchmark всей storage-платформы: текущие manifests используют emptyDir с ephemeral-storage, поэтому результат в первую очередь отражает локальный storage path выбранных worker-нод, а не PVC/CSI latency.
Профили:
fio-randread-fixed.yaml- random read, block size4k,iodepth=16,numjobs=2.fio-randwrite-fixed.yaml- random write, block size4k,iodepth=16,numjobs=2.fio-seqread-fixed.yaml- sequential read, block size1M,iodepth=16,numjobs=2.fio-seqwrite-fixed.yaml- sequential write, block size1M,iodepth=16,numjobs=2.
Runner запускает профили последовательно. Внутри одного профиля Job'ы добавляются ступенями, например 1 -> 2 -> 3 -> 4, затем runner ждет завершения всех созданных Job. Если последний Job еще Running после FIO_JOB_COMPLETION_TIMEOUT, профиль завершается с result: fail, потому что fio output неполный и его нельзя честно сравнивать с завершенными прогонами.
Завершение Job фиксируется не только через финальный kubectl wait, но и в completed-jobs.txt. Это защищает тест от ложного fail, если Kubernetes успел удалить уже завершенную Job по ttlSecondsAfterFinished. В summary поэтому нужно смотреть jobs_completed_observed, jobs_completed_by_wait, jobs_deleted_after_completion, jobs_created_total и jobs_current_in_api. Нормальный случай для успешного профиля: jobs_completed_observed == jobs_created_total, jobs_failed: 0, pods_failed_like: 0, pods_evicted: 0.
Смотреть нужно не только summary.txt, но и all-fio-logs.txt / final-fio-logs.txt: там находятся fio IOPS, bandwidth, latency percentiles и disk stats. Runner дополнительно пишет fio-metrics-summary.tsv с pod-level IOPS, bandwidth и latency percentile, чтобы результат можно было быстро сравнить скриптом без ручного парсинга fio output. all-fio-logs.txt объединяет logs со всех scale snapshots и final snapshot, поэтому метрики не теряются, если ранний pod уже исчез из финального состояния.
Если в summary.txt есть jobs_active > 0, jobs_completed_observed < jobs_created_total, jobs_succeeded < jobs_current_in_api, pods_failed_like > 0, pods_evicted > 0 или result: fail, результат профиля невалиден для performance-сравнения. Если baseline_status: degraded или performance_valid: false, профиль мог технически пройти, но performance-цифры нельзя считать чистым baseline.
Для каждого snapshot'а fio runner сохраняет placement pod'ов в *-pod-placement.tsv. Это важно: без node placement нельзя объяснить разброс между pod'ами и нельзя проверить, сработал ли topologySpreadConstraints.
Ограничения, которые важно явно указывать в отчете:
emptyDirне проверяет PVC/CSI storage class; для этого используется5.1.stateful.topologySpreadConstraintsпросит scheduler распределять pods поkubernetes.io/hostname, ноwhenUnsatisfiable: ScheduleAnywayне блокирует запуск, если распределить невозможно.- Наличие baseline warning'ов в kube-system, Cilium или CSI снижает доверие к performance-цифрам, даже если fio jobs завершились. FIO stage фиксирует Cilium degraded/not ready в snapshots,
*-cilium-status.txt,degraded-details.txtиsummary.txt, но не прерывает профиль только из-за состояния Cilium.
Основные параметры fio stage:
FIO_INITIAL_JOBS- сколько Job создать на первом шаге, по умолчанию1.FIO_STEP- шаг увеличения числа Job, по умолчанию1.FIO_MAX_JOBS- верхняя граница Job на профиль, по умолчанию4.FIO_STEP_SLEEP- время наблюдения после каждого scale-step, по умолчанию90.FIO_FINAL_SLEEP- дополнительное ожидание перед финальнымkubectl wait, по умолчанию60.FIO_JOB_COMPLETION_TIMEOUT- timeout ожидания завершения каждой Job, по умолчанию300s.FIO_CAPTURE_CILIUM_STATUS- сохранятьcilium statusв snapshot'ах, по умолчанию наследуетCAPTURE_CILIUM_STATUS.FIO_STORAGE_TARGET- текстовая метка в summary, сейчас по умолчаниюemptyDir.
Job manifests держат ttlSecondsAfterFinished: 3600, чтобы completed Job не удалялись раньше финального сбора логов и summary. Cleanup в конце профиля все равно удаляет Job и namespace load-test.
StatefulSet stage проверяет PVC-backed storage, а не emptyDir. Он запускается для одного диска standard или high-iops, либо для обоих через STATEFUL_DISK=all. Все ресурсы создаются в namespace storage-test.
Порядок работы:
baselineвсегда запускает PVC и fio Job для выбранного storage class.fullдополнительно запускает longrun fio Job перед scale-тестом.- Scale-тест применяет StatefulSet
fio-scale-*, где каждая реплика получает отдельный PVC черезvolumeClaimTemplates. - Runner масштабирует StatefulSet по
SCALE_STEPSи после каждого шага ждетkubectl rollout status sts/<name> --timeout=$ROLLOUT_TIMEOUT. - После каждого успешного шага собираются StatefulSet/pod/PVC/events snapshots,
kubectl top node, CSI pod placement и logsfio-scale-*.
Успешный baseline Job не означает, что scale прошел. Baseline проверяет один PVC и один fio Job, а scale одновременно нагружает scheduler, CSI provisioning, attach/mount path и ресурсы worker node.
Типовой capacity-stop для scale-теста выглядит так:
- часть pod'ов
fio-scale-*остаетсяPending; - соответствующие PVC остаются
PendingсWaitForPodScheduled; describe podпоказываетFailedSchedulingсInsufficient cpuилиInsufficient memory.
В таком случае причина не в том, что CSI не смог создать volume. PVC с WaitForFirstConsumer не начнет provisioning, пока scheduler не выберет node для pod. Поэтому Pending PVC нужно читать вместе с describe pod: если pod не scheduled из-за CPU/memory, это resource boundary кластера, а не storage provisioning failure.
Runner считает stage failed при:
- timeout rollout на любом scale-step;
Pending,ContainerCreating,CrashLoopBackOff,Error,OOMKilledилиEvictedу fio pod'ов;- NotReady node во время теста;
SystemOOMв событиях после старта stage;- Cilium agent not ready;
- unhealthy CSI pod.
Основные артефакты:
stateful-<disk>-<timestamp>.log- общий лог runner, snapshots, события, причины fail.fio-baseline-...log- output baseline fio Job с IOPS/BW/latency.fio-longrun-...log- output longrun fio Job, только дляSTATEFUL_MODE=full.stateful-<disk>-scale-pod-logs-<timestamp>.log- logs всехfio-scale-*pod'ов, которые удалось прочитать.
Важные параметры:
STATEFUL_DISK=standard|high-iops|all- какой storage class тестировать.STATEFUL_MODE=baseline|full-baselineзапускаетbaseline + scale,fullзапускаетbaseline + longrun + scale.SCALE_STEPS="1 2 4 6 8 12 16 20 24 32 40 60 80"- ступени scale-теста.ROLLOUT_TIMEOUT=300s- timeout каждого шага StatefulSet rollout.CLEANUP_ON_EXIT=true|false- удалять namespacestorage-testв конце.
Если нужен чистый storage-only сигнал, подбирай SCALE_STEPS под реальные allocatable CPU/memory кластера. Иначе тест остановится на scheduler resource boundary раньше, чем покажет предел CSI или дисковой подсистемы.
Часть API-сценариев проверялась с kube-burner версии:
Version: 2.4.2
Git Commit: f3c72cc9b320f6827b1bc5f32d2e874cada46c6a
Build Date: 2026-03-04T17:12:21Z
Go Version: go1.23.12
OS/Arch: darwin amd64
Проверить локальную версию можно так:
kube-burner versionБыстрая проверка доступа к кластеру:
kubectl config current-context
kubectl get nodes
kubectl auth can-i get pods -AДля Cilium-сценариев дополнительно проверь:
cilium statusИз корня проекта:
./run-all-tests.shЕсли нужно, чтобы stateful-этап внутри общего прогона тоже включал longrun, запускай:
./run-all-tests.sh fullСкрипт последовательно запускает:
- init cluster baseline: версии Kubernetes, node/runtime, kube-system, requests/limits системных workload'ов
1.1API create / patch / delete и api-soak-churn2.1scheduler resource-guarded burst3.1CPU until fail3.2memory until fail3.3fio IO-intensive4.1Cilium network4.2DNS / CoreDNS load5.1StatefulSet storage; по умолчанию запускаетсяbaseline + scaleдляstandard
По умолчанию между этапами выполняется cleanup тестовых namespace.
Можно отключать отдельные этапы через переменные окружения.
Примеры:
RUN_FIO=false RUN_STATEFUL=false ./run-all-tests.sh
RUN_API=false RUN_SCHEDULER=false RUN_CPU=false RUN_MEM=true ./run-all-tests.sh
RUN_CILIUM=false RUN_STATEFUL=true ./run-all-tests.sh
RUN_CILIUM=false RUN_DNS=true RUN_STATEFUL=false ./run-all-tests.shПример явного выбора первых этапов:
RUN_INIT=true \
RUN_API=true \
RUN_SCHEDULER=true \
RUN_CPU=false \
RUN_MEM=false \
RUN_FIO=false \
RUN_CILIUM=false \
RUN_DNS=false \
RUN_STATEFUL=false \
./run-all-tests.shДоступные флаги этапов:
RUN_INIT=true|falseRUN_API=true|falseRUN_SCHEDULER=true|falseRUN_CPU=true|falseRUN_MEM=true|falseRUN_FIO=true|falseRUN_CILIUM=true|falseRUN_DNS=true|falseRUN_STATEFUL=true|falseSTATEFUL_DISK=all|standard|high-iopsSTATEFUL_MODE=baseline|fullbaseline=baseline + scalefull=baseline + longrun + scale
По умолчанию stateful-этап в общем runner запускает baseline + scale для standard.
Запустить только init-стадию:
RUN_INIT=true \
RUN_API=false \
RUN_SCHEDULER=false \
RUN_CPU=false \
RUN_MEM=false \
RUN_FIO=false \
RUN_CILIUM=false \
RUN_DNS=false \
RUN_STATEFUL=false \
./run-all-tests.shОтключить init-стадию в любом выборочном запуске можно через RUN_INIT=false.
Запустить через общий runner только stateful standard (baseline + scale):
RUN_INIT=false \
RUN_API=false \
RUN_SCHEDULER=false \
RUN_CPU=false \
RUN_MEM=false \
RUN_FIO=false \
RUN_CILIUM=false \
RUN_DNS=false \
RUN_STATEFUL=true \
STATEFUL_DISK=standard \
./run-all-tests.shЗапустить полный stateful-прогон для standard (baseline + longrun + scale):
RUN_API=false \
RUN_SCHEDULER=false \
RUN_CPU=false \
RUN_MEM=false \
RUN_FIO=false \
RUN_CILIUM=false \
RUN_STATEFUL=true \
STATEFUL_DISK=standard \
./run-all-tests.sh fullЗапустить полный stateful-прогон для выбранного диска через env:
RUN_STATEFUL=true STATEFUL_DISK=high-iops STATEFUL_MODE=full ./run-all-tests.shОчистить тестовые namespace без запуска нагрузки:
./run-all-tests.sh --cleanup-onlyСкрипт удаляет:
api-load-*preload-kube-burner-*sched-testload-testcilium-test-*dns-teststorage-test
Если нужно сохранить ресурсы после теста для ручной диагностики:
CLEANUP_ON_EXIT=false CLEANUP_BETWEEN_STAGES=false ./run-all-tests.shНаиболее полезные настройки запуска:
CONTINUE_ON_ERROR=true- продолжать следующие этапы даже если один этап завершился неуспешно.K8S_READY_RETRIES=12- увеличить количество preflight-проверок API.K8S_READY_SLEEP=15- увеличить паузу между retry проверки API.KUBE_BURNER_RETRIES=5- повторятьkube-burner initпри временных ошибках API/IAM.API_RESOURCE_GUARD_INTERVAL_SECONDS=10- интервал проверки API stage на Pending pod сInsufficient cpu|memory.RUN_API_SOAK=true- запускатьapi-soak-churnпосле kube-burner API сценария.API_SOAK_AFTER_RESOURCE_LIMIT=true- запускатьapi-soak-churn, даже если kube-burner create уже уперся в resource limit.API_SOAK_DURATION_SECONDS=300- длительностьapi-soak-churn.API_SOAK_ROUND_SLEEP=2- пауза между round'ами churn-теста.API_SOAK_CONFIGMAPS=40,API_SOAK_SECRETS=40,API_SOAK_RBAC_OBJECTS=10,API_SOAK_SERVICES=10,API_SOAK_DEPLOYMENTS=10- размер одного round'аapi-soak-churn.SCHED_MAX_PODS=2000- технический верхний предел количества маленьких pod'ов для scheduler burst.SCHED_SOFT_MAX_PODS=500- безопасный soft-limit: при достижении этого количества runner фиксирует диагностику и останавливает scheduler stage;0отключает soft-limit.SCHED_BATCH_SIZE=50- сколько pod'ов создавать за одну пачку.SCHED_GUARD_INTERVAL_SECONDS=5- пауза между пачками и проверками scheduler guard.SCHED_STOP_ON_ANY_PENDING=true- останавливать scheduler stage при появлении любыхPendingpod, даже если причина еще не стала явнымInsufficient cpu|memory.SCHED_CPU_REQUEST=5m,SCHED_MEMORY_REQUEST=16Mi- маленькие requests для scheduler pod.SCHED_CPU_LIMIT=50m,SCHED_MEMORY_LIMIT=32Mi- маленькие limits для scheduler pod.INITIAL_GUARD_TIMEOUT_SECONDS=60- сколько CPU/MEM runner ждет resource stop condition после initial scale перед продолжением.SCHEDULING_GUARD_INTERVAL_SECONDS=5- интервал polling для CPU/MEM проверкиInsufficient cpu|memoryи memory pod failures.STEP=2,STEP_SLEEP=22- дефолтный шаг и пауза scale для CPU/MEM saturation stages.WAIT_READY_TIMEOUT=180s- timeout rollout в CoreDNS load-тесте.MIN_READY_REPLICAS=1- минимальное число Ready pod для продолжения CoreDNS load-теста после rollout timeout.FAIL_ON_DNS_ERRORS=true- считать DNS load-тест неуспешным, если есть fail запросы.CILIUM_CONNECTIVITY_ALLOW_FAILURE=false- не игнорировать non-zero exit уcilium connectivity test.CILIUM_STATUS_STRICT=false- не валить stage только из-за degraded Cilium baseline; failures самих сценариев все равно даютresult=fail.CILIUM_WAIT_CLEANUP=true- ждать удаленияcilium-test-*namespace между Cilium scenarios.CILIUM_CLEANUP_TIMEOUT_SECONDS=180- timeout ожидания cleanup Cilium test namespaces.CILIUM_CLEANUP_POLL_SECONDS=5- interval polling cleanup Cilium test namespaces.FIO_INITIAL_JOBS=1,FIO_STEP=1,FIO_MAX_JOBS=4- ступени fio Job'ов в каждом профиле.FIO_STEP_SLEEP=90,FIO_FINAL_SLEEP=60- паузы наблюдения между ступенями и перед финальной проверкой fio stage.FIO_JOB_COMPLETION_TIMEOUT=300s- timeout ожидания завершения каждого созданного fio Job перед финальным summary.FIO_CAPTURE_CILIUM_STATUS=true- сохранятьcilium status, cilium pods и warning events в fio artifacts. Состояние Cilium может перевести baseline вdegraded, но само по себе не прерывает fio-профиль.FIO_CAPTURE_DEGRADED_DESCRIBES=true- при degraded baseline сохранять краткие details по fio pods, cilium pods и warning events.ROLLOUT_TIMEOUT=300s- timeout одного шага StatefulSet scale-теста.SCALE_STEPS="1 2 4 8 16"- изменить список scale-шагов для storage runner.
Пример более осторожного запуска:
K8S_READY_RETRIES=12 \
K8S_READY_SLEEP=15 \
KUBE_BURNER_RETRIES=5 \
KUBE_BURNER_RETRY_SLEEP=30 \
ROLLOUT_TIMEOUT=300s \
./run-all-tests.shКаждый запуск сохраняет результаты в:
artifacts/YYYY-MM-DD-HH:MM:SS/
artifacts/2026-05-18-18-00-00/
├── summary.txt
├── artifacts-api/
├── artifacts-scheduler/
├── artifacts-fio/
├── artifacts-cilium/
├── artifacts-dns/
└── artifacts-stateful/
Обезличенный пример общего summary находится в
examples/summary.txt.
Основные файлы верхнего уровня:
summary.txt- общий итог полного запуска: overall status, счетчики stages, статусыpass/fail/skip/interrupted, cleanup status и ссылки на stage artifacts.stage-summary.tsv- машинно-читаемый stage-level итог:stage,status,exit_code,cleanup,artifacts.run-all-tests.log- общий лог orchestration-скрипта.
Основные поддиректории:
artifacts-init/- нулевой этап диагностики кластера: версии Kubernetes/API, verbose/readyz, leases control-plane компонентов, node/runtime versions, kube-system pods, образы control-plane/Cilium/CSI/metrics-server,componentstatuses, последние events, requests/limits системных workload'ов и QoS pod'ов. Отсутствующие requests/limits записываются вkube-system-workload-resources-missing.txt, но не останавливают дальнейшие этапы.artifacts-api/- kube-burner API тесты:workdir/- рабочие файлы kube-burner,api-after-create.txt,api-after-patch.txt,api-after-delete.txt- snapshots после стадий. Еслиapi-createупирается вInsufficient cpu|memory, runner останавливает kube-burner, пропускаетapi-patch/api-deleteи пишет диагностику:api-create-resource-exhaustion-summary.txt,api-create-pods-wide.txt,api-create-failed-scheduling-events.txt,api-create-pending-pod-describes.txt.api-soak/- 5-минутный churn-тест API server: round-манифесты и логиkubectl apply/delete,api-soak-summary.txt,api-soak-api-degradation-detected.txt,api-soak-resource-exhaustion-detected.txt,api-soak-events.txt,api-soak-pods-wide.txt.artifacts-scheduler/- scheduler resource-guarded burst тест:scheduler-resource-limit.txtилиscheduler-max-pods.txt- общие snapshot'ы кластера,scheduler-resource-limit-namespace.txtилиscheduler-max-pods-namespace.txt- namespace-level диагностика,scheduler-resource-limit-summary.txtилиscheduler-max-pods-summary.txt- итоговые счетчики pod и событияFailedScheduling. ПриInsufficient cpu|memoryдополнительно создаются:scheduler-resource-exhaustion-summary.txt,scheduler-pods-wide.txt,scheduler-failed-scheduling-events.txt,scheduler-pending-pod-describes.txt.artifacts-cpu/- CPU saturation test: snapshotsinitial.txt,scale-*.txt,final.txt, общийrun.log, Pending pod describes приInsufficient cpu|memory.artifacts-mem/- memory saturation test: snapshotsinitial.txt,scale-*.txt,final.txt, общийrun.log, pod describes приInsufficient memory,OOMKilled,EvictedилиCrashLoopBackOff/Error.artifacts-fio/- fio тесты по профилям:randread/,randwrite/,seqread/,seqwrite/,run.log- общий лог fio stage,<profile>/summary.txt- итоговый статус профиля и счетчики Job/Pod,<profile>/scale-*.txtи<profile>/final.txt- Kubernetes snapshot'ы,<profile>/scale-*-fio-logs.txtи<profile>/final-fio-logs.txt- fio output с IOPS/BW/latency,<profile>/fio-metrics-summary.tsv- машинно-читаемая pod-level выжимка из fio output,<profile>/*-pod-placement.tsv- распределение fio pod'ов по node,<profile>/*-cilium-status.txt- Cilium status и последние Cilium warning events,<profile>/degraded-details.txt- краткая диагностика при degraded baseline.artifacts-cilium/- Cilium status, connectivity и perf:<scenario>/output.log- raw output Cilium CLI,<scenario>/summary.txt- PASS/FAIL сценария,cilium-diagnostics-*.txt- Cilium pods, Envoy pods, deploy/ds,cilium-dbg status --verbose, endpoint list, nodes PodCIDR/IP и CiliumNode objects,scenario-summary.tsv- машинно-читаемый итог каждого Cilium scenario,diagnostics-summary.tsv- машинно-читаемый итог degraded-проверок diagnostics snapshot'ов,summary.txt- итогresult,baseline_status, degraded reasons и failures.artifacts-dns/- DNS / CoreDNS load:run.log,summary.txt,initial.txt,during.txt,final.txt,*-dns-pods.log- логи DNS load pod'ов,*-node-local-dns-health.txt- health snapshot'ы node-local-dns,*-node-local-dns.log- логи node-local-dns,node-local-dns-summary.txt- итоговая оценка Ready/restarts/suspicious log lines.artifacts-stateful/- StatefulSet storage поstandardиhigh-iops. Здесь создаются:stateful-<disk>-<timestamp>.log- общий лог stateful runner,stateful-<disk>-scale-pod-logs-<timestamp>.log-kubectl logsдля pod'овfio-scale-*,fio-baseline-...logиfio-longrun-...log- логи job-сценариев.
Если нужно запускать отдельные сценарии напрямую:
./0.init-cluster/run-init-tests.sh
./1.1.api-test/run-api-tests.sh
./1.1.api-test/run-api-soak-test.sh
./2.1.sheduler-test/run-scheduler-tests.sh
./3.1.test-cpu/run-cpu-until-fail.sh
./3.2.test-mem/run-mem-until-fail.sh
./3.3.fio/run-fio-tests.sh
./4.1.cilium/run-cilium-tests.sh
./4.2.dns/run-dns-tests.sh
./5.1.stateful/run-stateful-tests.sh standard
./5.1.stateful/run-stateful-tests.sh high-iops
./5.1.stateful/run-stateful-tests.sh standard full
./5.1.stateful/run-stateful-tests.sh high-iops fullДля низкоуровневой отладки можно запускать внутренние runner'ы напрямую:
./3.3.fio/run-all-fio-tests.sh fio-randread-fixed.yaml
./4.2.dns/run-coredns-load-test.sh
./4.2.dns/run-dns-tests.shВсе standalone runner'ы принимают LOG_DIR. Если LOG_DIR не задан, они пишут
в stage-local директорию вида artifacts-* рядом со своим скриптом.
Для scheduler standalone это означает:
2.1.sheduler-test/artifacts-scheduler/run.log
При запуске через общий runner scheduler-логи пишутся в:
artifacts/<timestamp>/artifacts-scheduler/run.log
Без full stateful-runner запускает baseline + scale.
С full запускает baseline + longrun + scale.