使用 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

使用补丁进行定制

特性状态: 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 补丁目标

或者,你可以通过在 InitConfigurationJoinConfiguration 都支持的 nodeRegistration.kubeletExtraArgs 字段中传递 kubelet 标志作为覆盖。某些 kubelet 标志已被弃用,因此在使用它们之前,请查看 kubelet 参考文档中的状态。

有关其他详细信息,请参阅使用 kubeadm 配置集群中的每个 kubelet

定制 kube-proxy

要定制 kube-proxy,你可以将 KubeProxyConfiguration 添加到 ClusterConfigurationInitConfiguration 旁边,并用 --- 分隔,然后将其传递给 kubeadm init 命令。

有关更多详细信息,你可以访问我们的API 参考页面

最后修改于 2024 年 7 月 5 日下午 4:06 PST:kubeadm: 在所有文档示例中使用 v1beta4 (efc1133fa4)