156 lines
4.0 KiB
Markdown
156 lines
4.0 KiB
Markdown
---
|
|
content_type: "reference"
|
|
title: Kubelet Configuration Directory Merging
|
|
weight: 50
|
|
---
|
|
|
|
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:
|
|
```yaml
|
|
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:
|
|
```yaml
|
|
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:
|
|
```yaml
|
|
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:
|
|
```yaml
|
|
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:
|
|
```yaml
|
|
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:
|
|
```yaml
|
|
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:
|
|
```yaml
|
|
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:
|
|
```yaml
|
|
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:
|
|
```yaml
|
|
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"
|
|
```
|