kubeadm 配置 (v1beta4)
概述
软件包 v1beta4 定义了 kubeadm 配置文件格式的 v1beta4 版本。此版本在 v1beta3 格式的基础上进行了一些小的改进,并添加了一些新字段。
自 v1beta3 以来的变更列表
- TODO https://github.com/kubernetes/kubeadm/issues/2890
- 支持在
ClusterConfiguration
下的控制平面组件中使用自定义环境变量。使用APIServer.ExtraEnvs
、ControllerManager.ExtraEnvs
、Scheduler.ExtraEnvs
、Etcd.Local.ExtraEnvs
。 - 现在 v1beta4 中支持
ResetConfiguration
API 类型。用户可以通过向kubeadm reset
传递--config
文件来重置节点。 - 现在可以在 InitConfiguration 和 JoinConfiguration 配置文件中配置
dry-run
模式。 - 将现有的字符串/字符串额外参数映射替换为支持重复项的结构化额外参数。此更改适用于
ClusterConfiguration
-APIServer.ExtraArgs
、ControllerManager.ExtraArgs
、Scheduler.ExtraArgs
。也适用于NodeRegistrationOptions.KubeletExtraArgs
。 - 添加
ClusterConfiguration.EncryptionAlgorithm
,可用于设置用于此集群的密钥和证书的非对称加密算法。可以是"RSA-2048"
(默认)、"RSA-3072"
、"RSA-4096"
或"ECDSA-P256"
之一。 - 添加
ClusterConfiguration.DNS.Disabled
和ClusterConfiguration.Proxy.Disabled
,可用于在集群初始化期间禁用 CoreDNS 和 kube-proxy 插件。在创建集群期间跳过相关的插件阶段,会将相同的字段设置为false
。 - 在“InitConfiguration”和“JoinConfiguration”中添加
NodeRegistration.ImagePullSerial
字段,可用于控制 kubeadm 是串行还是并行拉取镜像。 - 现在,当向
kubeadm upgrade
子命令传递--config
时,v1beta4 中支持 UpgradeConfiguration kubeadm API。不推荐使用kubelet
和kube-proxy
、InitConfiguration 和 ClusterConfiguration 的组件配置,并且在向upgrade
子命令传递--config
时将忽略这些配置。 - 向
InitConfiguration
、JoinConfiguration
、ResetConfiguration
和UpgradeConfiguration
添加Timeouts
结构,可用于配置各种超时。
从旧的 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 子网或服务子网。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.ac.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.ac.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 |
|
说明 字符串 |
|
ttl meta/v1.Duration |
|
expires meta/v1.Time |
|
usages []字符串 |
|
groups []字符串 |
|
BootstrapTokenString
出现在
BootstrapTokenString 是格式为 abcdef.abcdef0123456789
的令牌,用于从加入节点的角度验证 API 服务器的实用性,并作为“kubeadm join”引导阶段中节点的身份验证方法。此令牌是并且应该是短暂的。
字段 | 说明 |
---|---|
- [必填]字符串 | 未提供说明。 |
- [必填]字符串 | 未提供说明。 |
ClusterConfiguration
ClusterConfiguration 包含 kubeadm 集群的集群范围配置。
字段 | 说明 |
---|---|
apiVersion 字符串 | kubeadm.k8s.io/v1beta4 |
kind 字符串 | ClusterConfiguration |
etcd Etcd |
|
networking 网络 |
|
kubernetesVersion 字符串 |
|
controlPlaneEndpoint 字符串 |
|
apiServer APIServer |
|
controllerManager ControlPlaneComponent |
|
scheduler ControlPlaneComponent |
|
dns DNS |
|
proxy [必填]Proxy |
|
certificatesDir 字符串 |
|
imageRepository 字符串 |
|
featureGates map[string]bool |
|
clusterName 字符串 | 集群名称。 |
encryptionAlgorithm EncryptionAlgorithmType |
|
InitConfiguration
InitConfiguration 包含特定于“kubeadm init”的运行时信息列表。 kubeadm init
专用信息。这些字段仅在第一次运行 kubeadm init
时使用。之后,字段中的信息不会上传到 kubeadm-config
ConfigMap,例如 kubeadm upgrade
使用的 ConfigMap。这些字段必须为 omitempty。
字段 | 说明 |
---|---|
apiVersion 字符串 | kubeadm.k8s.io/v1beta4 |
kind 字符串 | InitConfiguration |
bootstrapTokens []BootstrapToken |
|
dryRun [必填]bool |
|
nodeRegistration NodeRegistrationOptions |
|
localAPIEndpoint APIEndpoint |
|
certificateKey 字符串 |
|
skipPhases []字符串 |
|
patches Patches |
|
JoinConfiguration
JoinConfiguration 包含描述特定节点的元素。
字段 | 说明 |
---|---|
apiVersion 字符串 | kubeadm.k8s.io/v1beta4 |
kind 字符串 | JoinConfiguration |
dryRun bool |
|
nodeRegistration NodeRegistrationOptions |
|
caCertPath 字符串 |
|
discovery [必填]Discovery |
|
controlPlane JoinControlPlane |
|
skipPhases []字符串 |
|
patches Patches |
|
ResetConfiguration
ResetConfiguration 包含专门针对 kubeadm reset
的运行时信息字段列表。
字段 | 说明 |
---|---|
apiVersion 字符串 | kubeadm.k8s.io/v1beta4 |
kind 字符串 | ResetConfiguration |
cleanupTmpDir bool |
|
certificatesDir 字符串 |
|
criSocket 字符串 |
|
dryRun bool |
|
force bool |
|
ignorePreflightErrors []字符串 |
|
skipPhases []字符串 |
|
UpgradeConfiguration
UpgradeConfiguration 包含特定于 kubeadm upgrade
子命令的选项列表。
字段 | 说明 |
---|---|
apiVersion 字符串 | kubeadm.k8s.io/v1beta4 |
kind 字符串 | UpgradeConfiguration |
apply UpgradeApplyConfiguration |
|
diff UpgradeDiffConfiguration |
|
node UpgradeNodeConfiguration |
|
plan UpgradePlanConfiguration |
|
timeouts Timeouts |
|
APIEndpoint
出现在
APIEndpoint 结构包含部署在节点上的 API 服务器实例的元素。
字段 | 说明 |
---|---|
advertiseAddress 字符串 |
|
bindPort int32 |
|
APIServer
出现在
APIServer 保存集群中 API 服务器部署所需的设置
字段 | 说明 |
---|---|
ControlPlaneComponent [必填]ControlPlaneComponent | (ControlPlaneComponent 的成员嵌入到此类型中。) 未提供描述。 |
certSANs []字符串 |
|
timeoutForControlPlane meta/v1.Duration |
|
Arg
出现在
Arg 表示具有名称和值的 arguments。
字段 | 说明 |
---|---|
name [必填]字符串 | arguments 的名称。 |
value [必填]字符串 | arguments 的值。 |
BootstrapTokenDiscovery
出现在
BootstrapTokenDiscovery 用于设置基于引导令牌的发现的选项。
字段 | 说明 |
---|---|
token [必填]字符串 |
|
apiServerEndpoint 字符串 |
|
caCertHashes []字符串 |
|
unsafeSkipCAVerification bool |
|
ControlPlaneComponent
出现在
ControlPlaneComponent 保存集群控制平面组件的通用设置
字段 | 说明 |
---|---|
extraArgs []Arg |
|
extraVolumes []HostPathMount |
|
extraEnvs []EnvVar |
|
DNS
出现在
DNS 定义应在集群中使用的 DNS 插件
字段 | 说明 |
---|---|
ImageMeta [必填]ImageMeta | (ImageMeta 的成员嵌入到此类型中。)
|
disabled [必填]bool |
|
Discovery
出现在
Discovery 指定 kubelet 在 TLS 引导过程中使用的选项
字段 | 说明 |
---|---|
bootstrapToken BootstrapTokenDiscovery |
|
file FileDiscovery |
|
tlsBootstrapToken 字符串 |
|
timeout meta/v1.Duration |
|
EncryptionAlgorithmType
(string
的别名)
出现在
EncryptionAlgorithmType 可以定义非对称加密算法类型。
EnvVar
出现在
EnvVar 表示容器中存在的环境变量。
字段 | 说明 |
---|---|
EnvVar [必填]core/v1.EnvVar | (EnvVar 的成员嵌入到此类型中。) 未提供描述。 |
Etcd
出现在
Etcd 包含描述 Etcd 配置的元素。
字段 | 说明 |
---|---|
local LocalEtcd |
|
external ExternalEtcd |
|
ExternalEtcd
出现在
ExternalEtcd 描述了一个外部 etcd 集群。 Kubeadm 不知道证书文件的位置,必须提供它们。
字段 | 说明 |
---|---|
endpoints [必填][]字符串 |
|
caFile [必填]字符串 |
|
certFile [必填]字符串 |
|
keyFile [必填]字符串 |
|
FileDiscovery
出现在
FileDiscovery 用于指定 kubeconfig 文件的文件路径或 URL,kubelet 将从中加载集群信息。
字段 | 说明 |
---|---|
kubeConfigPath [必填]字符串 |
|
HostPathMount
出现在
HostPathMount 包含描述从主机挂载的卷的元素。
字段 | 说明 |
---|---|
name [必填]字符串 |
|
hostPath [必填]字符串 |
|
mountPath [必填]字符串 |
|
readOnly bool |
|
pathType core/v1.HostPathType |
|
ImageMeta
出现在
ImageMeta 允许自定义用于非 Kubernetes/Kubernetes 发布流程生成的组件的镜像
字段 | 说明 |
---|---|
imageRepository 字符串 |
|
imageTag 字符串 |
|
JoinControlPlane
出现在
JoinControlPlane 包含描述要在加入节点上部署的附加控制平面实例的元素。
字段 | 说明 |
---|---|
localAPIEndpoint APIEndpoint |
|
certificateKey 字符串 |
|
LocalEtcd
出现在
LocalEtcd 描述了 kubeadm 应该在本地运行 etcd 集群。
字段 | 说明 |
---|---|
ImageMeta [必填]ImageMeta | (ImageMeta 的成员嵌入到此类型中。)ImageMeta 允许自定义用于 etcd 的容器 |
dataDir [必填]字符串 |
|
extraArgs [必填][]Arg |
|
extraEnvs []EnvVar |
|
serverCertSANs []字符串 |
|
peerCertSANs []字符串 |
|
网络
出现在
Networking 包含描述集群网络配置的元素。
字段 | 说明 |
---|---|
serviceSubnet 字符串 |
|
podSubnet 字符串 |
|
dnsDomain 字符串 |
|
NodeRegistrationOptions
出现在
NodeRegistrationOptions 包含与通过 kubeadm init
或 kubeadm join
将新的控制平面或节点注册到集群相关的字段。
字段 | 说明 |
---|---|
name 字符串 |
|
criSocket 字符串 |
|
taints [必填][]core/v1.Taint |
|
kubeletExtraArgs []Arg |
|
ignorePreflightErrors []字符串 |
|
imagePullPolicy core/v1.PullPolicy |
|
Patches
出现在
Patches 包含与将补丁应用于 kubeadm 部署的组件相关的选项。
字段 | 说明 |
---|---|
directory 字符串 |
|
Proxy
出现在
Proxy 定义应该在集群中使用的代理插件。
字段 | 说明 |
---|---|
disabled [必填]bool |
|
Timeouts
出现在
Timeouts 包含适用于 kubeadm 命令的各种超时。
字段 | 说明 |
---|---|
controlPlaneComponentHealthCheck meta/v1.Duration |
|
kubeletHealthCheck meta/v1.Duration |
|
kubernetesAPICall meta/v1.Duration |
|
etcdAPICall meta/v1.Duration |
|
tlsBootstrap meta/v1.Duration |
|
discovery meta/v1.Duration |
|
upgradeManifests [必填]meta/v1.Duration |
|
UpgradeApplyConfiguration
出现在
UpgradeApplyConfiguration 包含特定于“kubeadm upgrade apply”命令的可配置选项列表。
字段 | 说明 |
---|---|
kubernetesVersion 字符串 |
|
allowExperimentalUpgrades bool |
|
allowRCUpgrades bool | 启用 |
certificateRenewal bool |
|
dryRun bool |
|
etcdUpgrade bool |
|
forceUpgrade bool |
|
ignorePreflightErrors []字符串 |
|
patches Patches |
|
printConfig bool |
|
SkipPhases [必填][]字符串 |
|
UpgradeDiffConfiguration
出现在
UpgradeDiffConfiguration 包含特定于“kubeadm upgrade diff”命令的可配置选项列表。
字段 | 说明 |
---|---|
kubernetesVersion 字符串 |
|
contextLines int |
|
UpgradeNodeConfiguration
出现在
UpgradeNodeConfiguration 包含 “kubeadm upgrade node” 命令特有的一系列可配置选项。
字段 | 说明 |
---|---|
certificateRenewal bool |
|
dryRun bool |
|
etcdUpgrade bool |
|
ignorePreflightErrors []字符串 |
|
skipPhases []字符串 |
|
patches Patches |
|
UpgradePlanConfiguration
出现在
UpgradePlanConfiguration 包含 “kubeadm upgrade plan” 命令特有的一系列可配置选项。
字段 | 说明 |
---|---|
kubernetesVersion [必填]字符串 |
|
allowExperimentalUpgrades bool |
|
allowRCUpgrades bool | 启用 |
dryRun bool |
|
ignorePreflightErrors []字符串 |
|
printConfig bool |
|
本页面由系统自动生成。
如果您计划报告此页面的问题,请在问题描述中提及此页面是自动生成的。修复可能需要在 Kubernetes 项目的其他地方进行。