使用 kubeadm API 自訂元件
本頁涵蓋如何自訂 kubeadm 部署的元件。對於控制平面元件,您可以使用 ClusterConfiguration
結構中的旗標或每個節點的修補程式。對於 kubelet 和 kube-proxy,您可以分別使用 KubeletConfiguration
和 KubeProxyConfiguration
。
所有這些選項都可以透過 kubeadm 組態 API 實現。如需組態中每個欄位的更多詳細資訊,您可以瀏覽我們的API 參考頁面。
注意
目前不支援自訂 kubeadm 的 CoreDNS 部署。您必須手動修補kube-system/coredns
ConfigMap,然後重新建立 CoreDNS Pod。或者,您可以略過預設的 CoreDNS 部署,並部署您自己的變體。如需更多詳細資訊,請參閱搭配 kubeadm 使用初始化階段。注意
若要重新設定已建立的叢集,請參閱重新設定 kubeadm 叢集。使用 ClusterConfiguration
中的旗標自訂控制平面
kubeadm ClusterConfiguration
物件提供使用者覆寫傳遞至控制平面元件(例如 APIServer、ControllerManager、Scheduler 和 Etcd)的預設旗標的方法。元件是使用下列結構定義的
apiServer
controllerManager
scheduler
etcd
這些結構包含通用的 extraArgs
欄位,其中包含 name
/ value
配對。若要覆寫控制平面元件的旗標
- 將適當的
extraArgs
新增至您的組態。 - 將旗標新增至
extraArgs
欄位。 - 使用
--config <YOUR CONFIG YAML>
執行kubeadm init
。
注意
您可以透過執行kubeadm config print init-defaults
並將輸出儲存到您選擇的檔案中,產生具有預設值的 ClusterConfiguration
物件。注意
ClusterConfiguration
物件目前在 kubeadm 叢集中是全域性的。這表示您新增的任何標誌,都將套用到不同節點上相同元件的所有實例。若要對不同節點上的每個元件套用個別組態,您可以使用修補程式。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
。這些修補程式可以用作將元件組態寫入磁碟之前的最後自訂步驟。
您可以使用 --config <YOUR CONFIG YAML>
將此檔案傳遞給 kubeadm init
apiVersion: kubeadm.k8s.io/v1beta4
kind: InitConfiguration
patches:
directory: /home/user/somedir
注意
對於kubeadm init
,您可以傳遞一個檔案,其中包含以 ---
分隔的 ClusterConfiguration
和 InitConfiguration
。您可以使用 --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-apiserver
、kube-controller-manager
、kube-scheduler
、etcd
和kubeletconfiguration
之一。suffix
是一個可選字串,可用於確定首先依字母數字順序套用哪些修補程式。patchtype
可以是strategic
、merge
或json
之一,並且這些必須與 kubectl 支援 的修補格式相符。預設的patchtype
是strategic
。extension
必須是json
或yaml
。
注意
如果您使用kubeadm upgrade
來升級您的 kubeadm 節點,您必須再次提供相同的修補程式,以便在升級後保留自訂。為此,您可以使用 --patches
標誌,該標誌必須指向相同的目錄。kubeadm upgrade
目前不支援可用於相同目的的組態 API 結構。自訂 kubelet
若要自訂 kubelet,您可以將 KubeletConfiguration
新增到 ClusterConfiguration
或 InitConfiguration
旁邊,並以 ---
分隔在同一個組態檔案中。然後,可以將此檔案傳遞給 kubeadm init
,並且 kubeadm 會將相同的基本 KubeletConfiguration
套用到叢集中的所有節點。
若要對基本 KubeletConfiguration
套用特定實例的組態,您可以使用 kubeletconfiguration
修補程式目標。
或者,您可以使用 kubelet 標誌作為覆寫,方法是在 InitConfiguration
和 JoinConfiguration
皆支援的 nodeRegistration.kubeletExtraArgs
欄位中傳遞它們。某些 kubelet 標誌已被棄用,因此在使用它們之前,請在 kubelet 參考文件 中檢查其狀態。
如需更多詳細資訊,請參閱 使用 kubeadm 在您的叢集中組態每個 kubelet
自訂 kube-proxy
若要自訂 kube-proxy,您可以將 KubeProxyConfiguration
傳遞到您的 ClusterConfiguration
或 InitConfiguration
旁邊,並以 ---
分隔傳遞給 kubeadm init
。
如需更多詳細資訊,您可以瀏覽至我們的 API 參考頁面。