kubeadm 配置(v1beta3)

概述

v1beta3 包定义 v1beta3 版本的 kubeadm 配置文件格式。 此版本改进了 v1beta2 的格式,修复了一些小问题并添加了一些新的字段。

从 v1beta2 版本以来的变更列表:

  • 已弃用的字段 “ClusterConfiguration.useHyperKubeImage” 现在被移除。 kubeadm 不再支持 hyperkube 镜像。
  • “ClusterConfiguration.dns.type” 字段已经被移除,因为 CoreDNS 是 kubeadm 所支持的唯一 DNS 服务器类型。
  • 保存 Secret 信息的字段现在包含了 “datapolicy” 标记(tag)。 这一标记会导致 API 结构通过 klog 打印输出时,会忽略这些字段的值。
  • 添加了 “InitConfiguration.skipPhases”、”JoinConfiguration.skipPhases”, 以允许在执行 kubeadm init/join 命令时略过某些阶段。
  • 添加了 “InitConfiguration.nodeRegistration.imagePullPolicy” 和 “JoinConfiguration.nodeRegistration.imagePullPolicy” 以允许在 kubeadm initkubeadm join 期间指定镜像拉取策略。 这两个字段的值必须是 “Always”、”Never” 或 “IfNotPresent” 之一。 默认值是 “IfNotPresent”,也是添加此字段之前的默认行为。
  • 添加了 “InitConfiguration.patches.directory” 和 “JoinConfiguration.patches.directory” 以允许用户配置一个目录, kubeadm 将从该目录中提取组件的补丁包。
  • BootstrapToken* API 和相关的工具被从 “kubeadm” API 组中移出, 放到一个新的 “bootstraptoken” 组中。kubeadm API 版本 v1beta3 不再包含 BootstrapToken* 结构。

从老的 kubeadm 配置版本迁移:

  • kubeadm v1.15.x 及更新的版本可以用来从 v1beta1 迁移到 v1beta2 版本;
  • kubeadm v1.22.x 及更新的版本不再支持 v1beta1 和更老的 API,但可以用来从 v1beta2 迁移到 v1beta3。

基础知识

配置 kubeadm 的推荐方式是使用 --config 选项向其传递一个 YAML 配置文件。 kubeadm 配置文件中定义的某些配置选项也可以作为命令行标志来使用,不过这种方法所支持的都是一些最常见的、最简单的使用场景。

一个 kubeadm 配置文件中可以包含多个配置类型,使用三根横线(---)作为分隔符。

kubeadm 支持以下配置类型:

  1. apiVersion: kubeadm.k8s.io/v1beta3
  2. kind: InitConfiguration
  3. apiVersion: kubeadm.k8s.io/v1beta3
  4. kind: ClusterConfiguration
  5. apiVersion: kubelet.config.k8s.io/v1beta1
  6. kind: KubeletConfiguration
  7. apiVersion: kubeproxy.config.k8s.io/v1alpha1
  8. kind: KubeProxyConfiguration
  9. apiVersion: kubeadm.k8s.io/v1beta3
  10. kind: JoinConfiguration

要输出 “init” 和 “join” 动作的默认值,可以使用下面的命令:

  1. kubeadm config print init-defaults
  2. kubeadm config print join-defaults

配置文件中必须包含的配置类型列表取决于你在执行的动作(initjoin), 也取决于你要使用的配置选项(默认值或者高级定制)。

如果某些配置类型没有提供,或者仅部分提供,kubeadm 将使用默认值; kubeadm 所提供的默认值在必要时也会保证其在多个组件之间是一致的 (例如控制器管理器上的 --cluster-cidr 参数和 kube-proxy 上的 clusterCIDR)。

用户总是可以重载默认配置值,唯一的例外是一小部分与安全性相关联的配置 (例如在 API 服务器上强制实施 Node 和 RBAC 鉴权模式)。

如果用户所提供的配置类型并非你所执行的操作需要的,kubeadm 会忽略这些配置类型并打印警告信息。

kubeadm init 配置类型

当带有 --config 选项来执行 kubeadm init 命令时,可以使用下面的配置类型: InitConfigurationClusterConfigurationKubeProxyConfigurationKubeletConfiguration, 但 InitConfigurationClusterConfiguration 之间只有一个是必须提供的。

  1. apiVersion: kubeadm.k8s.io/v1beta3
  2. kind: InitConfiguration
  3. bootstrapTokens:
  4. ...
  5. nodeRegistration:
  6. ...

类型 InitConfiguration 用来配置运行时设置,就 kubeadm init 命令而言, 包括启动引导令牌以及所有与 kubeadm 所在节点相关的设置,包括:

  • nodeRegistration:其中包含与向集群注册新节点相关的字段; 使用这个类型来定制节点名称、要使用的 CRI 套接字或者其他仅对当前节点起作用的设置 (例如节点 IP 地址)。
  • localAPIEndpoint:代表的是要部署到此节点上的 API 服务器实例的端点; 使用这个类型可以完成定制 API 服务器公告地址这类操作。
  1. apiVersion: kubeadm.k8s.io/v1beta3
  2. kind: ClusterConfiguration
  3. networking:
  4. ...
  5. etcd:
  6. ...
  7. apiServer:
  8. extraArgs:
  9. ...
  10. extraVolumes:
  11. ...
  12. ...

类型 ClusterConfiguration 用来定制集群范围的设置,具体包括以下设置:

  • networking:其中包含集群的网络拓扑配置。使用这一部分可以定制 Pod 的子网或者 Service 的子网。

  • etcd:etcd 数据库的配置。例如使用这个部分可以定制本地 etcd 或者配置 API 服务器使用一个外部的 etcd 集群。

  • kube-apiserverkube-schedulerkube-controller-manager 配置:这些部分可以通过添加定制的设置或者重载 kubeadm 的默认设置来定制控制面组件。

  1. apiVersion: kubeproxy.config.k8s.io/v1alpha1
  2. kind: KubeProxyConfiguration
  3. ...

KubeProxyConfiguration 类型用来更改传递给在集群中部署的 kube-proxy 实例的配置。 如果此对象没有提供,或者仅部分提供,kubeadm 使用默认值。

关于 kube-proxy 的官方文档,可参阅 https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/kube-proxy/ 或者 https://pkg.go.dev/k8s.io/kube-proxy/config/v1alpha1#KubeProxyConfiguration。

  1. apiVersion: kubelet.config.k8s.io/v1beta1
  2. kind: KubeletConfiguration
  3. ...

KubeletConfiguration 类型用来更改传递给在集群中部署的 kubelet 实例的配置。 如果此对象没有提供,或者仅部分提供,kubeadm 使用默认值。

关于 kubelet 的官方文档,可参阅 https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/kubelet/ 或者 https://pkg.go.dev/k8s.io/kubelet/config/v1beta1#KubeletConfiguration。

下面是一个为执行 kubeadm init 而提供的、包含多个配置类型的单一 YAML 文件, 其中填充了很多部分。

  1. apiVersion: kubeadm.k8s.io/v1beta3
  2. kind: InitConfiguration
  3. bootstrapTokens:
  4. - token: "9a08jv.c0izixklcxtmnze7"
  5. description: "kubeadm bootstrap token"
  6. ttl: "24h"
  7. - token: "783bde.3f89s0fje9f38fhf"
  8. description: "another bootstrap token"
  9. usages:
  10. - authentication
  11. - signing
  12. groups:
  13. - system:bootstrappers:kubeadm:default-node-token
  14. nodeRegistration:
  15. name: "ec2-10-100-0-1"
  16. criSocket: "/var/run/dockershim.sock"
  17. taints:
  18. - key: "kubeadmNode"
  19. value: "someValue"
  20. effect: "NoSchedule"
  21. kubeletExtraArgs:
  22. v: 4
  23. ignorePreflightErrors:
  24. - IsPrivilegedUser
  25. imagePullPolicy: "IfNotPresent"
  26. localAPIEndpoint:
  27. advertiseAddress: "10.100.0.1"
  28. bindPort: 6443
  29. certificateKey: "e6a2eb8581237ab72a4f494f30285ec12a9694d750b9785706a83bfcbbbd2204"
  30. skipPhases:
  31. - addon/kube-proxy
  32. ---
  33. apiVersion: kubeadm.k8s.io/v1beta3
  34. kind: ClusterConfiguration
  35. etcd:
  36. # one of local or external
  37. local:
  38. imageRepository: "registry.k8s.io"
  39. imageTag: "3.2.24"
  40. dataDir: "/var/lib/etcd"
  41. extraArgs:
  42. listen-client-urls: "http://10.100.0.1:2379"
  43. serverCertSANs:
  44. - "ec2-10-100-0-1.compute-1.amazonaws.com"
  45. peerCertSANs:
  46. - "10.100.0.1"
  47. # external:
  48. # endpoints:
  49. # - "10.100.0.1:2379"
  50. # - "10.100.0.2:2379"
  51. # caFile: "/etcd/kubernetes/pki/etcd/etcd-ca.crt"
  52. # certFile: "/etcd/kubernetes/pki/etcd/etcd.crt"
  53. # keyFile: "/etcd/kubernetes/pki/etcd/etcd.key"
  54. networking:
  55. serviceSubnet: "10.96.0.0/16"
  56. podSubnet: "10.244.0.0/24"
  57. dnsDomain: "cluster.local"
  58. kubernetesVersion: "v1.21.0"
  59. controlPlaneEndpoint: "10.100.0.1:6443"
  60. apiServer:
  61. extraArgs:
  62. authorization-mode: "Node,RBAC"
  63. extraVolumes:
  64. - name: "some-volume"
  65. hostPath: "/etc/some-path"
  66. mountPath: "/etc/some-pod-path"
  67. readOnly: false
  68. pathType: File
  69. certSANs:
  70. - "10.100.1.1"
  71. - "ec2-10-100-0-1.compute-1.amazonaws.com"
  72. timeoutForControlPlane: 4m0s
  73. controllerManager:
  74. extraArgs:
  75. "node-cidr-mask-size": "20"
  76. extraVolumes:
  77. - name: "some-volume"
  78. hostPath: "/etc/some-path"
  79. mountPath: "/etc/some-pod-path"
  80. readOnly: false
  81. pathType: File
  82. scheduler:
  83. extraArgs:
  84. bind-address: "10.100.0.1"
  85. extraVolumes:
  86. - name: "some-volume"
  87. hostPath: "/etc/some-path"
  88. mountPath: "/etc/some-pod-path"
  89. readOnly: false
  90. pathType: File
  91. certificatesDir: "/etc/kubernetes/pki"
  92. imageRepository: "registry.k8s.io"
  93. clusterName: "example-cluster"
  94. ---
  95. apiVersion: kubelet.config.k8s.io/v1beta1
  96. kind: KubeletConfiguration
  97. # kubelet specific options here
  98. ---
  99. apiVersion: kubeproxy.config.k8s.io/v1alpha1
  100. kind: KubeProxyConfiguration
  101. # kube-proxy specific options here

kubeadm join 配置类型

当使用 --config 选项执行 kubeadm join 命令时, 需要提供 JoinConfiguration 类型。

  1. apiVersion: kubeadm.k8s.io/v1beta3
  2. kind: JoinConfiguration
  3. ...

JoinConfiguration 类型用来配置运行时设置,就 kubeadm join 而言包括用来访问集群信息的发现方法,以及所有特定于 kubeadm 执行所在节点的设置,包括:

  • nodeRegistration:其中包含向集群注册新节点相关的配置字段; 使用这个类型可以定制节点名称、用使用的 CRI 套接字和所有其他仅适用于当前节点的设置 (例如节点 IP 地址)。
  • apiEndpoint:用来代表最终要部署到此节点上的 API 服务器实例的端点。

资源类型

BootstrapToken

出现在:

BootstrapToken 描述的是一个启动引导令牌,以 Secret 形式存储在集群中。

字段描述
token [必需]
BootstrapTokenString

token 用来在节点与控制面之间建立双向的信任关系。 在向集群中添加节点时使用。

description
string

description 设置一个对用户友好的消息, 说明为什么此令牌会存在以及其目标用途,这样其他管理员能够知道其目的。

ttl
meta/v1.Duration

ttl 定义此令牌的声明周期。默认为 24hexpiresttl 是互斥的。

expires
meta/v1.Time

expires 设置此令牌过期的时间戳。默认为在运行时基于 ttl 来决定。 expiresttl 是互斥的。

usages
[]string

usages 描述此令牌的可能使用方式。默认情况下, 令牌可用于建立双向的信任关系;不过这里可以改变默认用途。

groups
[]string

groups 设定此令牌被用于身份认证时对应的附加用户组。

BootstrapTokenString

出现在:

BootstrapTokenString 形式为 abcdef.abcdef0123456789 的一个令牌, 用来从加入集群的节点角度验证 API 服务器的身份,或者 “kubeadm join” 在节点启动引导时作为一种身份认证方法。 此令牌的生命期是短暂的,并且应该如此。

字段描述
- [必需]
string
令牌的 ID。
- [必需]
string
令牌的私密数据。

ClusterConfiguration

ClusterConfiguration 包含一个 kubeadm 集群的集群范围配置信息。

字段描述
apiVersion
string
kubeadm.k8s.io/v1beta3
kind
string
ClusterConfiguration
etcd
Etcd

etcd 中包含 etcd 服务的配置。

networking
Networking

networking 字段包含集群的网络拓扑配置。

kubernetesVersion
string

kubernetesVersion 设置控制面的目标版本。

controlPlaneEndpoint
string

controlPlaneEndpoint 为控制面设置一个稳定的 IP 地址或 DNS 名称。 取值可以是一个合法的 IP 地址或者 RFC-1123 形式的 DNS 子域名,二者均可以带一个可选的 TCP 端口号。 如果 controlPlaneEndpoint 未设置,则使用 advertiseAddress + bindPort。 如果设置了 controlPlaneEndpoint,但未指定 TCP 端口号,则使用 bindPort

可能的用法有:

  • 在一个包含不止一个控制面实例的集群中,该字段应该设置为放置在控制面实例前面的外部负载均衡器的地址。
  • 在带有强制性节点回收的环境中,controlPlaneEndpoint 可以用来为控制面设置一个稳定的 DNS。
apiServer
APIServer

apiServer 包含 API 服务器的一些额外配置。

controllerManager
ControlPlaneComponent

controllerManager 中包含控制器管理器的额外配置。

scheduler
ControlPlaneComponent

scheduler 包含调度器的额外配置。

dns
DNS

dns 定义在集群中安装的 DNS 插件的选项。

certificatesDir
string

certificatesDir 设置在何处存放或者查找所需证书。

imageRepository
string

imageRepository 设置用来拉取镜像的容器仓库。 如果此字段为空,默认使用 registry.k8s.io。 当 Kubernetes 用来执行 CI 构建时(Kubernetes 版本以 ci/ 开头), 将默认使用 gcr.io/k8s-staging-ci-images 来拉取控制面组件镜像, 而使用 registry.k8s.io 来拉取所有其他镜像。

featureGates
map[string]bool

featureGates 包含用户所启用的特性门控。

clusterName
string

集群名称。

InitConfiguration

InitConfiguration 包含一组特定于 “kubeadm init” 的运行时元素。 这里的字段仅用于第一次运行 kubeadm init 命令。 之后,此结构中的字段信息不会再被上传到 kubeadm upgrade 所要使用的 kubeadm-config ConfigMap 中。 这些字段必须设置 “omitempty”

字段描述
apiVersion
string
kubeadm.k8s.io/v1beta3
kind
string
InitConfiguration
bootstrapTokens
[]BootstrapToken

bootstrapTokenskubeadm init 执行时会被用到, 其中描述了一组要创建的启动引导令牌(Bootstrap Tokens)。这里的信息不会被上传到 kubeadm 在集群中保存的 ConfigMap 中,部分原因是由于信息本身比较敏感。

nodeRegistration
NodeRegistrationOptions

nodeRegistration 中包含与向集群中注册新的控制面节点相关的字段。

localAPIEndpoint
APIEndpoint

localAPIEndpoint 所代表的是在此控制面节点上要部署的 API 服务器的端点。 在高可用(HA)配置中,此字段与 ClusterConfiguration.controlPlaneEndpoint 的取值不同:后者代表的是整个集群的全局端点,该端点上的请求会被负载均衡到每个 API 服务器。 此配置对象允许你定制本地 API 服务器所公布的、可访问的 IP/DNS 名称和端口。 默认情况下,kubeadm 会尝试自动检测默认接口上的 IP 并使用该地址。 不过,如果这种检测失败,你可以在此字段中直接设置所期望的值。

certificateKey
string

certificateKey 用来设置一个密钥,该密钥将对 uploadcerts init 阶段上传到集群中某 Secret 内的密钥和证书加密。 证书密钥是十六进制编码的字符串,是长度为 32 字节的 AES 密钥。

skipPhases
[]string

skipPhases 是命令执行过程中要略过的阶段(Phases)。 通过执行命令 kubeadm init —help 可以获得阶段的列表。 参数标志 “—skip-phases” 优先于此字段的设置。

patches
Patches

patches 包含与 kubeadm init 阶段 kubeadm 所部署的组件上要应用的补丁相关的信息。

JoinConfiguration

JoinConfiguration 包含描述特定节点的元素。

字段描述
apiVersion
string
kubeadm.k8s.io/v1beta3
kind
string
JoinConfiguration
nodeRegistration
NodeRegistrationOptions

nodeRegistration 包含与向集群注册控制面节点相关的字段。

caCertPath
string

caCertPath 是指向 SSL 证书机构的路径,该证书包用来加密节点与控制面之间的通信。 默认值为 “/etc/kubernetes/pki/ca.crt”。

discovery [必需]
Discovery

discovery 设置 TLS 引导过程中 kubelet 要使用的选项。

controlPlane
JoinControlPlane

controlPlane 定义要在正被加入到集群中的节点上部署的额外控制面实例。 此字段为 null 时,不会在上面部署额外的控制面实例。

skipPhases
[]string

此字段包含在命令执行过程中要略过的阶段。通过 kubeadm join —help 命令可以查看阶段的列表。参数 —skip-phases 优先于此字段。

patches
Patches

此字段包含 kubeadm join 阶段向 kubeadm 所部署的组件打补丁的选项。

APIEndpoint

出现在:

APIEndpoint 结构包含某节点上部署的 API 服务器的配置元素。

字段描述
advertiseAddress
string

advertiseAddress 设置 API 服务器要公布的 IP 地址。

bindPort
int32

bindPort 设置 API 服务器要绑定到的安全端口。默认值为 6443。

APIServer

出现在:

APIServer 包含集群中 API 服务器部署所必需的设置。

字段描述
ControlPlaneComponent [必需]
ControlPlaneComponent
ControlPlaneComponent 结构的字段被嵌入到此类型中。) 无描述。
certSANs
[]string

certSANs 设置 API 服务器签署证书所用的额外主体替代名(Subject Alternative Name,SAN)。

timeoutForControlPlane
meta/v1.Duration

timeoutForControlPlane 用来控制我们等待 API 服务器开始运行的超时时间。

BootstrapTokenDiscovery

出现在:

BootstrapTokenDiscovery 用来设置基于引导令牌的服务发现选项。

字段描述
token [必需]
string

token 用来验证从控制面获得的集群信息。

apiServerEndpoint
string

apiServerEndpoint 为 API 服务器的 IP 地址或者域名,从该端点可以获得集群信息。

caCertHashes
[]string

caCertHashes 设置一组在基于令牌来发现服务时要验证的公钥指纹。 发现过程中获得的根 CA 必须与这里的数值之一匹配。 设置为空集合意味着禁用根 CA 指纹,因而可能是不安全的。 每个哈希值的形式为 <type>:<value>,当前唯一支持的 type 为 “sha256”。 哈希值为主体公钥信息(Subject Public Key Info,SPKI)对象的 SHA-256 哈希值(十六进制编码),形式为 DER 编码的 ASN.1。 例如,这些哈希值可以使用 OpenSSL 来计算。

unsafeSkipCAVerification
bool

unsafeSkipCAVerification 允许在使用基于令牌的服务发现时不使用 caCertHashes 来执行 CA 验证。这会弱化 kubeadm 的安全性, 因为其他节点可以伪装成控制面。

ControlPlaneComponent

出现在:

ControlPlaneComponent 中包含对集群中所有控制面组件都适用的设置。

字段描述
extraArgs
map[string]string

extraArgs 是要传递给控制面组件的一组额外的参数标志。 此映射中的每个键对应命令行上使用的标志名称,只是没有其引导连字符。

extraVolumes
[]HostPathMount

extraVolumes 是一组额外的主机卷,需要挂载到控制面组件中。

DNS

出现在:

DNS 结构定义要在集群中使用的 DNS 插件。

字段描述
ImageMeta [必需]
ImageMeta
ImageMeta 的成员被内嵌到此类型中)。

imageMeta 允许对 DNS 组件所使用的镜像作定制。

Discovery

出现在:

Discovery 设置 TLS 启动引导过程中 kubelet 要使用的配置选项。

字段描述
bootstrapToken
BootstrapTokenDiscovery

bootstrapToken 设置基于启动引导令牌的服务发现选项。 bootstrapTokenfile 是互斥的。

file
FileDiscovery

用来设置一个文件或者 URL 路径,指向一个 kubeconfig 文件;该配置文件中包含集群信息。 bootstrapTokenfile 是互斥的。

tlsBootstrapToken
string

tlsBootstrapToken 是 TLS 启动引导过程中使用的令牌。 如果设置了 bootstrapToken,则此字段默认值为 .bootstrapToken.token,不过可以被重载。 如果设置了 file,此字段必须被设置,以防 kubeconfig 文件中不包含其他身份认证信息。

timeout
meta/v1.Duration

timeout 用来修改发现过程的超时时长。

Etcd

出现在:

Etcd 包含用来描述 etcd 配置的元素。

字段描述
local
LocalEtcd

local 提供配置本地 etcd 实例的选项。localexternal 是互斥的。

external
ExternalEtcd

external 描述如何连接到外部的 etcd 集群。 external 是互斥的。

ExternalEtcd

出现在:

ExternalEtcd 描述外部 etcd 集群。 kubeadm 不清楚证书文件的存放位置,因此必须单独提供证书信息。

字段描述
endpoints [必需]
[]string

endpoints 包含一组 etcd 成员的列表。

caFile [必需]
string

caFile 是一个 SSL 证书机构(CA)文件,用来加密 etcd 通信。 如果使用 TLS 连接,此字段为必需字段。

certFile [必需]
string

certFile 是一个 SSL 证书文件,用来加密 etcd 通信。 如果使用 TLS 连接,此字段为必需字段。

keyFile [必需]
string

keyFile 是一个用来加密 etcd 通信的 SSL 密钥文件。 此字段在使用 TLS 连接时为必填字段。

FileDiscovery

出现在:

FileDiscovery 用来指定一个文件或者 URL 路径,指向一个 kubeconfig 文件; 该配置文件可用来加载集群信息。

字段描述
kubeConfigPath [必需]
string

kubeConfigPath 用来指定一个文件或者 URL 路径,指向一个 kubeconfig 文件; 该配置文件可用来加载集群信息。

HostPathMount

出现在:

HostPathMount 包含从主机节点挂载的卷的信息。

字段描述
name [必需]
string

name 为卷在 Pod 模板中的名称。

hostPath [必需]
string

hostPath 是要在 Pod 中挂载的卷在主机系统上的路径。

mountPath [必需]
string

mountPathhostPath 在 Pod 内挂载的路径。

readOnly
bool

readOnly 控制卷的读写访问模式。

pathType
core/v1.HostPathType

pathTypehostPath 的类型。

ImageMeta

出现在:

ImageMeta 用来配置来源不是 Kubernetes/kubernetes 发布过程的组件所使用的镜像。

字段描述
imageRepository
string

imageRepository 设置镜像拉取所用的容器仓库。 若未设置,则使用 ClusterConfiguration 中的 imageRepository

imageTag
string

imageTag 允许用户设置镜像的标签。 如果设置了此字段,则 kubeadm 不再在集群升级时自动更改组件的版本。

JoinControlPlane

出现在:

JoinControlPlane 包含在正在加入集群的节点上要部署的额外的控制面组件的设置。

字段描述
localAPIEndpoint
APIEndpoint

localAPIEndpoint 代表的是将在此节点上部署的 API 服务器实例的端点。

certificateKey
string

certificateKey 是在添加新的控制面节点时用来解密所下载的 Secret 中的证书的密钥。对应的加密密钥在 InitConfiguration 结构中。 证书密钥是十六进制编码的字符串,是长度为 32 字节的 AES 密钥。

LocalEtcd

出现在:

LocalEtcd 描述的是 kubeadm 要使用的本地 etcd 集群。

字段描述
ImageMeta [必需]
ImageMeta
ImageMeta 结构的字段被嵌入到此类型中。)

ImageMeta 允许用户为 etcd 定制要使用的容器。

dataDir [必需]
string

dataDir 是 etcd 用来存放数据的目录。 默认值为 “/var/lib/etcd”。

extraArgs
map[string]string

extraArgs 是为 etcd 可执行文件提供的额外参数,用于在静态 Pod 中运行 etcd。映射中的每一个键对应命令行上的一个标志参数,只是去掉了前置的连字符。

serverCertSANs
[]string

serverCertSANs 为 etcd 服务器的签名证书设置额外的主体替代名(Subject Alternative Names,SAN)。

peerCertSANs
[]string

peerCertSANs 为 etcd 的对等端签名证书设置额外的主体替代名(Subject Alternative Names,SAN)。

Networking

出现在:

Networking 中包含描述集群网络配置的元素。

字段描述
serviceSubnet
string

serviceSubnet 是 Kubernetes 服务所使用的子网。 默认值为 “10.96.0.0/12”。

podSubnet
string

podSubnet 为 Pod 所使用的子网。

dnsDomain
string

dnsDomain 是 Kubernetes 服务所使用的 DNS 域名。 默认值为 “cluster.local”。

NodeRegistrationOptions

出现在:

NodeRegistrationOptions 包含向集群中注册新的控制面或节点所需要的信息; 节点注册可能通过 “kubeadm init” 或 “kubeadm join” 完成。

字段描述
name
string

name 是 Node API 对象的 .metadata.name 字段值; 该 API 对象会在此 kubeadm initkubeadm join 操作期间创建。 在提交给 API 服务器的 kubelet 客户端证书中,此字段也用作其 CommonName。 如果未指定则默认为节点的主机名。

criSocket
string

criSocket 用来读取容器运行时的信息。 此信息会被以注解的方式添加到 Node API 对象至上,用于后续用途。

taints [必需]
[]core/v1.Taint

taints 设定 Node API 对象被注册时要附带的污点。 若未设置此字段(即字段值为 null),默认为控制面节点添加控制面污点。 如果你不想为控制面节点添加污点,可以将此字段设置为空列表(即 YAML 文件中的 taints: []), 这个字段只用于节点注册。

kubeletExtraArgs
map[string]string

kubeletExtraArgs 用来向 kubelet 传递额外参数。 这里的参数会通过 kubeadm 在运行时写入的、由 kubelet 来读取的环境文件来传递给 kubelet 命令行。 这里的设置会覆盖掉 kubelet-config ConfigMap 中包含的一般性的配置。 命令行标志在解析时优先级更高。这里的设置值仅作用于 kubeadm 运行所在的节点。 映射中的每个键对应命令行中的一个标志参数,只是去掉了前置的连字符。

ignorePreflightErrors
[]string

ignorePreflightErrors 提供一组在当前节点被注册时可以忽略掉的预检错误。 例如:IsPrevilegedUser,Swap。 取值 all 忽略所有检查的错误。

imagePullPolicy
core/v1.PullPolicy

imagePullPolicy 设定 “kubeadm init” 和 “kubeadm join” 操作期间的镜像拉取策略。此字段的取值可以是 “Always”、”IfNotPresent” 或 “Never” 之一。若此字段未设置,则 kubeadm 使用 “IfNotPresent” 作为其默认值, 换言之,当镜像在主机上不存在时才执行拉取操作。

Patches

出现在:

Patches 包含要向 kubeadm 所部署的组件应用的补丁信息。

字段描述
directory
string

directory 是指向某目录的路径,该目录中包含名为 “target[suffix][+patchtype].extension” 的文件。 例如,”kube-apiserver0+merge.yaml” 或者 “etcd.json”。 “target” 可以是 “kube-apiserver”、”kube-controller-manager”、 “kube-scheduler”、”etcd” 之一。 “patchtype” 可以是 “strategic”、”merge” 或者 “json”, 其取值对应 kubectl 所支持的补丁形式。 “patchtype” 的默认值是 “strategic”。 “extension” 必须是 “json” 或者 “yaml”。 “suffix” 是一个可选的字符串,用来确定按字母表顺序来应用时,哪个补丁最先被应用。