使用 kubeadm API 自定义组件

本页面介绍如何自定义 kubeadm 部署的组件。对于控制平面组件,您可以使用 ClusterConfiguration 结构中的标志或每个节点的补丁。对于 kubelet 和 kube-proxy,您可以分别使用 KubeletConfigurationKubeProxyConfiguration

所有这些选项都可以通过 kubeadm 配置 API 实现。有关配置中每个字段的更多详细信息,您可以导航到我们的 API 参考页面

使用 ClusterConfiguration 中的标志自定义控制平面

kubeadm ClusterConfiguration 对象为用户提供了一种方法,可以覆盖传递给控制平面组件(如 APIServer、ControllerManager、Scheduler 和 Etcd)的默认标志。这些组件使用以下结构定义

  • apiServer
  • controllerManager
  • scheduler
  • etcd

这些结构包含一个通用的 extraArgs 字段,该字段由 key: value 对组成。要覆盖控制平面组件的标志,请执行以下操作

  1. 将适当的 extraArgs 添加到您的配置中。
  2. 将标志添加到 extraArgs 字段中。
  3. 使用 --config <您的配置 YAML> 运行 kubeadm init

APIServer 标志

有关详细信息,请参阅 kube-apiserver 的参考文档

示例用法

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 标志

有关详细信息,请参阅 kube-controller-manager 的参考文档

示例用法

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 标志

有关详细信息,请参阅 kube-scheduler 的参考文档

示例用法

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 标志

有关详细信息,请参阅 etcd 服务器文档

示例用法

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

使用补丁进行自定义

功能状态: Kubernetes v1.22 [测试版]

Kubeadm 允许您将包含补丁文件的目录传递给各个节点上的 InitConfigurationJoinConfiguration。这些补丁可以用作在将组件配置写入磁盘之前的最后自定义步骤。

您可以使用 --config <您的配置 YAML> 将此文件传递给 kubeadm init

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

您可以使用 --config <您的配置 YAML> 将此文件传递给 kubeadm join

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

该目录必须包含名为 target[suffix][+patchtype].extension 的文件。例如,kube-apiserver0+merge.yamletcd.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 传递给 kubeadm init,将其放在 ClusterConfigurationInitConfiguration 旁边,并用 --- 分隔。

有关更多详细信息,您可以导航到我们的 API 参考页面

上次修改时间:2024 年 3 月 13 日上午 9:14 PST:将 suffix 参数移动到第二个位置 (7fa8e17d56)