Kubelet 配置目录合并

当使用 kubelet 的 --config-dir 标志指定配置的 Drop-in 目录时,不同类型数据的合并方式有一些特定的行为。

以下是一些配置合并期间不同数据类型行为的示例

结构体字段

YAML 结构中有两种结构体字段:奇异类型(或标量类型)和嵌入类型(包含标量类型的结构体)。配置合并过程处理奇异类型和嵌入类型结构体字段的覆盖,以生成最终的 kubelet 配置。

例如,你可能希望为所有节点设置一个基准 kubelet 配置,但也希望自定义 addressauthorization 字段。这可以通过以下方式实现:

主 kubelet 配置文件内容

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"

--config-dir 目录中文件的内容

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

最终配置如下所示:

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"

列表

你可以覆盖 kubelet 配置中的切片/列表值。然而,在合并过程中,整个列表会被覆盖。例如,你可以按如下方式覆盖 clusterDNS 列表:

主 kubelet 配置文件内容

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

--config-dir 目录中文件的内容

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

最终配置如下所示:

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"

Map(包括嵌套结构体)

Map 中的单个字段,无论其值类型(布尔型、字符串型等)如何,都可以选择性地被覆盖。然而,对于 map[string][]string,与特定字段关联的整个列表会被覆盖。让我们通过一个示例来更好地理解这一点,特别是关于 featureGatesstaticPodURLHeader 等字段。

主 kubelet 配置文件内容

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"

--config-dir 目录中文件的内容

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"

最终配置如下所示:

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"
最后修改于太平洋标准时间 2024年3月8日 上午10:41:docs: 更新 KubeletConfigDropinDir 文档信息 (c306367734)