Kubelet 配置目錄合併

當使用 kubelet 的 --config-dir 標誌來指定配置的落地區域時,不同型別的配置合併方式有一些特定的行為。

以下是一些在配置合併過程中,不同資料型別行為的示例:

結構體欄位

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 配置中的 slices/lists 值。但是,在合併過程中,整個列表都會被覆蓋。例如,你可以像這樣覆蓋 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 中的單個欄位,無論其值型別(boolean、string 等)如何,都可以被選擇性地覆蓋。但是,對於 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 PST:docs: Update KubeletConfigDropinDir doc information (c306367734)