Skip to content

Configuring the Defaults ConfigMap

The config-defaults ConfigMap, known as the Defaults ConfigMap, contains settings that determine how Knative sets default values for resources.

This ConfigMap is located in the knative-serving namespace.

You can view the current config-defaults ConfigMap by running the following command:

kubectl get configmap -n knative-serving config-defaults -oyaml

Example config-defaults ConfigMap

This is an example configuration policy, not a dump of Knative's shipped defaults. In v1.24, the CPU, memory, and ephemeral-storage quantities below are illustrative overrides; those defaults are unset unless configured. Values stored inside the shipped ConfigMap's _example block are documentation, not active configuration.

See the v1.24 Defaults ConfigMap, NewDefaultsConfigFromMap, and Revision resource defaulting. Cluster admission policy can affect the effective Pod resources; an unset Knative resource default is not a universal statement about the final Pod's allocation.

apiVersion:  v1
kind:  ConfigMap
metadata:
  name:  config-defaults
  namespace:  knative-serving
data:
  revision-timeout-seconds: "300"
  max-revision-timeout-seconds: "600"
  revision-response-start-timeout-seconds: "300"
  revision-idle-timeout-seconds: "0"  # infinite
  revision-cpu-request: "400m"
  revision-memory-request: "100M"
  revision-ephemeral-storage-request: "500M"
  revision-cpu-limit: "1000m"
  revision-memory-limit: "200M"
  revision-ephemeral-storage-limit: "750M"
  container-name-template: "user-container"
  container-concurrency: "0"
  container-concurrency-max-limit: "1000"
  allow-container-concurrency-zero: "true"
  enable-service-links: "false"

See below for a description of each property.

Properties

Revision timeout seconds

The revision timeout value determines the default number of seconds to use for the revision's per-request timeout if none is specified.

  • Global key: revision-timeout-seconds
  • Per-revision spec key: timeoutSeconds
  • Possible values: integer
  • Default: "300" (5 minutes)

Example:

apiVersion:  v1
kind:  ConfigMap
metadata:
  name:  config-defaults
  namespace:  knative-serving
data:
  revision-timeout-seconds: "300"
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-go
  namespace: default
spec:
  template:
    spec:
      timeoutSeconds: 300
      containers:
      - image: ghcr.io/knative/helloworld-go:latest

Max revision timeout seconds

The max-revision-timeout-seconds value determines the maximum number of seconds that can be used for revision-timeout-seconds. This value must be greater than or equal to revision-timeout-seconds. If omitted, the system default is used (600 seconds).

If this value is increased, the activator's terminationGracePeriodSeconds should also be increased to prevent in-flight requests from being disrupted.

  • Global key: max-revision-timeout-seconds
  • Per-revision annotation key: N/A
  • Possible values: integer
  • Default: "600" (10 minutes)

Example:

apiVersion:  v1
kind:  ConfigMap
metadata:
  name:  config-defaults
  namespace:  knative-serving
data:
  max-revision-timeout-seconds: "600"

Revision response start timeout seconds

The revision response start timeout value supplies a default duration in seconds for waiting for the container to start sending a response. If the global key is omitted, NewDefaultsConfigFromMap derives it from the configured revision-timeout-seconds, rather than always using 300 seconds.

  • Global key: revision-response-start-timeout-seconds
  • Per-revision spec key: responseStartTimeoutSeconds
  • Possible values: integer
  • Default: The configured revision-timeout-seconds value (300 with upstream defaults).

This is the global fallback, not a guarantee that every Revision contains an explicit responseStartTimeoutSeconds. v1.24 Revision defaulting applies the nonzero fallback to an omitted field only when it is less than that Revision's timeoutSeconds.

Example:

apiVersion:  v1
kind:  ConfigMap
metadata:
  name:  config-defaults
  namespace:  knative-serving
data:
  revision-response-start-timeout-seconds: "300"
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-go
  namespace: default
spec:
  template:
    spec:
      responseStartTimeoutSeconds: 300
      containers:
      - image: ghcr.io/knative/helloworld-go:latest

Revision idle timeout seconds

The revision idle timeout value determines the maximum duration in seconds a request will be allowed to stay open while not receiving any bytes from the user's application. If omitted, the system default is used (infinite).

  • Global key: revision-idle-timeout-seconds
  • Per-revision spec key: idleTimeoutSeconds
  • Possible values: integer
  • Default: "0" (infinite)

Example:

apiVersion:  v1
kind:  ConfigMap
metadata:
  name:  config-defaults
  namespace:  knative-serving
data:
  revision-idle-timeout-seconds: "0"
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-go
  namespace: default
spec:
  template:
    spec:
      idleTimeoutSeconds: 0
      containers:
      - image: ghcr.io/knative/helloworld-go:latest

Revision CPU request

The revision-cpu-request value supplies a CPU request for containers that do not specify their own request. If the key is omitted, Knative does not supply a CPU request through this setting.

  • Global key: revision-cpu-request
  • Per-revision spec field: spec.template.spec.containers[].resources.requests.cpu
  • Possible values: Kubernetes resource quantity
  • Default: Unset
  • Example value: "400m" (0.4 of a CPU, or 400 milli-CPU)

Example:

apiVersion:  v1
kind:  ConfigMap
metadata:
  name:  config-defaults
  namespace:  knative-serving
data:
  revision-cpu-request: "400m"
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-go
  namespace: default
spec:
  template:
    spec:
      containers:
        - image: ghcr.io/knative/helloworld-go:latest
          resources:
            requests:
              cpu: "400m"

Revision memory request

The revision-memory-request value supplies a memory request for containers that do not specify their own request. If the key is omitted, Knative does not supply a memory request through this setting.

  • Global key: revision-memory-request
  • Per-revision spec field: spec.template.spec.containers[].resources.requests.memory
  • Possible values: Kubernetes resource quantity
  • Default: Unset
  • Example value: "100M" (100 megabytes of memory)

Example:

apiVersion:  v1
kind:  ConfigMap
metadata:
  name:  config-defaults
  namespace:  knative-serving
data:
  revision-memory-request: "100M"
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-go
  namespace: default
spec:
  template:
    spec:
      containers:
        - image: ghcr.io/knative/helloworld-go:latest
          resources:
            requests:
              memory: "100M"

Revision Ephemeral Storage Request

The revision-ephemeral-storage-request value supplies an ephemeral-storage request for containers that do not specify their own request. If the key is omitted, Knative does not supply a request through this setting.

  • Global key: revision-ephemeral-storage-request
  • Per-revision spec field: spec.template.spec.containers[].resources.requests.ephemeral-storage
  • Possible values: Kubernetes resource quantity
  • Default: Unset
  • Example value: "500M" (500 megabytes of storage)

Example:

apiVersion:  v1
kind:  ConfigMap
metadata:
  name:  config-defaults
  namespace:  knative-serving
data:
  revision-ephemeral-storage-request: "500M"
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-go
  namespace: default
spec:
  template:
    spec:
      containers:
        - image: ghcr.io/knative/helloworld-go:latest
          resources:
            requests:
              ephemeral-storage: "500M"

Revision CPU limit

The revision-cpu-limit value supplies a CPU limit for containers that do not specify their own limit. If the key is omitted, Knative does not supply a CPU limit through this setting.

  • Global key: revision-cpu-limit
  • Per-revision spec field: spec.template.spec.containers[].resources.limits.cpu
  • Possible values: Kubernetes resource quantity
  • Default: Unset
  • Example value: "1000m" (1 CPU, or 1000 milli-CPU)

Example:

apiVersion:  v1
kind:  ConfigMap
metadata:
  name:  config-defaults
  namespace:  knative-serving
data:
  revision-cpu-limit: "1000m"
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-go
  namespace: default
spec:
  template:
    spec:
      containers:
        - image: ghcr.io/knative/helloworld-go:latest
          resources:
            limits:
              cpu: "1000m"

Revision memory limit

The revision-memory-limit value supplies a memory limit for containers that do not specify their own limit. If the key is omitted, Knative does not supply a memory limit through this setting.

  • Global key: revision-memory-limit
  • Per-revision spec field: spec.template.spec.containers[].resources.limits.memory
  • Possible values: Kubernetes resource quantity
  • Default: Unset
  • Example value: "200M" (200 megabytes of memory)

Example:

apiVersion:  v1
kind:  ConfigMap
metadata:
  name:  config-defaults
  namespace:  knative-serving
data:
  revision-memory-limit: "200M"
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-go
  namespace: default
spec:
  template:
    spec:
      containers:
        - image: ghcr.io/knative/helloworld-go:latest
          resources:
            limits:
              memory: "200M"

Revision Ephemeral Storage Limit

The revision-ephemeral-storage-limit value supplies an ephemeral-storage limit for containers that do not specify their own limit. If the key is omitted, Knative does not supply a limit through this setting.

  • Global key: revision-ephemeral-storage-limit
  • Per-revision spec field: spec.template.spec.containers[].resources.limits.ephemeral-storage
  • Possible values: Kubernetes resource quantity
  • Default: Unset
  • Example value: "750M" (750 megabytes of storage)

Example:

apiVersion:  v1
kind:  ConfigMap
metadata:
  name:  config-defaults
  namespace:  knative-serving
data:
  revision-ephemeral-storage-limit: "750M"
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-go
  namespace: default
spec:
  template:
    spec:
      containers:
        - image: ghcr.io/knative/helloworld-go:latest
          resources:
            limits:
              ephemeral-storage: "750M"

Container name template

The container-name-template value provides a template for the default container name if no container name is specified. This field supports Go templating and is supplied by the ObjectMeta of the enclosing Service or Configuration, so values such as {{.Name}} are also valid.

  • Global key: container-name-template
  • Per-revision annotation key: name
  • Possible values: string
  • Default: "user-container"

Example:

apiVersion:  v1
kind:  ConfigMap
metadata:
  name:  config-defaults
  namespace:  knative-serving
data:
  container-name-template: "user-container"
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-go
  namespace: default
spec:
  template:
    spec:
      containers:
        - name: user-container
          image: ghcr.io/knative/helloworld-go:latest

Container concurrency

The container-concurrency value specifies the maximum number of requests the container can handle at once. Requests above this threshold are queued. Setting a value of zero disables this throttling and lets through as many requests as the pod receives.

  • Global key: container-concurrency
  • Per-revision spec key: containerConcurrency
  • Possible values: integer
  • Default: "0"

Example:

apiVersion:  v1
kind:  ConfigMap
metadata:
  name:  config-defaults
  namespace:  knative-serving
data:
  container-concurrency: "0"
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-go
  namespace: default
spec:
  template:
    spec:
      containerConcurrency: 0

Container concurrency max limit

The container-concurrency-max-limit setting disables arbitrary large concurrency values, or autoscaling targets, for individual revisions. The container-concurrency default setting must be at or below this value. The value of the container-concurrency-max-limit setting must be greater than 1.

Note

Even with this set, a user can choose a containerConcurrency value of zero (unbounded), unless allow-container-concurrency-zero is set to "false".

  • Global key: container-concurrency-max-limit
  • Per-revision annotation key: N/A
  • Possible values: integer
  • Default: "1000"

Example:

apiVersion:  v1
kind:  ConfigMap
metadata:
  name:  config-defaults
  namespace:  knative-serving
data:
  container-concurrency-max-limit: "1000"
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
  name: knative-serving
  namespace: knative-serving
spec:
  config:
    defaults:
      container-concurrency-max-limit: "1000"

Allow container concurrency zero

The allow-container-concurrency-zero value determines whether users can specify 0 (unbounded) for containerConcurrency.

  • Global key: allow-container-concurrency-zero
  • Per-revision annotation key: N/A
  • Possible values: boolean
  • Default: "true"

Example:

apiVersion:  v1
kind:  ConfigMap
metadata:
  name:  config-defaults
  namespace:  knative-serving
data:
  allow-container-concurrency-zero: "true"

The enable-service-links value specifies the default value used for the enableServiceLinks field of the PodSpec when it is omitted by the user. See the Kubernetes documentation about the enableServiceLinks feature.

This is a tri-state flag with possible values of (true|false|default).

In environments with large number of Services, it is suggested to set this value to false. See serving#8498.

  • Global key: enable-service-links
  • Per-revision annotation key: N/A
  • Possible values: true|false|default
  • Default: "false"

Example:

apiVersion:  v1
kind:  ConfigMap
metadata:
  name:  config-defaults
  namespace:  knative-serving
data:
  enable-service-links: "false"

We use analytics and cookies to understand site traffic. Information about your use of our site is shared with Google for that purpose. Learn more.