kubeadm 配置 (v1beta3)
概述
包 v1beta3 定义了 kubeadm 配置文件格式的 v1beta3 版本。此版本改进了 v1beta2 格式,修复了一些小问题并添加了一些新字段。
自 v1beta2 以来的变更列表
- 已弃用的 “ClusterConfiguration.useHyperKubeImage” 字段已被移除。Kubeadm 不再支持 hyperkube 镜像。
- 由于 CoreDNS 是 kubeadm 支持的唯一 DNS 服务器类型,因此 “ClusterConfiguration.dns.type” 字段已被移除。
- 在包含密钥的字段上包含 “datapolicy” 标签。这将导致在使用 klog 打印 API 结构时省略字段值。
- 添加 “InitConfiguration.skipPhases”、“JoinConfiguration.skipPhases” 以允许在 kubeadm init/join 命令执行期间跳过一系列阶段。
- 添加 “InitConfiguration.nodeRegistration.imagePullPolicy” 和 “JoinConfiguration.nodeRegistration.imagePullPolicy” 以允许在 kubeadm “init” 和 “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 v1.27.x 及更高版本不再支持 v1beta2 及更旧的 API。
基础知识
配置 kubeadm 的首选方法是使用 `--config` 选项传递 YAML 配置文件。kubeadm 配置文件中定义的一些配置选项也可用作命令行标志,但这种方法仅支持最常见/简单的用例。
kubeadm 配置文件可以包含使用三个破折号 (`---`) 分隔的多种配置类型。
kubeadm 支持以下配置类型
apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration apiVersion: kubeadm.k8s.io/v1beta3 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 初始化配置类型
使用 `--config` 选项执行 kubeadm init 时,可以使用以下配置类型:InitConfiguration、ClusterConfiguration、KubeProxyConfiguration、KubeletConfiguration,但 InitConfiguration 和 ClusterConfiguration 之间只有一个是必需的。
apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration bootstrapTokens: ... nodeRegistration: ...
InitConfiguration 类型应用于配置运行时设置,在 kubeadm init 的情况下,这些设置是引导令牌的配置以及特定于执行 kubeadm 的节点的所有设置,包括
NodeRegistration,包含与将新节点注册到集群相关的字段;使用它来自定义节点名称、要使用的 CRI 套接字或任何其他应仅应用于此节点的设置(例如节点 IP)。
LocalAPIEndpoint,表示要在此节点上部署的 API 服务器实例的端点;例如,使用它来自定义 API 服务器通告地址。
apiVersion: kubeadm.k8s.io/v1beta3 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。
这是一个完整的示例,其中包含一个 YAML 文件,其中包含多个配置类型,可在 `kubeadm init` 运行期间使用。
apiVersion: kubeadm.k8s.io/v1beta3 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: "/var/run/dockershim.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/v1beta3 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: bind-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 加入配置类型
使用 `--config` 选项执行 `kubeadm join` 时,应提供 JoinConfiguration 类型。
apiVersion: kubeadm.k8s.io/v1beta3 kind: JoinConfiguration ...
JoinConfiguration 类型应用于配置运行时设置,在 `kubeadm join` 的情况下,这些设置是用于访问集群信息的发现方法以及特定于执行 kubeadm 的节点的所有设置,包括
`nodeRegistration`,包含与将新节点注册到集群相关的字段;使用它来自定义节点名称、要使用的 CRI 套接字或任何其他应仅应用于此节点的设置(例如节点 IP)。
`apiEndpoint`,表示最终要在此节点上部署的 API 服务器实例的端点。
资源类型
BootstrapToken(引导令牌)
出现于
BootstrapToken 描述了一个引导令牌,作为 Secret 存储在集群中
字段 | 描述 |
---|---|
`token` **[必填]**BootstrapTokenString | `token` 用于在节点和控制平面之间建立双向信任。用于将节点加入集群。 |
description(描述) string(字符串) | `description` 设置了关于此令牌存在原因及其用途的人类可读消息,以便其他管理员可以了解其目的。 |
ttl(生存时间) meta/v1.Duration | `ttl` 定义此令牌的生存时间。默认为 `24h`。`expires` 和 `ttl` 互斥。 |
expires(过期时间) meta/v1.Time | `expires` 指定此令牌的过期时间戳。默认情况下,它会根据 `ttl` 在运行时动态设置。`expires` 和 `ttl` 互斥。 |
usages(用途) []string(字符串数组) | `usages` 描述了此令牌的用法。默认情况下,它可以用于建立双向信任,但可以在这里更改。 |
groups(组) []string(字符串数组) | `groups` 指定此令牌在用于身份验证时将进行身份验证的额外组 |
BootstrapTokenString
出现于
BootstrapTokenString 是一种格式为 `abcdef.abcdef0123456789` 的令牌,用于从加入节点的角度验证 API 服务器的实用性,并作为“kubeadm join”引导阶段中节点的身份验证方法。此令牌的有效期很短,并且应该如此。
字段 | 描述 |
---|---|
- [必填]string(字符串) | 未提供描述。 |
- [必填]string(字符串) | 未提供描述。 |
ClusterConfiguration(集群配置)
ClusterConfiguration 包含 kubeadm 集群的集群范围配置。
字段 | 描述 |
---|---|
apiVersion string(字符串) | kubeadm.k8s.io/v1beta3 |
kind string(字符串) | ClusterConfiguration(集群配置) |
etcd Etcd |
|
networking 网络 |
|
kubernetesVersion string(字符串) |
|
controlPlaneEndpoint string(字符串) |
|
apiServer APIServer |
|
controllerManager ControlPlaneComponent |
|
scheduler ControlPlaneComponent |
|
dns DNS |
|
certificatesDir string(字符串) |
|
imageRepository string(字符串) |
|
featureGates map[string]bool |
|
clusterName string(字符串) | 集群名称。 |
InitConfiguration(初始化配置)
InitConfiguration 包含特定于“kubeadm init”的运行时信息列表。仅限 `kubeadm init` 的信息。这些字段仅在第一次运行 `kubeadm init` 时使用。之后,字段中的信息不会上传到 `kubeadm-config` ConfigMap,例如 `kubeadm upgrade` 使用该 ConfigMap。这些字段必须是 omitempty。
字段 | 描述 |
---|---|
apiVersion string(字符串) | kubeadm.k8s.io/v1beta3 |
kind string(字符串) | InitConfiguration(初始化配置) |
bootstrapTokens []BootstrapToken | 在 `kubeadm init` 时会考虑 `bootstrapTokens`,它描述了一组要创建的引导令牌。此信息不会上传到 kubeadm 集群配置映射,部分原因是其敏感性。 |
nodeRegistration NodeRegistrationOptions |
|
localAPIEndpoint APIEndpoint |
|
certificateKey string(字符串) | 在 `uploadcerts init` 阶段将证书和密钥上传到集群中的 Secret 之前,`certificateKey` 设置用于加密证书和密钥的密钥。证书密钥是一个十六进制编码的字符串,它是一个大小为 32 字节的 AES 密钥。 |
skipPhases []string(字符串数组) |
|
patches Patches |
|
JoinConfiguration(加入配置)
JoinConfiguration 包含描述特定节点的元素。
字段 | 描述 |
---|---|
apiVersion string(字符串) | kubeadm.k8s.io/v1beta3 |
kind string(字符串) | JoinConfiguration(加入配置) |
nodeRegistration NodeRegistrationOptions |
|
caCertPath string(字符串) | `caCertPath` 是用于保护节点与控制平面之间通信的 SSL 证书颁发机构的路径。默认为“/etc/kubernetes/pki/ca.crt”。 |
discovery [必填]Discovery |
|
controlPlane JoinControlPlane | `controlPlane` 定义要在加入节点上部署的附加控制平面实例。如果为 nil,则不会部署其他控制平面实例。 |
skipPhases []string(字符串数组) | `skipPhases` 是在命令执行期间要跳过的阶段列表。可以使用 `kubeadm join --help` 命令获取阶段列表。标志 `--skip-phases` 优先于此字段。 |
patches 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 服务器签名证书设置额外的使用者可选名称 (SAN)。 |
timeoutForControlPlane meta/v1.Duration | `timeoutForControlPlane` 控制我们等待 API 服务器出现超时。 |
BootstrapTokenDiscovery
出现于
BootstrapTokenDiscovery 用于设置基于引导令牌的发现选项。
字段 | 描述 |
---|---|
`token` **[必填]**string(字符串) | `token` 是用于验证从控制平面获取的集群信息的令牌。 |
apiServerEndpoint string(字符串) | `apiServerEndpoint` 是指向将从中获取信息的 API 服务器的 IP 或域名。 |
caCertHashes []string(字符串数组) | `caCertHashes` 指定在使用基于令牌的发现时要验证的一组公钥固定。发现期间找到的根 CA 必须与这些值之一匹配。指定空集将禁用根 CA 固定,这可能不安全。每个哈希都指定为 `<type>:<value>`,其中当前唯一支持的类型是“sha256”。这是 DER 编码的 ASN.1 中的使用者公钥信息 (SPKI) 对象的十六进制编码的 SHA-256 哈希。可以使用例如 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 指定 kubelet 在 TLS 引导过程中使用的选项。
字段 | 描述 |
---|---|
bootstrapToken BootstrapTokenDiscovery | `bootstrapToken` 用于设置基于引导令牌的发现选项。 `bootstrapToken` 和 `file` 互斥。 |
file FileDiscovery | `file` 用于指定文件或 URL 到 kubeconfig 文件,从中加载集群信息。 `bootstrapToken` 和 `file` 互斥。 |
tlsBootstrapToken string(字符串) | `tlsBootstrapToken` 是用于 TLS 引导的令牌。如果设置了 `bootstrapToken`,则此字段默认为 `.bootstrapToken.token`,但可以覆盖。如果设置了 `file`,则在 KubeConfigFile 不包含任何其他身份验证信息的情况下,**必须设置** 此字段 |
timeout meta/v1.Duration | `timeout` 修改发现超时。 |
Etcd
出现于
Etcd 包含描述 Etcd 配置的元素。
字段 | 描述 |
---|---|
local LocalEtcd | `local` 提供用于配置本地 etcd 实例的配置旋钮。 `local` 和 `external` 互斥。 |
external ExternalEtcd | `external` 描述如何连接到外部 etcd 集群。 `local` 和 `external` 互斥。 |
ExternalEtcd
出现于
ExternalEtcd 描述了一个外部 etcd 集群。 Kubeadm 不知道证书文件位于何处,必须提供它们。
字段 | 描述 |
---|---|
endpoints [必填][]string(字符串数组) | `endpoints` 包含 etcd 成员的列表。 |
caFile [必填]string(字符串) | `caFile` 是用于保护 etcd 通信的 SSL 证书颁发机构 (CA) 文件。如果使用 TLS 连接,则为必填项。 |
certFile [必填]string(字符串) | `certFile` 是用于保护 etcd 通信的 SSL 证书文件。如果使用 TLS 连接,则为必填项。 |
keyFile [必填]string(字符串) | `keyFile` 是用于保护 etcd 通信的 SSL 密钥文件。如果使用 TLS 连接,则为必填项。 |
FileDiscovery
出现于
FileDiscovery 用于指定文件或 URL 到 kubeconfig 文件,从中加载集群信息。
字段 | 描述 |
---|---|
kubeConfigPath [必填]string(字符串) | `kubeConfigPath` 用于指定从中加载集群信息的 kubeconfig 文件的实际文件路径或 URL。 |
HostPathMount
出现于
HostPathMount 包含描述从主机挂载的卷的元素。
字段 | 描述 |
---|---|
name [必填]string(字符串) | `name` 是 Pod 模板中卷的名称。 |
hostPath [必填]string(字符串) |
|
mountPath [必填]string(字符串) |
|
readOnly bool |
|
pathType core/v1.HostPathType |
|
ImageMeta
出现于
ImageMeta 允许自定义用于非 Kubernetes/Kubernetes 发布流程生成的组件的镜像。
字段 | 描述 |
---|---|
imageRepository string(字符串) |
|
imageTag string(字符串) |
|
JoinControlPlane
出现于
JoinControlPlane 包含描述要在加入节点上部署的附加控制平面实例的元素。
字段 | 描述 |
---|---|
localAPIEndpoint APIEndpoint |
|
certificateKey string(字符串) |
|
LocalEtcd
出现于
LocalEtcd 描述 kubeadm 应在本地运行 etcd 集群。
字段 | 描述 |
---|---|
ImageMeta [必填]ImageMeta | (`ImageMeta` 的成员嵌入到此类型中。) ImageMeta 允许自定义用于 etcd 的容器。 |
dataDir [必填]string(字符串) |
|
extraArgs map[string]string |
|
serverCertSANs []string(字符串数组) |
|
peerCertSANs []string(字符串数组) |
|
网络
出现于
Networking 包含描述集群网络配置的元素。
字段 | 描述 |
---|---|
serviceSubnet string(字符串) |
|
podSubnet string(字符串) |
|
dnsDomain string(字符串) |
|
NodeRegistrationOptions
出现于
NodeRegistrationOptions 包含与通过 kubeadm init
或 kubeadm join
将新的控制平面或节点注册到集群相关的字段。
字段 | 描述 |
---|---|
name string(字符串) |
|
criSocket string(字符串) |
|
taints [必填][]core/v1.Taint |
|
kubeletExtraArgs map[string]string |
|
ignorePreflightErrors []string(字符串数组) |
|
imagePullPolicy core/v1.PullPolicy |
|
Patches
出现于
Patches 包含与将补丁应用于 kubeadm 部署的组件相关的选项。
字段 | 描述 |
---|---|
directory string(字符串) |
|
此页面自动生成。
如果您计划报告此页面的问题,请在问题描述中提及此页面是自动生成的。修复可能需要在 Kubernetes 项目的其他地方进行。