使用 kubeadm API 自訂元件

本頁涵蓋如何自訂 kubeadm 部署的元件。對於控制平面元件,您可以使用 ClusterConfiguration 結構中的旗標或每個節點的修補程式。對於 kubelet 和 kube-proxy,您可以分別使用 KubeletConfigurationKubeProxyConfiguration

所有這些選項都可以透過 kubeadm 組態 API 實現。如需組態中每個欄位的更多詳細資訊,您可以瀏覽我們的API 參考頁面

使用 ClusterConfiguration 中的旗標自訂控制平面

kubeadm ClusterConfiguration 物件提供使用者覆寫傳遞至控制平面元件(例如 APIServer、ControllerManager、Scheduler 和 Etcd)的預設旗標的方法。元件是使用下列結構定義的

  • apiServer
  • controllerManager
  • scheduler
  • etcd

這些結構包含通用的 extraArgs 欄位,其中包含 name / value 配對。若要覆寫控制平面元件的旗標

  1. 將適當的 extraArgs 新增至您的組態。
  2. 將旗標新增至 extraArgs 欄位。
  3. 使用 --config <YOUR CONFIG YAML> 執行 kubeadm init

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

使用修補程式自訂

FEATURE STATE: Kubernetes v1.22 [beta]

Kubeadm 允許您將包含修補程式檔案的目錄傳遞給個別節點上的 InitConfigurationJoinConfiguration。這些修補程式可以用作將元件組態寫入磁碟之前的最後自訂步驟。

您可以使用 --config <YOUR CONFIG YAML> 將此檔案傳遞給 kubeadm init

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

您可以使用 --config <YOUR 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-apiserverkube-controller-managerkube-scheduleretcdkubeletconfiguration 之一。
  • suffix 是一個可選字串,可用於確定首先依字母數字順序套用哪些修補程式。
  • patchtype 可以是 strategicmergejson 之一,並且這些必須與 kubectl 支援 的修補格式相符。預設的 patchtypestrategic
  • extension 必須是 jsonyaml

自訂 kubelet

若要自訂 kubelet,您可以將 KubeletConfiguration 新增到 ClusterConfigurationInitConfiguration 旁邊,並以 --- 分隔在同一個組態檔案中。然後,可以將此檔案傳遞給 kubeadm init,並且 kubeadm 會將相同的基本 KubeletConfiguration 套用到叢集中的所有節點。

若要對基本 KubeletConfiguration 套用特定實例的組態,您可以使用 kubeletconfiguration 修補程式目標

或者,您可以使用 kubelet 標誌作為覆寫,方法是在 InitConfigurationJoinConfiguration 皆支援的 nodeRegistration.kubeletExtraArgs 欄位中傳遞它們。某些 kubelet 標誌已被棄用,因此在使用它們之前,請在 kubelet 參考文件 中檢查其狀態。

如需更多詳細資訊,請參閱 使用 kubeadm 在您的叢集中組態每個 kubelet

自訂 kube-proxy

若要自訂 kube-proxy,您可以將 KubeProxyConfiguration 傳遞到您的 ClusterConfigurationInitConfiguration 旁邊,並以 --- 分隔傳遞給 kubeadm init

如需更多詳細資訊,您可以瀏覽至我們的 API 參考頁面

上次修改時間:2024 年 07 月 05 日下午 4:06 PST:kubeadm: use v1beta4 in all docs examples (efc1133fa4)