kubelet 配置目录合并

当使用 kubelet 的 --config-dir 标志来指定存放配置的目录时,不同类型的配置会有一些特定的行为。

以下是在配置合并过程中不同数据类型的一些行为示例:

结构字段

在 YAML 结构中有两种结构字段:独立(标量类型)和嵌入式(此结构包含标量类型)。 配置合并过程将处理独立构造字段和嵌入式构造字段的重载,以创建最终的 kubelet 配置。

例如,你可能想要为所有节点设置一个基准 kubelet 配置,但希望自定义 addressauthorization 字段。 这种情况下,你可以按以下方式完成:

kubelet 主配置文件内容:

  1. apiVersion: kubelet.config.k8s.io/v1beta1
  2. kind: KubeletConfiguration
  3. port: 20250
  4. authorization:
  5. mode: Webhook
  6. webhook:
  7. cacheAuthorizedTTL: "5m"
  8. cacheUnauthorizedTTL: "30s"
  9. serializeImagePulls: false
  10. address: "192.168.0.1"

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

  1. apiVersion: kubelet.config.k8s.io/v1beta1
  2. kind: KubeletConfiguration
  3. authorization:
  4. mode: AlwaysAllow
  5. webhook:
  6. cacheAuthorizedTTL: "8m"
  7. cacheUnauthorizedTTL: "45s"
  8. address: "192.168.0.8"

生成的配置如下所示:

  1. apiVersion: kubelet.config.k8s.io/v1beta1
  2. kind: KubeletConfiguration
  3. port: 20250
  4. serializeImagePulls: false
  5. authorization:
  6. mode: AlwaysAllow
  7. webhook:
  8. cacheAuthorizedTTL: "8m"
  9. cacheUnauthorizedTTL: "45s"
  10. address: "192.168.0.8"

列表

你可以重载 kubelet 配置的切片/列表值。 但在合并过程中整个列表将被重载。 例如,你可以按以下方式重载 clusterDNS 列表:

kubelet 主配置文件的内容:

  1. apiVersion: kubelet.config.k8s.io/v1beta1
  2. kind: KubeletConfiguration
  3. port: 20250
  4. serializeImagePulls: false
  5. clusterDNS:
  6. - "192.168.0.9"
  7. - "192.168.0.8"

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

  1. apiVersion: kubelet.config.k8s.io/v1beta1
  2. kind: KubeletConfiguration
  3. clusterDNS:
  4. - "192.168.0.2"
  5. - "192.168.0.3"
  6. - "192.168.0.5"

生成的配置如下所示:

  1. apiVersion: kubelet.config.k8s.io/v1beta1
  2. kind: KubeletConfiguration
  3. port: 20250
  4. serializeImagePulls: false
  5. clusterDNS:
  6. - "192.168.0.2"
  7. - "192.168.0.3"
  8. - "192.168.0.5"

含嵌套结构的映射

映射中的各个字段(无论其值类型是布尔值、字符串等)都可以被选择性地重载。 但对于 map[string][]string 类型来说,与特定字段关联的整个列表都将被重载。 让我们通过一个例子更好地理解这一点,特别是 featureGatesstaticPodURLHeader 这类字段:

kubelet 主配置文件的内容:

  1. apiVersion: kubelet.config.k8s.io/v1beta1
  2. kind: KubeletConfiguration
  3. port: 20250
  4. serializeImagePulls: false
  5. featureGates:
  6. AllAlpha: false
  7. MemoryQoS: true
  8. staticPodURLHeader:
  9. kubelet-api-support:
  10. - "Authorization: 234APSDFA"
  11. - "X-Custom-Header: 123"
  12. custom-static-pod:
  13. - "Authorization: 223EWRWER"
  14. - "X-Custom-Header: 456"

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

  1. apiVersion: kubelet.config.k8s.io/v1beta1
  2. kind: KubeletConfiguration
  3. featureGates:
  4. MemoryQoS: false
  5. KubeletTracing: true
  6. DynamicResourceAllocation: true
  7. staticPodURLHeader:
  8. custom-static-pod:
  9. - "Authorization: 223EWRWER"
  10. - "X-Custom-Header: 345"

生成的配置如下所示:

  1. apiVersion: kubelet.config.k8s.io/v1beta1
  2. kind: KubeletConfiguration
  3. port: 20250
  4. serializeImagePulls: false
  5. featureGates:
  6. AllAlpha: false
  7. MemoryQoS: false
  8. KubeletTracing: true
  9. DynamicResourceAllocation: true
  10. staticPodURLHeader:
  11. kubelet-api-support:
  12. - "Authorization: 234APSDFA"
  13. - "X-Custom-Header: 123"
  14. custom-static-pod:
  15. - "Authorization: 223EWRWER"
  16. - "X-Custom-Header: 345"