使用 kubeadm API 自定義元件

本頁面介紹如何自定義 kubeadm 部署的元件。對於控制平面元件,你可以在 `ClusterConfiguration` 結構中使用標誌或按節點使用補丁。對於 kubelet 和 kube-proxy,你可以分別使用 `KubeletConfiguration` 和 `KubeProxyConfiguration`。

所有這些選項都可以透過 kubeadm 配置 API 實現。有關配置中每個欄位的更多詳細資訊,請參閱我們的 API 參考頁面

使用 `ClusterConfiguration` 中的標誌自定義控制平面

kubeadm `ClusterConfiguration` 物件提供了一種方式,讓使用者可以覆蓋傳遞給控制平面元件(如 APIServer、ControllerManager、Scheduler 和 Etcd)的預設標誌。元件使用以下結構定義:

  • apiServer
  • controllerManager
  • scheduler
  • etcd

這些結構包含一個通用的 `extraArgs` 欄位,該欄位由 `name` / `value` 對組成。要覆蓋控制平面元件的標誌:

  1. 向配置中新增適當的 `extraArgs`。
  2. 將標誌新增到 `extraArgs` 欄位。
  3. 執行 `kubeadm init` 並使用 `--config <你的配置 YAML>`。

APIServer 標誌

有關詳細資訊,請參閱 kube-apiserver 參考文件

示例用法

apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
kubernetesVersion: v1.16.0
apiServer:
  extraArgs:
  - name: "enable-admission-plugins"
    value: "AlwaysPullImages,DefaultStorageClass"
  - name: "audit-log-path"
    value: "/home/johndoe/audit.log"

ControllerManager 標誌

有關詳細資訊,請參閱 kube-controller-manager 參考文件

示例用法

apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
kubernetesVersion: v1.16.0
controllerManager:
  extraArgs:
  - name: "cluster-signing-key-file"
    value: "/home/johndoe/keys/ca.key"
  - name: "deployment-controller-sync-period"
    value: "50"

Scheduler 標誌

有關詳細資訊,請參閱 kube-scheduler 參考文件

示例用法

apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
kubernetesVersion: v1.16.0
scheduler:
  extraArgs:
  - name: "config"
    value: "/etc/kubernetes/scheduler-config.yaml"
  extraVolumes:
    - name: schedulerconfig
      hostPath: /home/johndoe/schedconfig.yaml
      mountPath: /etc/kubernetes/scheduler-config.yaml
      readOnly: true
      pathType: "File"

Etcd 標誌

有關詳細資訊,請參閱 etcd 伺服器文件

示例用法

apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
etcd:
  local:
    extraArgs:
    - name: "election-timeout"
      value: 1000

使用補丁進行自定義

功能狀態: Kubernetes v1.22 [beta]

Kubeadm 允許你在單個節點上將包含補丁檔案的目錄傳遞給 `InitConfiguration` 和 `JoinConfiguration`。這些補丁可以用作元件配置寫入磁碟之前的最後一步自定義。

你可以透過 `kubeadm init --config <你的配置 YAML>` 將此檔案傳遞給 `kubeadm init`。

apiVersion: kubeadm.k8s.io/v1beta4
kind: InitConfiguration
patches:
  directory: /home/user/somedir

你可以透過 `kubeadm join --config <你的配置 YAML>` 將此檔案傳遞給 `kubeadm join`。

apiVersion: kubeadm.k8s.io/v1beta4
kind: JoinConfiguration
patches:
  directory: /home/user/somedir

目錄中必須包含名為 `target[suffix][+patchtype].extension` 的檔案。例如,`kube-apiserver0+merge.yaml` 或 `etcd.json`。

  • `target` 可以是 `kube-apiserver`、`kube-controller-manager`、`kube-scheduler`、`etcd` 和 `kubeletconfiguration` 之一。
  • `suffix` 是一個可選字串,可用於按字母數字順序確定首先應用哪些補丁。
  • `patchtype` 可以是 `strategic`、`merge` 或 `json` 之一,並且這些必須與 kubectl 支援的補丁格式匹配。預設的 `patchtype` 是 `strategic`。
  • `extension` 必須是 `json` 或 `yaml`。

自定義 kubelet

要自定義 kubelet,你可以在同一配置檔案中,在 `ClusterConfiguration` 或 `InitConfiguration` 旁邊新增一個 `KubeletConfiguration`,用 `---` 分隔。然後,此檔案可以傳遞給 `kubeadm init`,kubeadm 將把相同的基本 `KubeletConfiguration` 應用到叢集中的所有節點。

要在基本 `KubeletConfiguration` 上應用特定於例項的配置,你可以使用 `kubeletconfiguration` 補丁目標

或者,你可以透過在 `InitConfiguration` 和 `JoinConfiguration` 都支援的 `nodeRegistration.kubeletExtraArgs` 欄位中傳遞 kubelet 標誌作為覆蓋。有些 kubelet 標誌已棄用,因此在使用它們之前,請在 kubelet 參考文件中檢查它們的狀態。

有關其他詳細資訊,請參閱 使用 kubeadm 配置叢集中的每個 kubelet

自定義 kube-proxy

要自定義 kube-proxy,你可以將 `KubeProxyConfiguration` 傳遞給 `kubeadm init`,它位於 `ClusterConfiguration` 或 `InitConfiguration` 旁邊,用 `---` 分隔。

有關更多詳細資訊,你可以導航到我們的 API 參考頁面

最後修改時間:2024 年 7 月 5 日,下午 4:06 PST:kubeadm:在所有文件示例中使用 v1beta4 (efc1133fa4)