From 9c15ee6bd6401b193df8602fcb834b845e1558ae Mon Sep 17 00:00:00 2001 From: Long Vo Date: Fri, 26 Jun 2026 16:52:26 +0200 Subject: [PATCH 1/3] [CIEXE-2016] Migrate GitLab CI jobs to pod-level resource variables Co-Authored-By: Claude Sonnet 4.6 --- .gitlab/generate-appsec.php | 72 +++++++++++------------ .gitlab/generate-package.php | 106 +++++++++++++++++----------------- .gitlab/generate-profiler.php | 55 ++++++------------ .gitlab/generate-tracer.php | 56 +++++++++--------- 4 files changed, 132 insertions(+), 157 deletions(-) diff --git a/.gitlab/generate-appsec.php b/.gitlab/generate-appsec.php index 9f46752466..99c48e9644 100644 --- a/.gitlab/generate-appsec.php +++ b/.gitlab/generate-appsec.php @@ -73,14 +73,10 @@ extends: .appsec_test image: registry.ddbuild.io/images/mirror/datadog/dd-trace-ci:php-${PHP_MAJOR_MINOR}_bookworm-8 variables: - KUBERNETES_CPU_REQUEST: 3 - KUBERNETES_CPU_LIMIT: 3 - KUBERNETES_MEMORY_REQUEST: 6Gi - KUBERNETES_MEMORY_LIMIT: 6Gi - KUBERNETES_HELPER_CPU_REQUEST: 1 - KUBERNETES_HELPER_CPU_LIMIT: 1 - KUBERNETES_HELPER_MEMORY_REQUEST: 3Gi - KUBERNETES_HELPER_MEMORY_LIMIT: 3Gi + KUBERNETES_POD_CPU_REQUEST: 3 + KUBERNETES_POD_CPU_LIMIT: 3 + KUBERNETES_POD_MEMORY_REQUEST: 6Gi + KUBERNETES_POD_MEMORY_LIMIT: 6Gi parallel: matrix: - PHP_MAJOR_MINOR: *all_minor_major_targets @@ -107,9 +103,9 @@ image: 486234852809.dkr.ecr.us-east-1.amazonaws.com/docker:29.4.0-noble # TODO: use a proper docker image with java pre-installed? tags: [ "docker-in-docker:amd64" ] variables: - KUBERNETES_CPU_REQUEST: 8 - KUBERNETES_MEMORY_REQUEST: 24Gi - KUBERNETES_MEMORY_LIMIT: 30Gi + KUBERNETES_POD_CPU_REQUEST: 8 + KUBERNETES_POD_MEMORY_REQUEST: 24Gi + KUBERNETES_POD_MEMORY_LIMIT: 30Gi DOCKER_LOOPBACK_SIZE: 30G ARCH: amd64 HELPER_FLAG: "" @@ -203,9 +199,9 @@ interruptible: false - when: on_success variables: - KUBERNETES_CPU_REQUEST: 4 - KUBERNETES_MEMORY_REQUEST: 8Gi - KUBERNETES_MEMORY_LIMIT: 10Gi + KUBERNETES_POD_CPU_REQUEST: 4 + KUBERNETES_POD_MEMORY_REQUEST: 8Gi + KUBERNETES_POD_MEMORY_LIMIT: 10Gi ARCH: amd64 before_script: @@ -238,9 +234,9 @@ interruptible: false - when: on_success variables: - KUBERNETES_CPU_REQUEST: 4 - KUBERNETES_MEMORY_REQUEST: 8Gi - KUBERNETES_MEMORY_LIMIT: 10Gi + KUBERNETES_POD_CPU_REQUEST: 4 + KUBERNETES_POD_MEMORY_REQUEST: 8Gi + KUBERNETES_POD_MEMORY_LIMIT: 10Gi ARCH: amd64 before_script: @@ -312,9 +308,9 @@ interruptible: false - when: on_success variables: - KUBERNETES_CPU_REQUEST: 8 - KUBERNETES_MEMORY_REQUEST: 24Gi - KUBERNETES_MEMORY_LIMIT: 30Gi + KUBERNETES_POD_CPU_REQUEST: 8 + KUBERNETES_POD_MEMORY_REQUEST: 24Gi + KUBERNETES_POD_MEMORY_LIMIT: 30Gi ARCH: amd64 DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED: "0" before_script: @@ -394,9 +390,9 @@ extends: .appsec_test image: registry.ddbuild.io/images/mirror/datadog/dd-trace-ci:php-8.3_bookworm-8 variables: - KUBERNETES_CPU_REQUEST: 3 - KUBERNETES_MEMORY_REQUEST: 3Gi - KUBERNETES_MEMORY_LIMIT: 4Gi + KUBERNETES_POD_CPU_REQUEST: 3 + KUBERNETES_POD_MEMORY_REQUEST: 3Gi + KUBERNETES_POD_MEMORY_LIMIT: 4Gi ARCH: amd64 script: - | @@ -481,9 +477,9 @@ extends: .docker_push_job tags: [ "docker-in-docker:${ARCH}" ] variables: - KUBERNETES_CPU_REQUEST: 8 - KUBERNETES_MEMORY_REQUEST: 16Gi - KUBERNETES_MEMORY_LIMIT: 24Gi + KUBERNETES_POD_CPU_REQUEST: 8 + KUBERNETES_POD_MEMORY_REQUEST: 16Gi + KUBERNETES_POD_MEMORY_LIMIT: 24Gi parallel: matrix: # XXX: docker-in-docker:arm64 is not supported yet @@ -499,9 +495,9 @@ "push appsec docker images multiarch": extends: .docker_push_job variables: - KUBERNETES_CPU_REQUEST: 2 - KUBERNETES_MEMORY_REQUEST: 4Gi - KUBERNETES_MEMORY_LIMIT: 6Gi + KUBERNETES_POD_CPU_REQUEST: 2 + KUBERNETES_POD_MEMORY_REQUEST: 4Gi + KUBERNETES_POD_MEMORY_LIMIT: 6Gi ARCH: amd64 rules: - when: on_success @@ -516,9 +512,9 @@ extends: .appsec_test image: registry.ddbuild.io/images/mirror/datadog/dd-trace-ci:php-8.3_bookworm-8 variables: - KUBERNETES_CPU_REQUEST: 3 - KUBERNETES_MEMORY_REQUEST: 9Gi - KUBERNETES_MEMORY_LIMIT: 10Gi + KUBERNETES_POD_CPU_REQUEST: 3 + KUBERNETES_POD_MEMORY_REQUEST: 9Gi + KUBERNETES_POD_MEMORY_LIMIT: 10Gi ARCH: amd64 script: - sudo apt install -y clang-format-20 @@ -538,9 +534,9 @@ extends: .appsec_test image: registry.ddbuild.io/images/mirror/datadog/dd-trace-ci:bookworm-8 variables: - KUBERNETES_CPU_REQUEST: 3 - KUBERNETES_MEMORY_REQUEST: 3Gi - KUBERNETES_MEMORY_LIMIT: 4Gi + KUBERNETES_POD_CPU_REQUEST: 3 + KUBERNETES_POD_MEMORY_REQUEST: 3Gi + KUBERNETES_POD_MEMORY_LIMIT: 4Gi parallel: matrix: - ARCH: *arch_targets @@ -564,9 +560,9 @@ # extends: .appsec_test # image: registry.ddbuild.io/images/mirror/datadog/dd-trace-ci:bookworm-8 # variables: -# KUBERNETES_CPU_REQUEST: 3 -# KUBERNETES_MEMORY_REQUEST: 5Gi -# KUBERNETES_MEMORY_LIMIT: 6Gi +# KUBERNETES_POD_CPU_REQUEST: 3 +# KUBERNETES_POD_MEMORY_REQUEST: 5Gi +# KUBERNETES_POD_MEMORY_LIMIT: 6Gi # parallel: # matrix: # - ARCH: *arch_targets diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index bc760c9e2b..503ffc470d 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -217,9 +217,9 @@ ABI_NO: "" PHP_VERSION: "" CARGO_BUILD_JOBS: 12 - KUBERNETES_CPU_REQUEST: 12 - KUBERNETES_MEMORY_REQUEST: 4Gi - KUBERNETES_MEMORY_LIMIT: 8Gi + KUBERNETES_POD_CPU_REQUEST: 12 + KUBERNETES_POD_MEMORY_REQUEST: 4Gi + KUBERNETES_POD_MEMORY_LIMIT: 8Gi script: - .gitlab/build-profiler.sh "datadog-profiling/${TRIPLET}/lib/php/${ABI_NO}" "nts" - .gitlab/build-profiler.sh "datadog-profiling/${TRIPLET}/lib/php/${ABI_NO}" "zts" @@ -259,9 +259,9 @@ ABI_NO: "" PHP_VERSION: "" MAKE_JOBS: 12 - KUBERNETES_CPU_REQUEST: 12 - KUBERNETES_MEMORY_REQUEST: 4Gi - KUBERNETES_MEMORY_LIMIT: 8Gi + KUBERNETES_POD_CPU_REQUEST: 12 + KUBERNETES_POD_MEMORY_REQUEST: 4Gi + KUBERNETES_POD_MEMORY_LIMIT: 8Gi script: # Fix for $BASH_ENV not having a newline at the end of the file - echo "" >> "$BASH_ENV" @@ -293,9 +293,9 @@ - ARCH: ["amd64", "arm64" ] variables: MAKE_JOBS: 12 - KUBERNETES_CPU_REQUEST: 12 - KUBERNETES_MEMORY_REQUEST: 4Gi - KUBERNETES_MEMORY_LIMIT: 8Gi + KUBERNETES_POD_CPU_REQUEST: 12 + KUBERNETES_POD_MEMORY_REQUEST: 4Gi + KUBERNETES_POD_MEMORY_LIMIT: 8Gi script: .gitlab/build-appsec-helper.sh artifacts: paths: @@ -311,9 +311,9 @@ - ARCH: ["amd64", "arm64" ] variables: MAKE_JOBS: 12 - KUBERNETES_CPU_REQUEST: 12 - KUBERNETES_MEMORY_REQUEST: 8Gi - KUBERNETES_MEMORY_LIMIT: 12Gi + KUBERNETES_POD_CPU_REQUEST: 12 + KUBERNETES_POD_MEMORY_REQUEST: 8Gi + KUBERNETES_POD_MEMORY_LIMIT: 12Gi script: .gitlab/build-appsec-helper-rust.sh artifacts: paths: @@ -350,9 +350,9 @@ ABI_NO: "" PHP_VERSION: "" MAKE_JOBS: 12 - KUBERNETES_CPU_REQUEST: 12 - KUBERNETES_MEMORY_REQUEST: 4Gi - KUBERNETES_MEMORY_LIMIT: 8Gi + KUBERNETES_POD_CPU_REQUEST: 12 + KUBERNETES_POD_MEMORY_REQUEST: 4Gi + KUBERNETES_POD_MEMORY_LIMIT: 8Gi script: # Fix for $BASH_ENV not having a newline at the end of the file - echo "" >> "$BASH_ENV" @@ -418,9 +418,9 @@ ARCH: "" HOST_OS: "" CARGO_BUILD_JOBS: 16 - KUBERNETES_CPU_REQUEST: 16 - KUBERNETES_MEMORY_REQUEST: 5Gi - KUBERNETES_MEMORY_LIMIT: 8Gi + KUBERNETES_POD_CPU_REQUEST: 16 + KUBERNETES_POD_MEMORY_REQUEST: 5Gi + KUBERNETES_POD_MEMORY_LIMIT: 8Gi script: - echo "" >> "$BASH_ENV" - ./.gitlab/build-sidecar.sh "" @@ -465,9 +465,9 @@ TRIPLET: "" ARCH: "" ABI_NO: "" - KUBERNETES_CPU_REQUEST: 12 - KUBERNETES_MEMORY_REQUEST: 8Gi - KUBERNETES_MEMORY_LIMIT: 16Gi + KUBERNETES_POD_CPU_REQUEST: 12 + KUBERNETES_POD_MEMORY_REQUEST: 8Gi + KUBERNETES_POD_MEMORY_LIMIT: 16Gi script: # Fix for $BASH_ENV not having a newline at the end of the file - echo "" >> "$BASH_ENV" @@ -499,9 +499,9 @@ ABI_NO: "" PHP_VERSION: "" MAKE_JOBS: 12 - KUBERNETES_CPU_REQUEST: 12 - KUBERNETES_MEMORY_REQUEST: 4Gi - KUBERNETES_MEMORY_LIMIT: 8Gi + KUBERNETES_POD_CPU_REQUEST: 12 + KUBERNETES_POD_MEMORY_REQUEST: 4Gi + KUBERNETES_POD_MEMORY_LIMIT: 8Gi script: ./.gitlab/build-tracing-asan.sh artifacts: paths: @@ -791,9 +791,9 @@ stage: verify image: 486234852809.dkr.ecr.us-east-1.amazonaws.com/docker:29.4.0-noble # TODO: use a proper docker image with make, php and git pre-installed variables: - KUBERNETES_CPU_REQUEST: 7 - KUBERNETES_MEMORY_REQUEST: 30Gi - KUBERNETES_MEMORY_LIMIT: 40Gi + KUBERNETES_POD_CPU_REQUEST: 7 + KUBERNETES_POD_MEMORY_REQUEST: 30Gi + KUBERNETES_POD_MEMORY_LIMIT: 40Gi RUST_BACKTRACE: 1 DOCKER_COMPOSE_DOWNLOAD_NAME: docker-compose-linux-x86_64 before_script: @@ -874,9 +874,9 @@ - job: datadog-setup.php artifacts: true variables: - KUBERNETES_CPU_REQUEST: 2 - KUBERNETES_MEMORY_REQUEST: 2Gi - KUBERNETES_MEMORY_LIMIT: 4Gi + KUBERNETES_POD_CPU_REQUEST: 2 + KUBERNETES_POD_MEMORY_REQUEST: 2Gi + KUBERNETES_POD_MEMORY_LIMIT: 4Gi RUST_BACKTRACE: 1 before_script: @@ -897,9 +897,9 @@ - job: datadog-setup.php artifacts: true variables: - KUBERNETES_CPU_REQUEST: 2 - KUBERNETES_MEMORY_REQUEST: 2Gi - KUBERNETES_MEMORY_LIMIT: 4Gi + KUBERNETES_POD_CPU_REQUEST: 2 + KUBERNETES_POD_MEMORY_REQUEST: 2Gi + KUBERNETES_POD_MEMORY_LIMIT: 4Gi RUST_BACKTRACE: 1 before_script: @@ -916,9 +916,9 @@ image: 486234852809.dkr.ecr.us-east-1.amazonaws.com/docker:29.4.0-noble tags: [ "docker-in-docker:amd64" ] variables: - KUBERNETES_CPU_REQUEST: 2 - KUBERNETES_MEMORY_REQUEST: 2Gi - KUBERNETES_MEMORY_LIMIT: 4Gi + KUBERNETES_POD_CPU_REQUEST: 2 + KUBERNETES_POD_MEMORY_REQUEST: 2Gi + KUBERNETES_POD_MEMORY_LIMIT: 4Gi needs: - job: "package extension: [amd64, x86_64-unknown-linux-gnu]" artifacts: true @@ -966,9 +966,9 @@ services: - !reference [.services, request-replayer] variables: - KUBERNETES_CPU_REQUEST: 2 - KUBERNETES_MEMORY_REQUEST: 2Gi - KUBERNETES_MEMORY_LIMIT: 4Gi + KUBERNETES_POD_CPU_REQUEST: 2 + KUBERNETES_POD_MEMORY_REQUEST: 2Gi + KUBERNETES_POD_MEMORY_LIMIT: 4Gi DD_AGENT_HOST: request-replayer DD_TRACE_AGENT_PORT: 80 DD_TRACE_AGENT_FLUSH_INTERVAL: 1000 @@ -1089,9 +1089,9 @@ image: registry.ddbuild.io/images/mirror/debian:bullseye-slim tags: [ "arch:" ] variables: - KUBERNETES_CPU_REQUEST: 2 - KUBERNETES_MEMORY_REQUEST: 2Gi - KUBERNETES_MEMORY_LIMIT: 4Gi + KUBERNETES_POD_CPU_REQUEST: 2 + KUBERNETES_POD_MEMORY_REQUEST: 2Gi + KUBERNETES_POD_MEMORY_LIMIT: 4Gi PHP_VERSION: "" needs: - job: "package extension: [, -unknown-linux-gnu]" @@ -1111,9 +1111,9 @@ image: registry.ddbuild.io/images/mirror/alpine:3.12 tags: [ "arch:amd64" ] variables: - KUBERNETES_CPU_REQUEST: 2 - KUBERNETES_MEMORY_REQUEST: 2Gi - KUBERNETES_MEMORY_LIMIT: 4Gi + KUBERNETES_POD_CPU_REQUEST: 2 + KUBERNETES_POD_MEMORY_REQUEST: 2Gi + KUBERNETES_POD_MEMORY_LIMIT: 4Gi needs: - job: "package extension: [amd64, x86_64-alpine-linux-musl]" artifacts: true @@ -1163,9 +1163,9 @@ - !reference [.services, request-replayer] - !reference [.services, httpbin-integration] variables: - KUBERNETES_CPU_REQUEST: 4 - KUBERNETES_MEMORY_REQUEST: 3Gi - KUBERNETES_MEMORY_LIMIT: 5Gi + KUBERNETES_POD_CPU_REQUEST: 4 + KUBERNETES_POD_MEMORY_REQUEST: 3Gi + KUBERNETES_POD_MEMORY_LIMIT: 5Gi parallel: matrix: - PHP_VERSION: @@ -1223,10 +1223,10 @@ tags: [ "docker-in-docker:amd64" ] variables: TEST_LIBRARY: php - KUBERNETES_CPU_REQUEST: 8 + KUBERNETES_POD_CPU_REQUEST: 8 PYTEST_XDIST_AUTO_NUM_WORKERS: 8 - KUBERNETES_MEMORY_REQUEST: 3Gi - KUBERNETES_MEMORY_LIMIT: 4Gi + KUBERNETES_POD_MEMORY_REQUEST: 3Gi + KUBERNETES_POD_MEMORY_LIMIT: 4Gi RUST_BACKTRACE: 1 BUILD_SH_ARGS: php PIP_CACHE_DIR: $CI_PROJECT_DIR/.cache/pip @@ -1633,8 +1633,8 @@ image: registry.ddbuild.io/images/mirror/php:8.2-cli tags: [ "arch:amd64" ] variables: # enough memory for the individual artifacts - KUBERNETES_MEMORY_REQUEST: 4Gi - KUBERNETES_MEMORY_LIMIT: 5Gi + KUBERNETES_POD_MEMORY_REQUEST: 4Gi + KUBERNETES_POD_MEMORY_LIMIT: 5Gi only: refs: - /^ddtrace-.*$/ diff --git a/.gitlab/generate-profiler.php b/.gitlab/generate-profiler.php index 0fd170a569..b2ad812ce7 100644 --- a/.gitlab/generate-profiler.php +++ b/.gitlab/generate-profiler.php @@ -27,18 +27,13 @@ stage: test tags: [ "arch:${ARCH}" ] image: registry.ddbuild.io/images/mirror/datadog/dd-trace-ci:${IMAGE_PREFIX}${PHP_MAJOR_MINOR}${IMAGE_SUFFIX} - # Setting the *_REQUEST and *_LIMIT variables to be the same, and setting - # them for both the build and helper allows using Guaranteed QoS instead of - # Burstable. This means nproc and similar tools will work as expected. + # Setting pod-level *_REQUEST and *_LIMIT to the same value uses Guaranteed QoS + # instead of Burstable, so nproc and similar tools work as expected. variables: - KUBERNETES_CPU_REQUEST: 3 - KUBERNETES_CPU_LIMIT: 3 - KUBERNETES_MEMORY_REQUEST: 6Gi - KUBERNETES_MEMORY_LIMIT: 6Gi - KUBERNETES_HELPER_CPU_REQUEST: 1 - KUBERNETES_HELPER_CPU_LIMIT: 1 - KUBERNETES_HELPER_MEMORY_REQUEST: 2Gi - KUBERNETES_HELPER_MEMORY_LIMIT: 2Gi + KUBERNETES_POD_CPU_REQUEST: 3 + KUBERNETES_POD_CPU_LIMIT: 3 + KUBERNETES_POD_MEMORY_REQUEST: 6Gi + KUBERNETES_POD_MEMORY_LIMIT: 6Gi CARGO_TARGET_DIR: /mnt/ramdisk/cargo # ramdisk?? libdir: /tmp/datadog-profiling parallel: @@ -59,7 +54,7 @@ - cd profiling - 'echo "nproc: $(nproc)"' - - 'echo "KUBERNETES_CPU_REQUEST: ${KUBERNETES_CPU_REQUEST:-}"' + - 'echo "KUBERNETES_POD_CPU_REQUEST: ${KUBERNETES_POD_CPU_REQUEST:-}"' - export TEST_PHP_EXECUTABLE=$(which php) - run_tests_php=$(find $(php-config --prefix) -name run-tests.php) # don't anticipate there being more than one - cp -v "${run_tests_php}" tests @@ -97,14 +92,10 @@ tags: [ "arch:amd64" ] image: registry.ddbuild.io/images/mirror/datadog/dd-trace-ci:php-${PHP_MAJOR_MINOR}_bookworm-8 variables: - KUBERNETES_CPU_REQUEST: 5 - KUBERNETES_CPU_LIMIT: 5 - KUBERNETES_MEMORY_REQUEST: 3Gi - KUBERNETES_MEMORY_LIMIT: 3Gi - KUBERNETES_HELPER_CPU_REQUEST: 1 - KUBERNETES_HELPER_CPU_LIMIT: 1 - KUBERNETES_HELPER_MEMORY_REQUEST: 2Gi - KUBERNETES_HELPER_MEMORY_LIMIT: 2Gi + KUBERNETES_POD_CPU_REQUEST: 5 + KUBERNETES_POD_CPU_LIMIT: 5 + KUBERNETES_POD_MEMORY_REQUEST: 3Gi + KUBERNETES_POD_MEMORY_LIMIT: 3Gi # CARGO_TARGET_DIR: /mnt/ramdisk/cargo # ramdisk?? libdir: /tmp/datadog-profiling parallel: @@ -121,14 +112,10 @@ tags: [ "arch:amd64" ] image: registry.ddbuild.io/images/mirror/datadog/dd-trace-ci:php-8.5_bookworm-8 variables: - KUBERNETES_CPU_REQUEST: 5 - KUBERNETES_CPU_LIMIT: 5 - KUBERNETES_MEMORY_REQUEST: 3Gi - KUBERNETES_MEMORY_LIMIT: 3Gi - KUBERNETES_HELPER_CPU_REQUEST: 1 - KUBERNETES_HELPER_CPU_LIMIT: 1 - KUBERNETES_HELPER_MEMORY_REQUEST: 2Gi - KUBERNETES_HELPER_MEMORY_LIMIT: 2Gi + KUBERNETES_POD_CPU_REQUEST: 5 + KUBERNETES_POD_CPU_LIMIT: 5 + KUBERNETES_POD_MEMORY_REQUEST: 3Gi + KUBERNETES_POD_MEMORY_LIMIT: 3Gi # CARGO_TARGET_DIR: /mnt/ramdisk/cargo # ramdisk?? libdir: /tmp/datadog-profiling script: @@ -141,14 +128,10 @@ tags: [ "arch:${ARCH}" ] image: registry.ddbuild.io/images/mirror/datadog/dd-trace-ci:php-${PHP_MAJOR_MINOR}_bookworm-8 variables: - KUBERNETES_CPU_REQUEST: 5 - KUBERNETES_CPU_LIMIT: 5 - KUBERNETES_MEMORY_REQUEST: 3Gi - KUBERNETES_MEMORY_LIMIT: 3Gi - KUBERNETES_HELPER_CPU_REQUEST: 1 - KUBERNETES_HELPER_CPU_LIMIT: 1 - KUBERNETES_HELPER_MEMORY_REQUEST: 2Gi - KUBERNETES_HELPER_MEMORY_LIMIT: 2Gi + KUBERNETES_POD_CPU_REQUEST: 5 + KUBERNETES_POD_CPU_LIMIT: 5 + KUBERNETES_POD_MEMORY_REQUEST: 3Gi + KUBERNETES_POD_MEMORY_LIMIT: 3Gi CARGO_TARGET_DIR: /tmp/cargo libdir: /tmp/datadog-profiling SKIP_ONLINE_TESTS: "1" diff --git a/.gitlab/generate-tracer.php b/.gitlab/generate-tracer.php index f90afb7438..9fb70d16c5 100644 --- a/.gitlab/generate-tracer.php +++ b/.gitlab/generate-tracer.php @@ -77,9 +77,9 @@ function before_script_steps($with_docker_auth = false) { WITH_ASAN: "0" CARGO_HOME: "/rust/cargo/" SWITCH_PHP_VERSION: "debug" - KUBERNETES_CPU_REQUEST: 12 - KUBERNETES_MEMORY_REQUEST: 4Gi - KUBERNETES_MEMORY_LIMIT: 8Gi + KUBERNETES_POD_CPU_REQUEST: 12 + KUBERNETES_POD_MEMORY_REQUEST: 4Gi + KUBERNETES_POD_MEMORY_LIMIT: 8Gi script: .gitlab/compile_extension.sh after_script: | export out_dir="modules/${PHP_MAJOR_MINOR}-${SWITCH_PHP_VERSION}-${host_os}-${ARCH}/" @@ -178,8 +178,8 @@ function before_script_steps($with_docker_auth = false) { tags: [ "arch:amd64" ] needs: [] variables: - KUBERNETES_CPU_REQUEST: 1 - KUBERNETES_MEMORY_REQUEST: 2Gi + KUBERNETES_POD_CPU_REQUEST: 1 + KUBERNETES_POD_MEMORY_REQUEST: 2Gi before_script: - apt update && apt install -y unzip - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && php composer-setup.php && mv composer.phar /usr/local/bin/composer @@ -240,10 +240,10 @@ function before_script_steps($with_docker_auth = false) { retry: 2 variables: WAIT_FOR: test-agent:9126 - KUBERNETES_CPU_REQUEST: 6 - KUBERNETES_CPU_LIMIT: 6 - KUBERNETES_MEMORY_REQUEST: 4Gi - KUBERNETES_MEMORY_LIMIT: 4Gi + KUBERNETES_POD_CPU_REQUEST: 6 + KUBERNETES_POD_CPU_LIMIT: 6 + KUBERNETES_POD_MEMORY_REQUEST: 4Gi + KUBERNETES_POD_MEMORY_LIMIT: 4Gi MAX_TEST_PARALLELISM: 2 PHP_MAJOR_MINOR: "" ARCH: "" @@ -313,7 +313,7 @@ function before_script_steps($with_docker_auth = false) { artifacts: true variables: WAIT_FOR: test-agent:9126 - KUBERNETES_CPU_REQUEST: 12 + KUBERNETES_POD_CPU_REQUEST: 12 MAX_TEST_PARALLELISM: 4 PHP_MAJOR_MINOR: "" ARCH: "amd64" @@ -368,7 +368,7 @@ function before_script_steps($with_docker_auth = false) { artifacts: true variables: WAIT_FOR: test-agent:9126 - KUBERNETES_CPU_REQUEST: 12 + KUBERNETES_POD_CPU_REQUEST: 12 MAX_TEST_PARALLELISM: 4 PHP_MAJOR_MINOR: "" ARCH: "amd64" @@ -445,10 +445,10 @@ function before_script_steps($with_docker_auth = false) { PHP_MAJOR_MINOR: "" ARCH: "amd64" =")): ?> - KUBERNETES_CPU_REQUEST: 8 + KUBERNETES_POD_CPU_REQUEST: 8 MAX_TEST_PARALLELISM: 16 - KUBERNETES_CPU_REQUEST: 1 + KUBERNETES_POD_CPU_REQUEST: 1 timeout: 40m script: @@ -515,20 +515,16 @@ function before_script_steps($with_docker_auth = false) { SKIP_ONLINE_TESTS: "1" WAIT_FOR: test-agent:9126 =")): ?> - KUBERNETES_CPU_REQUEST: 8 - KUBERNETES_CPU_LIMIT: 8 - KUBERNETES_MEMORY_REQUEST: 7Gi - KUBERNETES_MEMORY_LIMIT: 7Gi + KUBERNETES_POD_CPU_REQUEST: 8 + KUBERNETES_POD_CPU_LIMIT: 8 + KUBERNETES_POD_MEMORY_REQUEST: 7Gi + KUBERNETES_POD_MEMORY_LIMIT: 7Gi - KUBERNETES_CPU_REQUEST: 1 - KUBERNETES_CPU_LIMIT: 1 - KUBERNETES_MEMORY_REQUEST: 4Gi - KUBERNETES_MEMORY_LIMIT: 4Gi + KUBERNETES_POD_CPU_REQUEST: 1 + KUBERNETES_POD_CPU_LIMIT: 1 + KUBERNETES_POD_MEMORY_REQUEST: 4Gi + KUBERNETES_POD_MEMORY_LIMIT: 4Gi - KUBERNETES_HELPER_CPU_REQUEST: 1 - KUBERNETES_HELPER_CPU_LIMIT: 1 - KUBERNETES_HELPER_MEMORY_REQUEST: 1Gi - KUBERNETES_HELPER_MEMORY_LIMIT: 1Gi KUBERNETES_POD_ANNOTATIONS_1: "ci.ddbuild.io/enforce-static-cpus=true" =")): /* too expensive */ ?> DD_INSTRUMENTATION_TELEMETRY_ENABLED: 0 @@ -559,9 +555,9 @@ function before_script_steps($with_docker_auth = false) { variables: DD_TRACE_TEST_SAPI: cli-server COMPOSER_PROCESS_TIMEOUT: 0 - KUBERNETES_CPU_REQUEST: 2 # generally one for PHP and one for the webserver - KUBERNETES_MEMORY_REQUEST: 4Gi - KUBERNETES_MEMORY_LIMIT: 4Gi + KUBERNETES_POD_CPU_REQUEST: 2 # generally one for PHP and one for the webserver + KUBERNETES_POD_MEMORY_REQUEST: 4Gi + KUBERNETES_POD_MEMORY_LIMIT: 4Gi SWITCH_PHP_VERSION: debug COMPOSER_VERSION: 2 before_script: @@ -653,8 +649,8 @@ function before_script_steps($with_docker_auth = false) { COMPOSER_VERSION: 2.2 - KUBERNETES_MEMORY_REQUEST: 6Gi - KUBERNETES_MEMORY_LIMIT: 6Gi + KUBERNETES_POD_MEMORY_REQUEST: 6Gi + KUBERNETES_POD_MEMORY_LIMIT: 6Gi Date: Fri, 26 Jun 2026 17:16:02 +0200 Subject: [PATCH 2/3] [CIEXE-2016] Account for service container resources in pod-level budget KUBERNETES_SERVICE_* vars no longer apply when pod-level resources are enabled. Add each service container's resource footprint to the KUBERNETES_POD_* values for every job that runs sidecars. Co-Authored-By: Claude Sonnet 4.6 --- .gitlab/generate-common.php | 8 ---- .gitlab/generate-package.php | 15 +++++--- .gitlab/generate-tracer.php | 75 +++++++++++++++++++++++++++--------- 3 files changed, 65 insertions(+), 33 deletions(-) diff --git a/.gitlab/generate-common.php b/.gitlab/generate-common.php index 8035f1228b..8132cf830b 100644 --- a/.gitlab/generate-common.php +++ b/.gitlab/generate-common.php @@ -221,10 +221,6 @@ function windows_git_setup_with_packages() { DD_POOL_TRACE_CHECK_FAILURES: true DD_DISABLE_ERROR_RESPONSES: true SNAPSHOT_REGEX_PLACEHOLDERS: 'path:/\S+/dd-trace-php(?=/),httpbin:(?<=//)httpbin-integration:8080' - KUBERNETES_SERVICE_CPU_REQUEST: 1 - KUBERNETES_SERVICE_CPU_LIMIT: 1 - KUBERNETES_SERVICE_MEMORY_REQUEST: 512Mi - KUBERNETES_SERVICE_MEMORY_LIMIT: 512Mi request-replayer: name: registry.ddbuild.io/images/mirror/datadog/dd-trace-ci:php-request-replayer-2.0 @@ -232,10 +228,6 @@ function windows_git_setup_with_packages() { command: ["php", "-S", ":80", "index.php"] variables: DD_REQUEST_DUMPER_FILE: dump.json - KUBERNETES_SERVICE_CPU_REQUEST: 2 - KUBERNETES_SERVICE_CPU_LIMIT: 2 - KUBERNETES_SERVICE_MEMORY_REQUEST: 1Gi - KUBERNETES_SERVICE_MEMORY_LIMIT: 1Gi httpbin-integration: name: registry.ddbuild.io/images/mirror/kong/httpbin:0.2.2 diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index 503ffc470d..0ff8312c0f 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -966,9 +966,9 @@ services: - !reference [.services, request-replayer] variables: - KUBERNETES_POD_CPU_REQUEST: 2 - KUBERNETES_POD_MEMORY_REQUEST: 2Gi - KUBERNETES_POD_MEMORY_LIMIT: 4Gi + KUBERNETES_POD_CPU_REQUEST: 4 + KUBERNETES_POD_MEMORY_REQUEST: 3Gi + KUBERNETES_POD_MEMORY_LIMIT: 5Gi DD_AGENT_HOST: request-replayer DD_TRACE_AGENT_PORT: 80 DD_TRACE_AGENT_FLUSH_INTERVAL: 1000 @@ -1163,9 +1163,9 @@ - !reference [.services, request-replayer] - !reference [.services, httpbin-integration] variables: - KUBERNETES_POD_CPU_REQUEST: 4 - KUBERNETES_POD_MEMORY_REQUEST: 3Gi - KUBERNETES_POD_MEMORY_LIMIT: 5Gi + KUBERNETES_POD_CPU_REQUEST: 6 + KUBERNETES_POD_MEMORY_REQUEST: 5Gi + KUBERNETES_POD_MEMORY_LIMIT: 7Gi parallel: matrix: - PHP_VERSION: @@ -1197,6 +1197,9 @@ DDAGENT_HOSTNAME: 127.0.0.1 DD_AGENT_HOST: 127.0.0.1 DATADOG_HAVE_DEV_ENV: 1 + KUBERNETES_POD_CPU_REQUEST: 10 + KUBERNETES_POD_MEMORY_REQUEST: 5Gi + KUBERNETES_POD_MEMORY_LIMIT: 6Gi needs: - job: "package extension: [amd64, x86_64-unknown-linux-gnu]" artifacts: true diff --git a/.gitlab/generate-tracer.php b/.gitlab/generate-tracer.php index 9fb70d16c5..1fd7b229e4 100644 --- a/.gitlab/generate-tracer.php +++ b/.gitlab/generate-tracer.php @@ -240,10 +240,10 @@ function before_script_steps($with_docker_auth = false) { retry: 2 variables: WAIT_FOR: test-agent:9126 - KUBERNETES_POD_CPU_REQUEST: 6 - KUBERNETES_POD_CPU_LIMIT: 6 - KUBERNETES_POD_MEMORY_REQUEST: 4Gi - KUBERNETES_POD_MEMORY_LIMIT: 4Gi + KUBERNETES_POD_CPU_REQUEST: 9 + KUBERNETES_POD_CPU_LIMIT: 9 + KUBERNETES_POD_MEMORY_REQUEST: 6Gi + KUBERNETES_POD_MEMORY_LIMIT: 6Gi MAX_TEST_PARALLELISM: 2 PHP_MAJOR_MINOR: "" ARCH: "" @@ -293,6 +293,9 @@ function before_script_steps($with_docker_auth = false) { variables: PHP_MAJOR_MINOR: "" ARCH: "amd64" + KUBERNETES_POD_CPU_REQUEST: 4 + KUBERNETES_POD_MEMORY_REQUEST: 5Gi + KUBERNETES_POD_MEMORY_LIMIT: 5Gi TEST_PHP_JUNIT: "${CI_PROJECT_DIR}/artifacts/tests/php-tests.xml" script: - mkdir -p "${CI_PROJECT_DIR}/artifacts/tests" @@ -313,7 +316,9 @@ function before_script_steps($with_docker_auth = false) { artifacts: true variables: WAIT_FOR: test-agent:9126 - KUBERNETES_POD_CPU_REQUEST: 12 + KUBERNETES_POD_CPU_REQUEST: 15 + KUBERNETES_POD_MEMORY_REQUEST: 6Gi + KUBERNETES_POD_MEMORY_LIMIT: 6Gi MAX_TEST_PARALLELISM: 4 PHP_MAJOR_MINOR: "" ARCH: "amd64" @@ -368,7 +373,9 @@ function before_script_steps($with_docker_auth = false) { artifacts: true variables: WAIT_FOR: test-agent:9126 - KUBERNETES_POD_CPU_REQUEST: 12 + KUBERNETES_POD_CPU_REQUEST: 15 + KUBERNETES_POD_MEMORY_REQUEST: 6Gi + KUBERNETES_POD_MEMORY_LIMIT: 6Gi MAX_TEST_PARALLELISM: 4 PHP_MAJOR_MINOR: "" ARCH: "amd64" @@ -515,15 +522,15 @@ function before_script_steps($with_docker_auth = false) { SKIP_ONLINE_TESTS: "1" WAIT_FOR: test-agent:9126 =")): ?> - KUBERNETES_POD_CPU_REQUEST: 8 - KUBERNETES_POD_CPU_LIMIT: 8 - KUBERNETES_POD_MEMORY_REQUEST: 7Gi - KUBERNETES_POD_MEMORY_LIMIT: 7Gi + KUBERNETES_POD_CPU_REQUEST: 9 + KUBERNETES_POD_CPU_LIMIT: 9 + KUBERNETES_POD_MEMORY_REQUEST: 8Gi + KUBERNETES_POD_MEMORY_LIMIT: 8Gi - KUBERNETES_POD_CPU_REQUEST: 1 - KUBERNETES_POD_CPU_LIMIT: 1 - KUBERNETES_POD_MEMORY_REQUEST: 4Gi - KUBERNETES_POD_MEMORY_LIMIT: 4Gi + KUBERNETES_POD_CPU_REQUEST: 2 + KUBERNETES_POD_CPU_LIMIT: 2 + KUBERNETES_POD_MEMORY_REQUEST: 5Gi + KUBERNETES_POD_MEMORY_LIMIT: 5Gi KUBERNETES_POD_ANNOTATIONS_1: "ci.ddbuild.io/enforce-static-cpus=true" =")): /* too expensive */ ?> @@ -555,9 +562,9 @@ function before_script_steps($with_docker_auth = false) { variables: DD_TRACE_TEST_SAPI: cli-server COMPOSER_PROCESS_TIMEOUT: 0 - KUBERNETES_POD_CPU_REQUEST: 2 # generally one for PHP and one for the webserver - KUBERNETES_POD_MEMORY_REQUEST: 4Gi - KUBERNETES_POD_MEMORY_LIMIT: 4Gi + KUBERNETES_POD_CPU_REQUEST: 5 # generally one for PHP and one for the webserver + KUBERNETES_POD_MEMORY_REQUEST: 6Gi + KUBERNETES_POD_MEMORY_LIMIT: 6Gi SWITCH_PHP_VERSION: debug COMPOSER_VERSION: 2 before_script: @@ -649,9 +656,32 @@ function before_script_steps($with_docker_auth = false) { COMPOSER_VERSION: 2.2 - KUBERNETES_POD_MEMORY_REQUEST: 6Gi - KUBERNETES_POD_MEMORY_LIMIT: 6Gi + KUBERNETES_POD_MEMORY_REQUEST: 8Gi + KUBERNETES_POD_MEMORY_LIMIT: 8Gi + $service) { + if (str_contains($target, $part)) { + foreach ((array)$service as $svc) { + if ($svc === "elasticsearch7") { $extra_cpu += 1; $extra_mem_mib += 2048; } + elseif ($svc === "elasticsearch2") { $extra_mem_mib += 512; } + elseif ($svc === "kafka") { $extra_cpu += 1; $extra_mem_mib += 1024; } + elseif ($svc === "zookeeper") { $extra_mem_mib += 256; } + elseif ($svc === "sqlsrv") { $extra_cpu += 1; $extra_mem_mib += 2048; } + } + } +} +if ($extra_cpu > 0) { + echo " KUBERNETES_POD_CPU_REQUEST: " . (5 + $extra_cpu) . "\n"; +} +if ($extra_mem_mib > 0) { + $total_mem_gi = (int)ceil((6 * 1024 + $extra_mem_mib) / 1024); + echo " KUBERNETES_POD_MEMORY_REQUEST: {$total_mem_gi}Gi\n"; + echo " KUBERNETES_POD_MEMORY_LIMIT: {$total_mem_gi}Gi\n"; +} +?> " MAKE_TARGET: "" ARCH: "amd64" + KUBERNETES_POD_MEMORY_REQUEST: 7Gi + KUBERNETES_POD_MEMORY_LIMIT: 7Gi @@ -705,6 +737,8 @@ function before_script_steps($with_docker_auth = false) { PHP_MAJOR_MINOR: "" MAKE_TARGET: "test_distributed_tracing" ARCH: "amd64" + KUBERNETES_POD_MEMORY_REQUEST: 7Gi + KUBERNETES_POD_MEMORY_LIMIT: 7Gi DD_DISTRIBUTED_TRACING: "false" @@ -747,6 +781,9 @@ function before_script_steps($with_docker_auth = false) { variables: PHP_MAJOR_MINOR: "" ARCH: "amd64" + KUBERNETES_POD_CPU_REQUEST: 4 + KUBERNETES_POD_MEMORY_REQUEST: 6Gi + KUBERNETES_POD_MEMORY_LIMIT: 6Gi REPORT_EXIT_STATUS: "1" script: - make install_all From c7147f941585505cd3e7b256cc19f267f9ddcf9f Mon Sep 17 00:00:00 2001 From: Long Vo Date: Fri, 26 Jun 2026 17:56:11 +0200 Subject: [PATCH 3/3] [CIEXE-2016] Fix pod resource budgets to satisfy pod-level scheduling constraints MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit With ci.gitlab-runner.enable-pod-level-resources on, Kubernetes validates: pod_request >= sum(container_requests) and pod_limit >= each container_limit Runner global defaults per service (no explicit KUBERNETES_SERVICE_*): request=2Gi, limit=6Gi | dind sidecar: request=50Gi, limit=50Gi Changes: - appsec dind jobs: 24-30Gi → 52Gi (covers 50Gi dind sidecar + helper) - ASAN / test_extension_ci / xDebug (3 services): 5-6Gi → 7-9Gi - PHP Language Tests ≥7.4: 8Gi → 10Gi (OOMKill headroom for helper+test-agent) - PHP Language Tests <7.4: 5Gi → 6Gi (pod_limit ≥ 6Gi service limit) - .cli_integration_test (3-4 services): 6Gi → 9Gi; loop adds 2Gi for web (mysql) - test_auto_instrumentation/composer/integration/distributed_tracing: 7Gi → 9Gi - .verify_job: pod_limit 5Gi → 6Gi (request-replayer has 6Gi limit) Co-Authored-By: Claude Sonnet 4.6 --- .gitlab/generate-appsec.php | 8 ++++---- .gitlab/generate-package.php | 2 +- .gitlab/generate-tracer.php | 10 +++++----- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.gitlab/generate-appsec.php b/.gitlab/generate-appsec.php index 99c48e9644..dd94d4135a 100644 --- a/.gitlab/generate-appsec.php +++ b/.gitlab/generate-appsec.php @@ -105,7 +105,7 @@ variables: KUBERNETES_POD_CPU_REQUEST: 8 KUBERNETES_POD_MEMORY_REQUEST: 24Gi - KUBERNETES_POD_MEMORY_LIMIT: 30Gi + KUBERNETES_POD_MEMORY_LIMIT: 52Gi DOCKER_LOOPBACK_SIZE: 30G ARCH: amd64 HELPER_FLAG: "" @@ -201,7 +201,7 @@ variables: KUBERNETES_POD_CPU_REQUEST: 4 KUBERNETES_POD_MEMORY_REQUEST: 8Gi - KUBERNETES_POD_MEMORY_LIMIT: 10Gi + KUBERNETES_POD_MEMORY_LIMIT: 52Gi ARCH: amd64 before_script: @@ -236,7 +236,7 @@ variables: KUBERNETES_POD_CPU_REQUEST: 4 KUBERNETES_POD_MEMORY_REQUEST: 8Gi - KUBERNETES_POD_MEMORY_LIMIT: 10Gi + KUBERNETES_POD_MEMORY_LIMIT: 52Gi ARCH: amd64 before_script: @@ -310,7 +310,7 @@ variables: KUBERNETES_POD_CPU_REQUEST: 8 KUBERNETES_POD_MEMORY_REQUEST: 24Gi - KUBERNETES_POD_MEMORY_LIMIT: 30Gi + KUBERNETES_POD_MEMORY_LIMIT: 52Gi ARCH: amd64 DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED: "0" before_script: diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index 0ff8312c0f..1fd9127fc5 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -968,7 +968,7 @@ variables: KUBERNETES_POD_CPU_REQUEST: 4 KUBERNETES_POD_MEMORY_REQUEST: 3Gi - KUBERNETES_POD_MEMORY_LIMIT: 5Gi + KUBERNETES_POD_MEMORY_LIMIT: 6Gi DD_AGENT_HOST: request-replayer DD_TRACE_AGENT_PORT: 80 DD_TRACE_AGENT_FLUSH_INTERVAL: 1000 diff --git a/.gitlab/generate-tracer.php b/.gitlab/generate-tracer.php index 1fd7b229e4..405639f4f1 100644 --- a/.gitlab/generate-tracer.php +++ b/.gitlab/generate-tracer.php @@ -295,7 +295,7 @@ function before_script_steps($with_docker_auth = false) { ARCH: "amd64" KUBERNETES_POD_CPU_REQUEST: 4 KUBERNETES_POD_MEMORY_REQUEST: 5Gi - KUBERNETES_POD_MEMORY_LIMIT: 5Gi + KUBERNETES_POD_MEMORY_LIMIT: 7Gi TEST_PHP_JUNIT: "${CI_PROJECT_DIR}/artifacts/tests/php-tests.xml" script: - mkdir -p "${CI_PROJECT_DIR}/artifacts/tests" @@ -524,13 +524,13 @@ function before_script_steps($with_docker_auth = false) { =")): ?> KUBERNETES_POD_CPU_REQUEST: 9 KUBERNETES_POD_CPU_LIMIT: 9 - KUBERNETES_POD_MEMORY_REQUEST: 8Gi - KUBERNETES_POD_MEMORY_LIMIT: 8Gi + KUBERNETES_POD_MEMORY_REQUEST: 10Gi + KUBERNETES_POD_MEMORY_LIMIT: 10Gi KUBERNETES_POD_CPU_REQUEST: 2 KUBERNETES_POD_CPU_LIMIT: 2 - KUBERNETES_POD_MEMORY_REQUEST: 5Gi - KUBERNETES_POD_MEMORY_LIMIT: 5Gi + KUBERNETES_POD_MEMORY_REQUEST: 6Gi + KUBERNETES_POD_MEMORY_LIMIT: 6Gi KUBERNETES_POD_ANNOTATIONS_1: "ci.ddbuild.io/enforce-static-cpus=true" =")): /* too expensive */ ?>