Kubernetes: What is the maximum value of env's count in pod?

1/15/2021

Kubernetes: What is the maximum value of env's count in pod? I found a option in pod.Spec 'enableServiceLinks' which default true, but the pod has more envs when enableServiceLinks=true. So I set it to false, things get better. I want to know, how much envs can exist in a pod?

-- Y.Thomas
kubernetes
kubernetes-pod

1 Answer

1/26/2021

There is no limits for env's count in pod. You are not limited by count/numbet/etc - you are limited by memory itself.

What you have in any linux os, is execve. There are no shortcuts for different sections, your one is Limits on size of arguments and environment

Most UNIX implementations impose some limit on the total size of the command-line argument (argv) and environment (envp) strings that may be passed to a new program. POSIX.1 allows an implementation to advertise this limit using the ARG_MAX constant (either defined in <limits.h> or available at run time using the call sysconf(_SC_ARG_MAX)). On Linux prior to kernel 2.6.23, the memory used to store the environment and argument strings was limited to 32 pages (defined by the kernel constant MAX_ARG_PAGES). On architectures with a 4-kB page size, this yields a maximum size of 128 kB.

On kernel 2.6.23 and later, most architectures support a size limit derived from the soft RLIMIT_STACK resource limit (see getrlimit(2)) that is in force at the time of the execve() call. (Architectures with no memory management unit are excepted: they maintain the limit that was in effect before kernel 2.6.23.) This change allows programs to have a much larger argument and/or environment list. For these architectures, the total size is limited to 1/4 of the allowed stack size. (Imposing the 1/4-limit ensures that the new program always has some stack space.) Since Linux 2.6.25, the kernel places a floor of 32 pages on this size limit, so that, even when RLIMIT_STACK is set very low, applications are guaranteed to have at least as much argument and environment space as was provided by Linux 2.6.23 and earlier. (This guarantee was not provided in Linux 2.6.23 and 2.6.24.) Additionally, the limit per string is 32 pages (the kernel constant MAX_ARG_STRLEN), and the maximum number of strings is 0x7FFFFFFF.

So, in 2 words,

  • On Linux prior to kernel 2.6.23: maximum size of 128 kB

  • On kernel 2.6.23 and later: most architectures support a size limit derived from the soft RLIMIT_STACK resource

What I also think - there is a limit in 1MB of etcd(this is a place where kubernetes keeps all objects). So in case you use configmaps - you have to remember about this limitation. Limit 1MB is etcd limit itself.

Urls to check:

  1. Size limit for ConfigMap

  2. @Rico answer on stack: Kubernetes ConfigMap size limitation

-- Vit
Source: StackOverflow