你正在查看的文档所针对的是 Kubernetes 版本: v1.30
Kubernetes v1.30 版本的文档已不再维护。你现在看到的版本来自于一份静态的快照。如需查阅最新文档,请点击 最新版本。
kubeadm 配置 (v1beta4)
概述
v1beta4 包定义 v1beta4 版本的 kubeadm 配置文件格式。 此版本改进了 v1beta3 的格式,修复了一些小问题并添加了一些新的字段。
从 v1beta3 版本以来的变更列表:
- TODO https://github.com/kubernetes/kubeadm/issues/2890
- 使用
APIServer.ExtraEnvs、ControllerManager.ExtraEnvs、Scheduler.ExtraEnvs、Etcd.Local.ExtraEnvs。 支持在ClusterConfiguration下控制平面组件中的定制环境变量。 ResetConfigurationAPI 类型在 v1beta4 中已得到支持。 用户可以为kubeadm reset指定--config文件来重置节点。
kubeadm 配置版本迁移
- kubeadm v1.15.x 及更高版本可用于从 v1beta1 迁移到 v1beta2。
- kubeadm v1.22.x 及更高版本不再支持 v1beta1 和更早的 API,但可用于从 v1beta2 迁移到 v1beta3。
- kubeadm v1.27.x 及更高版本不再支持 v1beta2 和更早的 API。
- TODO: https://github.com/kubernetes/kubeadm/issues/2890 添加可用于转换到 v1beta4 的版本
基础知识
配置 kubeadm 的推荐方式是使用 --config 选项向其传递一个 YAML 配置文件。
kubeadm 配置文件中定义的某些配置选项也可以作为命令行标志来使用,
不过这种方法所支持的都是一些最常见的、最简单的使用场景。
一个 kubeadm 配置文件中可以包含多个配置类型,使用三根横线(---)作为分隔符。
kubeadm 支持以下配置类型:
apiVersion: kubeadm.k8s.io/v1beta4
kind: InitConfiguration
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
apiVersion: kubeadm.k8s.io/v1beta4
kind: JoinConfiguration
要输出 "init" 和 "join" 动作的默认值,可以使用下面的命令:
kubeadm config print init-defaults kubeadm config print join-defaults
配置文件中必须包含的配置类型列表取决于你所执行的动作(init 或 join),
也取决于你要使用的配置选项(默认值或者高级定制)。
如果某些配置类型没有提供,或者仅部分提供,kubeadm 将使用默认值;
kubeadm 所提供的默认值在必要时也会保证其在多个组件之间是一致的
(例如控制器管理器上的 --cluster-cidr 参数和 kube-proxy 上的
clusterCIDR)。
用户总是可以覆盖默认配置值,唯一的例外是一小部分与安全性相关联的配置 (例如在 API 服务器上强制实施 Node 和 RBAC 鉴权模式)。
如果用户所提供的配置类型并非你所执行的操作需要的,kubeadm 会忽略这些配置类型并打印警告信息。
kubeadm init 配置类型
当带有 --config 选项来执行 kubeadm init 命令时,可以使用下面的配置类型:
InitConfiguration、ClusterConfiguration、KubeProxyConfiguration、
KubeletConfiguration,但 InitConfiguration 和 ClusterConfiguration
二者之间取其一即可。
apiVersion: kubeadm.k8s.io/v1beta4 kind: InitConfiguration bootstrapTokens: ... nodeRegistration: ...
InitConfiguration 类型用来配置运行时设置,就 kubeadm init 命令而言, 包括启动引导令牌以及所有与 kubeadm 所在节点相关的设置,包括:
- nodeRegistration:其中包含与向集群注册新节点相关的字段; 使用这个类型来定制节点名称、要使用的 CRI 套接字或者其他仅对当前节点起作用的设置(例如节点 IP 地址)。
- localAPIEndpoint:代表的是要部署到此节点上的 API 服务器实例的端点; 使用这个类型可以完成定制 API 服务器公告地址这类操作。
apiVersion: kubeadm.k8s.io/v1beta4 kind: ClusterConfiguration networking: ... etcd: ... apiServer: extraArgs: ... extraVolumes: ... ...
类型 ClusterConfiguration 用来定制集群范围的设置,具体包括以下设置:
-
networking:其中包含集群的网络拓扑配置。使用这一部分可以定制 Pod 的子网或者 Service 的子网。 -
etcd:etcd 数据库的配置。例如使用这个部分可以定制本地 etcd 或者配置 API 服务器使用一个外部的 etcd 集群。 -
kube-apiserver、kube-scheduler、kube-controller-manager配置:这些部分可以通过添加定制的设置或者重载 kubeadm 的默认设置来定制控制平面组件。
apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration ...
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。
apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration ...
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 文件,
其中填充了很多部分。
apiVersion: kubeadm.k8s.io/v1beta4 kind: InitConfiguration bootstrapTokens: - token: "9a08jv.c0izixklcxtmnze7" description: "kubeadm bootstrap token" ttl: "24h" - token: "783bde.3f89s0fje9f38fhf" description: "another bootstrap token" usages: - authentication - signing groups: - system:bootstrappers:kubeadm:default-node-token nodeRegistration: name: "ec2-10-100-0-1" criSocket: "unix:///var/run/containerd/containerd.sock" taints: - key: "kubeadmNode" value: "someValue" effect: "NoSchedule" kubeletExtraArgs: v: 4 ignorePreflightErrors: - IsPrivilegedUser imagePullPolicy: "IfNotPresent" localAPIEndpoint: advertiseAddress: "10.100.0.1" bindPort: 6443 certificateKey: "e6a2eb8581237ab72a4f494f30285ec12a9694d750b9785706a83bfcbbbd2204" skipPhases: - addon/kube-proxy --- apiVersion: kubeadm.k8s.io/v1beta4 kind: ClusterConfiguration etcd: # one of local or external local: imageRepository: "registry.k8s.io" imageTag: "3.2.24" dataDir: "/var/lib/etcd" extraArgs: listen-client-urls: "http://10.100.0.1:2379" serverCertSANs: - "ec2-10-100-0-1.compute-1.amazonaws.com" peerCertSANs: - "10.100.0.1" # external: # endpoints: # - "10.100.0.1:2379" # - "10.100.0.2:2379" # caFile: "/etcd/kubernetes/pki/etcd/etcd-ca.crt" # certFile: "/etcd/kubernetes/pki/etcd/etcd.crt" # keyFile: "/etcd/kubernetes/pki/etcd/etcd.key" networking: serviceSubnet: "10.96.0.0/16" podSubnet: "10.244.0.0/24" dnsDomain: "cluster.local" kubernetesVersion: "v1.21.0" controlPlaneEndpoint: "10.100.0.1:6443" apiServer: extraArgs: authorization-mode: "Node,RBAC" extraVolumes: - name: "some-volume" hostPath: "/etc/some-path" mountPath: "/etc/some-pod-path" readOnly: false pathType: File certSANs: - "10.100.1.1" - "ec2-10-100-0-1.compute-1.amazonaws.com" timeoutForControlPlane: 4m0s controllerManager: extraArgs: "node-cidr-mask-size": "20" extraVolumes: - name: "some-volume" hostPath: "/etc/some-path" mountPath: "/etc/some-pod-path" readOnly: false pathType: File scheduler: extraArgs: address: "10.100.0.1" extraVolumes: - name: "some-volume" hostPath: "/etc/some-path" mountPath: "/etc/some-pod-path" readOnly: false pathType: File certificatesDir: "/etc/kubernetes/pki" imageRepository: "registry.k8s.io" clusterName: "example-cluster" --- apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration # kubelet specific options here --- apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration # kube-proxy specific options here
kubeadm join 配置类型
当使用 --config 选项执行 kubeadm join 命令时,
需要提供 JoinConfiguration 类型。
apiVersion: kubeadm.k8s.io/v1beta4 kind: JoinConfiguration ...
JoinConfiguration 类型用来配置运行时设置,就 kubeadm join
而言包括用来访问集群信息的发现方法,以及所有特定于 kubeadm 执行所在节点的设置,包括:
-
nodeRegistration:其中包含向集群注册新节点相关的配置字段; 使用这个类型可以定制节点名称、用使用的 CRI 套接字和所有其他仅适用于当前节点的设置 (例如节点 IP 地址)。 -
apiEndpoint:用来代表最终要部署到此节点上的 API 服务器实例的端点。
资源类型
BootstrapToken
出现在:
BootstrapToken 描述的是一个启动引导令牌,以 Secret 的形式存储在集群中。
| 字段 | 描述 |
|---|---|
token [必需]BootstrapTokenString
|
|
descriptionstring
|
|
ttlmeta/v1.Duration
|
|
expiresmeta/v1.Time
|
|
usages[]string
|
|
groups[]string
|
|
BootstrapTokenString
出现在:
BootstrapTokenString 形式为 abcdef.abcdef0123456789 的一个令牌,
用来从加入集群的节点角度验证 API 服务器的身份,或者 "kubeadm join"
在节点启动引导时作为一种身份认证方法。
此令牌的生命期是短暂的,并且应该如此。
| 字段 | 描述 |
|---|---|
- [必需]string
|
令牌的 ID。 |
- [必需]string
|
令牌的私密数据。 |
ClusterConfiguration
ClusterConfiguration 包含一个 kubeadm 集群的集群范围配置信息。
| 字段 | 描述 |
|---|---|
apiVersionstring | kubeadm.k8s.io/v1beta4 |
kindstring | ClusterConfiguration |
etcdEtcd
|
|
networkingNetworking
|
|
kubernetesVersionstring
|
|
controlPlaneEndpointstring
|
可能的用法有:
|
apiServerAPIServer
|
|
controllerManagerControlPlaneComponent
|
|
schedulerControlPlaneComponent
|
|
dnsDNS
|
|
certificatesDirstring
|
|
imageRepositorystring
|
|
featureGatesmap[string]bool
|
|
clusterNamestring
|
集群名称。 |
InitConfiguration
InitConfiguration 包含一组特定于 "kubeadm init" 的运行时元素。
| 字段 | 描述 |
|---|---|
apiVersionstring | kubeadm.k8s.io/v1beta4 |
kindstring | InitConfiguration |
bootstrapTokens[]BootstrapToken
|
|
nodeRegistrationNodeRegistrationOptions
|
|
localAPIEndpointAPIEndpoint
|
|
certificateKeystring
|
|
skipPhases[]string
|
|
patchesPatches
|
|
JoinConfiguration
JoinConfiguration 包含描述特定节点的元素。
| 字段 | 描述 |
|---|---|
apiVersionstring | kubeadm.k8s.io/v1beta4 |
kindstring | JoinConfiguration |
nodeRegistrationNodeRegistrationOptions
|
|
caCertPathstring
|
|
discovery [必需]Discovery
|
|
controlPlaneJoinControlPlane
|
|
skipPhases[]string
|
|
patchesPatches
|
此字段包含 |
ResetConfiguration
ResetConfiguration 包含一个字段列表,这些字段是特定于 "kubeadm reset" 的运行时元素。
| 字段 | 描述 |
|---|---|
apiVersionstring | kubeadm.k8s.io/v1beta4 |
kindstring | ResetConfiguration |
cleanupTmpDirbool
|
|
certificatesDirstring
|
|
criSocketstring
|
|
dryRunbool
|
|
forcebool
|
|
ignorePreflightErrors[]string
|
|
skipPhases[]string
|
|
APIEndpoint
出现在:
APIEndpoint 结构包含某节点上部署的 API 服务器实例的元素。
| 字段 | 描述 |
|---|---|
advertiseAddressstring
|
|
bindPortint32
|
|
APIServer
出现在:
APIServer 包含集群中 API 服务器部署所必需的设置。
| 字段 | 描述 |
|---|---|
ControlPlaneComponent [必需]ControlPlaneComponent
|
(ControlPlaneComponent 结构的字段被嵌入到此类型中。)
无描述。
|
certSANs[]string
|
|
timeoutForControlPlanemeta/v1.Duration
|
|
BootstrapTokenDiscovery
出现在:
BootstrapTokenDiscovery 用来设置基于引导令牌的服务发现选项。
| 字段 | 描述 |
|---|---|
token [必需]string
|
|
apiServerEndpointstring
|
|
caCertHashes[]string
|
|
unsafeSkipCAVerificationbool
|
|
ControlPlaneComponent
出现在:
ControlPlaneComponent 中包含对集群中所有控制平面组件都适用的设置。
| 字段 | 描述 |
|---|---|
extraArgsmap[string]string
|
|
extraVolumes[]HostPathMount
|
|
extraEnvs[]core/v1.EnvVar
|
|
DNS
出现在:
DNS 结构定义要在集群中使用的 DNS 插件。
| 字段 | 描述 |
|---|---|
ImageMeta [必需]ImageMeta
|
(ImageMeta 的成员被内嵌到此类型中)。
|
Discovery
出现在:
Discovery 设置 TLS 启动引导过程中 kubelet 要使用的配置选项。
| 字段 | 描述 |
|---|---|
bootstrapTokenBootstrapTokenDiscovery
|
|
fileFileDiscovery
|
|
tlsBootstrapTokenstring
|
|
timeoutmeta/v1.Duration
|
|
Etcd
出现在:
Etcd 包含用来描述 etcd 配置的元素。
| 字段 | 描述 |
|---|---|
localLocalEtcd
|
|
externalExternalEtcd
|
|
ExternalEtcd
出现在:
ExternalEtcd 描述外部 etcd 集群。 kubeadm 不清楚证书文件的存放位置,因此必须单独提供证书信息。
| 字段 | 描述 |
|---|---|
endpoints [必需][]string
|
|
caFile [必需]string
|
|
certFile [必需]string
|
|
keyFile [必需]string
|
|
FileDiscovery
出现在:
FileDiscovery 用来指定一个文件或者 URL 路径,指向一个 kubeconfig 文件; 该配置文件可用来加载集群信息。
| 字段 | 描述 |
|---|---|
kubeConfigPath [必需]string
|
|
HostPathMount
出现在:
HostPathMount 包含从宿主节点挂载的卷的信息。
| 字段 | 描述 |
|---|---|
name [必需]string
|
|
hostPath [必需]string
|
|
mountPath [必需]string
|
|
readOnlybool
|
|
pathTypecore/v1.HostPathType
|
|
ImageMeta
出现在:
ImageMeta 用来配置来源不是 Kubernetes/Kubernetes 发布过程的组件所使用的镜像。
| 字段 | 描述 |
|---|---|
imageRepositorystring
|
|
imageTagstring
|
|
JoinControlPlane
出现在:
JoinControlPlane 包含在正在加入集群的节点上要部署的额外的控制平面组件的设置。
| 字段 | 描述 |
|---|---|
localAPIEndpointAPIEndpoint
|
|
certificateKeystring
|
|
LocalEtcd
出现在:
LocalEtcd 描述的是 kubeadm 要使用的本地 etcd 集群。
| 字段 | 描述 |
|---|---|
ImageMeta [必需]ImageMeta
|
(ImageMeta 结构的字段被嵌入到此类型中。)
ImageMeta 允许用户为 etcd 定制要使用的容器。 |
dataDir [必需]string
|
|
extraArgsmap[string]string
|
|
extraEnvs[]core/v1.EnvVar
|
|
serverCertSANs[]string
|
|
peerCertSANs[]string
|
|
Networking
出现在:
Networking 中包含描述集群网络配置的元素。
| 字段 | 描述 |
|---|---|
serviceSubnetstring
|
|
podSubnetstring
|
|
dnsDomainstring
|
|
NodeRegistrationOptions
出现在:
NodeRegistrationOptions 包含向集群中注册新的控制平面或节点所需要的信息; 节点注册可能通过 "kubeadm init" 或 "kubeadm join" 完成。
| 字段 | 描述 |
|---|---|
namestring
|
|
criSocketstring
|
|
taints [必需][]core/v1.Taint
|
|
kubeletExtraArgsmap[string]string
|
|
ignorePreflightErrors[]string
|
|
imagePullPolicycore/v1.PullPolicy
|
|
Patches
出现在:
Patches 包含要向 kubeadm 所部署的组件应用的补丁信息。
| 字段 | 描述 |
|---|---|
directorystring
|
|