Kubernetes 使用kubeadm API定制組件

2022-06-01 09:22 更新

使用 kubeadm API 定制組件

本頁(yè)面介紹了如何自定義 kubeadm 部署的組件。 你可以使用 ?ClusterConfiguration ?結(jié)構(gòu)中定義的參數(shù),或者在每個(gè)節(jié)點(diǎn)上應(yīng)用補(bǔ)丁來(lái)定制控制平面組件。 你可以使用 ?KubeletConfiguration ?和 ?KubeProxyConfiguration ?結(jié)構(gòu)分別定制 kubelet 和 kube-proxy 組件。

所有這些選項(xiàng)都可以通過(guò) kubeadm 配置 API 實(shí)現(xiàn)。

Note:
kubeadm 目前不支持對(duì) CoreDNS 部署進(jìn)行定制。 你必須手動(dòng)更新 ?kube-system/coredns? ConfigMap 并在更新后重新創(chuàng)建 CoreDNS Pods。 或者,你可以跳過(guò)默認(rèn)的 CoreDNS 部署并部署你自己的 CoreDNS 變種。

使用 ClusterConfiguration 中的標(biāo)志自定義控制平面 

kubeadm ?ClusterConfiguration ?對(duì)象為用戶提供了一種方法, 用以覆蓋傳遞給控制平面組件(如 APIServer、ControllerManager、Scheduler 和 Etcd)的默認(rèn)參數(shù)。 各組件配置使用如下字段定義:

  • ?apiServer ?
  • ?controllerManager ?
  • ?scheduler ?
  • ?etcd?

這些結(jié)構(gòu)包含一個(gè)通用的 ?extraArgs ?字段,該字段由 ?key: value? 組成。 要覆蓋控制平面組件的參數(shù):

  1. 將適當(dāng)?shù)淖侄?nbsp;?extraArgs ?添加到配置中。
  2. 向字段 ?extraArgs ?添加要覆蓋的參數(shù)值。
  3. 用 ?--config <YOUR CONFIG YAML>? 運(yùn)行 ?kubeadm init?。

Note:
你可以通過(guò)運(yùn)行 ?kubeadm config print init-defaults? 并將輸出保存到你所選的文件中, 以默認(rèn)值形式生成 ?ClusterConfiguration ?對(duì)象。
Note:
?ClusterConfiguration ?對(duì)象目前在 kubeadm 集群中是全局的。 這意味著你添加的任何標(biāo)志都將應(yīng)用于同一組件在不同節(jié)點(diǎn)上的所有實(shí)例。 要在不同節(jié)點(diǎn)上為每個(gè)組件應(yīng)用單獨(dú)的配置,你可以使用補(bǔ)丁。
Note:
當(dāng)前不支持重復(fù)的參數(shù)(keys)或多次傳遞相同的參數(shù) ?--foo?。 要解決此問(wèn)題,你必須使用補(bǔ)丁。

APIServer 參數(shù) 

使用示例:

apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.16.0
apiServer:
  extraArgs:
    anonymous-auth: "false"
    enable-admission-plugins: AlwaysPullImages,DefaultStorageClass
    audit-log-path: /home/johndoe/audit.log

ControllerManager 參數(shù) 

使用示例:

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

Scheduler 參數(shù) 

使用示例:

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

Etcd 參數(shù) 

使用示例:

apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
etcd:
  local:
    extraArgs:
      election-timeout: 1000

使用補(bǔ)丁定制控制平面 

FEATURE STATE: Kubernetes v1.22 [beta]

Kubeadm 允許將包含補(bǔ)丁文件的目錄傳遞給各個(gè)節(jié)點(diǎn)上的 ?InitConfiguration ?和 ?JoinConfiguration?。 這些補(bǔ)丁可被用作控制平面組件清單寫入磁盤之前的最后一個(gè)自定義步驟。

可以使用 ?--config <你的 YAML 格式控制文件>? 將配置文件傳遞給 ?kubeadm init?:

apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
patches:
  directory: /home/user/somedir
Note:
對(duì)于 ?kubeadm init?,你可以傳遞一個(gè)包含 ?ClusterConfiguration ?和 ?InitConfiguration ?的文件,以 ?---? 分隔。

你可以使用 ?--config <你的 YAML 格式配置文件>? 將配置文件傳遞給 ?kubeadm join?:

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

補(bǔ)丁目錄必須包含名為 ?target[suffix][+patchtype].extension? 的文件。 例如,?kube-apiserver0+merge.yaml? 或只是 ?etcd.json?。

  • ?target ?可以是 ?kube-apiserver?、?kube-controller-manager?、?kube-scheduler? 和 ?etcd ?之一。
  • ?patchtype ?可以是 ?strategy?、?merge ?或 ?json ?之一,并且這些必須匹配 kubectl 支持 的補(bǔ)丁格式。 默認(rèn)補(bǔ)丁類型是 ?strategic ?的。
  • ?extension ?必須是 ?json ?或 ?yaml?。
  • ?suffix ?是一個(gè)可選字符串,可用于確定首先按字母數(shù)字應(yīng)用哪些補(bǔ)丁。

Note:
如果你使用 ?kubeadm upgrade? 升級(jí) kubeadm 節(jié)點(diǎn),你必須再次提供相同的補(bǔ)丁,以便在升級(jí)后保留自定義配置。 為此,你可以使用 ?--patches? 參數(shù),該參數(shù)必須指向同一目錄。 ?kubeadm upgrade? 目前不支持用于相同目的的 API 結(jié)構(gòu)配置。

自定義 kubelet 

要自定義 kubelet,你可以在同一配置文件中的 ?ClusterConfiguration ?或 ?InitConfiguration ?之外添加一個(gè) ?KubeletConfiguration?,用 ?---? 分隔。 然后可以將此文件傳遞給 ?kubeadm init?。

Note:
kubeadm 將相同的 ?KubeletConfiguration ?配置應(yīng)用于集群中的所有節(jié)點(diǎn)。 要應(yīng)用節(jié)點(diǎn)特定設(shè)置,你可以使用 ?kubelet ?參數(shù)進(jìn)行覆蓋,方法是將它們傳遞到 ?InitConfiguration ?和 ?JoinConfiguration ?支持的 ?nodeRegistration.kubeletExtraArgs? 字段中。

自定義 kube-proxy 

要自定義 kube-proxy,你可以在 ?ClusterConfiguration ?或 ?InitConfiguration ?之外添加一個(gè) 由 ?---? 分隔的 ?KubeProxyConfiguration?, 傳遞給 ?kubeadm init?。

Note:
kubeadm 將 kube-proxy 部署為 DaemonSet, 這意味著 ?KubeProxyConfiguration ?將應(yīng)用于集群中的所有 kube-proxy 實(shí)例。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)