You are viewing documentation for Kubernetes version: v1.31

Kubernetes v1.31 documentation is no longer actively maintained. The version you are currently viewing is a static snapshot. For up-to-date information, see the latest version.

Kubelet Configuration Directory Merging

When using the kubelet's --config-dir flag to specify a drop-in directory for configuration, there is some specific behavior on how different types are merged.

Here are some examples of how different data types behave during configuration merging:

Structure Fields

There are two types of structure fields in a YAML structure: singular (or a scalar type) and embedded (structures that contain scalar types). The configuration merging process handles the overriding of singular and embedded struct fields to create a resulting kubelet configuration.

For instance, you may want a baseline kubelet configuration for all nodes, but you may want to customize the address and authorization fields. This can be done as follows:

Main kubelet configuration file contents:

apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration port: 20250 authorization:  mode: Webhook  webhook:  cacheAuthorizedTTL: "5m"  cacheUnauthorizedTTL: "30s" serializeImagePulls: false address: "192.168.0.1" 

Contents of a file in --config-dir directory:

apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration authorization:  mode: AlwaysAllow  webhook:  cacheAuthorizedTTL: "8m"  cacheUnauthorizedTTL: "45s" address: "192.168.0.8" 

The resulting configuration will be as follows:

apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration port: 20250 serializeImagePulls: false authorization:  mode: AlwaysAllow  webhook:  cacheAuthorizedTTL: "8m"  cacheUnauthorizedTTL: "45s" address: "192.168.0.8" 

Lists

You can overide the slices/lists values of the kubelet configuration. However, the entire list gets overridden during the merging process. For example, you can override the clusterDNS list as follows:

Main kubelet configuration file contents:

apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration port: 20250 serializeImagePulls: false clusterDNS:  - "192.168.0.9"  - "192.168.0.8" 

Contents of a file in --config-dir directory:

apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration clusterDNS:  - "192.168.0.2"  - "192.168.0.3"  - "192.168.0.5" 

The resulting configuration will be as follows:

apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration port: 20250 serializeImagePulls: false clusterDNS:  - "192.168.0.2"  - "192.168.0.3"  - "192.168.0.5" 

Maps, including Nested Structures

Individual fields in maps, regardless of their value types (boolean, string, etc.), can be selectively overridden. However, for map[string][]string, the entire list associated with a specific field gets overridden. Let's understand this better with an example, particularly on fields like featureGates and staticPodURLHeader:

Main kubelet configuration file contents:

apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration port: 20250 serializeImagePulls: false featureGates:  AllAlpha: false  MemoryQoS: true staticPodURLHeader:  kubelet-api-support:  - "Authorization: 234APSDFA"  - "X-Custom-Header: 123"  custom-static-pod:  - "Authorization: 223EWRWER"  - "X-Custom-Header: 456" 

Contents of a file in --config-dir directory:

apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration featureGates:  MemoryQoS: false  KubeletTracing: true  DynamicResourceAllocation: true staticPodURLHeader:  custom-static-pod:  - "Authorization: 223EWRWER"  - "X-Custom-Header: 345" 

The resulting configuration will be as follows:

apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration port: 20250 serializeImagePulls: false featureGates:  AllAlpha: false  MemoryQoS: false  KubeletTracing: true  DynamicResourceAllocation: true staticPodURLHeader:  kubelet-api-support:  - "Authorization: 234APSDFA"  - "X-Custom-Header: 123"  custom-static-pod:  - "Authorization: 223EWRWER"  - "X-Custom-Header: 345" 
Last modified March 08, 2024 at 10:41 AM PST: docs: Update KubeletConfigDropinDir doc information (c306367734)