这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

Kubeadm

Kubeadm 是一个提供了 kubeadm initkubeadm join 的工具, 作为创建 Kubernetes 集群的 “快捷途径” 的最佳实践。

kubeadm 通过执行必要的操作来启动和运行最小可用集群。 按照设计,它只关注启动引导,而非配置机器。同样的, 安装各种 “锦上添花” 的扩展,例如 Kubernetes Dashboard、 监控方案、以及特定云平台的扩展,都不在讨论范围内。

相反,我们希望在 kubeadm 之上构建更高级别以及更加合规的工具, 理想情况下,使用 kubeadm 作为所有部署工作的基准将会更加易于创建一致性集群。

如何安装

要安装 kubeadm, 请查阅 安装指南.

接下来

1 - 创建 Kubeadm

1.1 -

摘要

┌──────────────────────────────────────────────────────────┐
│ KUBEADM                                                  │
│ 轻松创建一个安全的 Kubernetes 集群                       │
│                                                          │
│ 给我们反馈意见的地址:                                   │
│ https://github.com/kubernetes/kubeadm/issues             │
└──────────────────────────────────────────────────────────┘

用途示例:

创建一个有两台机器的集群,包含一个主节点(用来控制集群),和一个工作节点(运行您的工作负载,像 Pod 和 Deployment)。

┌──────────────────────────────────────────────────────────┐
│ 在第一台机器上:                                         │
├──────────────────────────────────────────────────────────┤
│ control-plane# kubeadm init                              │
└──────────────────────────────────────────────────────────┘

┌──────────────────────────────────────────────────────────┐
│ 在第二台机器上:                                         │
├──────────────────────────────────────────────────────────┤
│ worker# kubeadm join <arguments-returned-from-init>│
└──────────────────────────────────────────────────────────┘

您可以重复第二步,向集群添加更多机器。

选项

-h, --help
kubeadm 操作的帮助信息
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.2 -

概要

kubeadm 实验子命令

选项

-h, --help
alpha 操作的帮助命令

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机的根文件系统的路径。

1.3 -

概要

kubeconfig 文件应用程序。

Alpha 免责声明:此命令当前为 alpha 功能。

选项

-h, --help
kubeconfig 操作的帮助命令

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.4 -

概要

为其他用户输出 kubeconfig 文件。

Alpha 免责声明:此命令当前为 Alpha 功能。

kubeadm alpha kubeconfig user [flags]

示例

# 使用名为 bar 的 kubeadm 配置文件为名为 foo 的另一用户输出 kubeconfig 文件
kubeadm alpha kubeconfig user --client-name=foo --config=bar

选项

--client-name string
用户名。如果生成客户端证书,则用作其 CN。
--config string
指向 kubeadm 配置文件的路径
-h, --help
user 操作的帮助命令
--org stringSlice
客户端证书的组织。如果创建客户端证书,此值将用作其 O 字段值。
--token string
应该用此 kubeconfig 的身份验证机制的令牌,而不是客户端证书

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机的根目录。

1.5 -

概要

与处理 kubernetes 证书相关的命令

选项

-h, --help
certs 命令的帮助

继承于父命令的选项

--rootfs string
[实验] 到'真实'主机根文件系统的路径。

1.6 -

概要

该命令将打印出可以与 "init" 命令一起使用的安全的随机生成的证书密钥。

你也可以使用 kubeadm init --upload-certs 而无需指定证书密钥; 命令将为你生成并打印一个证书密钥。

kubeadm certs certificate-key [flags]

选项

-h, --help
certificate-key 操作的帮助命令

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.7 -

概要

检查 kubeadm 管理的本地 PKI 中证书的到期时间。

kubeadm certs check-expiration [flags]

选项

--cert-dir string     默认值: "/etc/kubernetes/pki"
保存证书的路径
--config string
kubeadm 配置文件的路径
-h, --help
check-expiration 的帮助命令

继承于父命令的选项

--rootfs string
[实验] 到'真实'主机根文件系统的路径。

1.8 -

为运行控制平面所需的所有证书生成密钥和证书签名请求(CSR)。该命令会生成部分 kubeconfig 文件, 其中 "users > user > client-key-data" 字段包含私钥数据,并为每个 kubeconfig 文件创建一个随附的 ".csr" 文件。

此命令设计用于 Kubeadm 外部 CA 模式。 它生成你可以提交给外部证书颁发机构进行签名的 CSR。

应使用 ".crt" 作为文件扩展名将 PEM 编码的签名证书与密钥文件一起保存。 或者,对于 kubeconfig 文件,PEM 编码的签名证书应使用 base64 编码, 并添加到 "users > user > client-certificate-data" 字段。

kubeadm certs generate-csr [flags]

示例

# 以下命令将为所有控制平面证书和 kubeconfig 文件生成密钥和 CSR :
kubeadm certs generate-csr --kubeconfig-dir /tmp/etc-k8s --cert-dir /tmp/etc-k8s/pki

选项

--cert-dir string
保存证书的路径
--config string
kubeadm 配置文件的路径。
-h, --help
generate-csr 命令的帮助
--kubeconfig-dir string     默认值:"/etc/kubernetes"
保存 kubeconfig 文件的路径。

继承于父命令的选项

--rootfs string
[实验] 到'真实'主机根文件系统的路径。

1.9 -

概要

此命令并非设计用来单独运行。请参阅可用子命令列表。

kubeadm certs renew [flags]

选项

-h, --help
renew 操作的帮助命令

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.10 -

概要

续订 kubeconfig 文件中嵌入的证书,供管理员 和 kubeadm 自身使用。

无论证书的到期日期如何,续订都是无条件进行的;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。

默认情况下,续订会尝试使用由 kubeadm 管理的本地 PKI 中的证书机构;作为替代方案, 也可以使用 K8s 证书 API 进行证书续订,或者(作为最后一种选择)生成 CSR 请求。

续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防证书文件在其他地方使用。

kubeadm certs renew admin.conf [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
--csr-dir string
CSR 和私钥的输出路径
--csr-only
创建 CSR 而不是生成证书
-h, --help
admin.conf 子操作的帮助命令
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.11 -

概要

续订运行控制平面所需的所有已知证书。续订是无条件进行的,与到期日期无关。续订也可以单独运行以进行更多控制。

kubeadm certs renew all [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--csr-dir string
输出 CSR 和私钥的路径
--csr-only
创建 CSR 而不是生成证书
-h, --help
all 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.12 -

概要

续订 apiserver 用于访问 etcd 的证书。

无论证书的到期日期如何,续订都会无条件地进行;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。

默认情况下,续订尝试使用在 kubeadm 所管理的本地 PKI 中的证书颁发机构;作为替代方案, 可以使用 K8s 证书 API 进行证书更新,或者作为最后一个选择来生成 CSR 请求。

续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。

kubeadm certs renew apiserver-etcd-client [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--csr-dir string
输出 CSR 和私钥的路径
--csr-only
创建 CSR 而不是生成证书
-h, --help
apiserver-etcd-client 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.13 -

概要

续订 apiserver 用于连接 kubelet 的证书。

无论证书的到期日期如何,续订都会无条件地进行;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。

默认情况下,续订尝试使用位于 kubeadm 所管理的本地 PKI 中的证书颁发机构;作为替代方案, 也可能调用 K8s 证书 API 进行证书更新;亦或者,作为最后一个选择,生成 CSR 请求。

续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。

kubeadm certs renew apiserver-kubelet-client [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--csr-dir string
输出 CSR 和私钥的路径
--csr-only
创建 CSR 而不是生成证书
-h, --help
apiserver-kubelet-client 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.14 -

概要

续订用于提供 Kubernetes API 的证书。

无论证书的到期日期如何,续订都会无条件地进行;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。

默认情况下,续订尝试在 kubeadm 管理的本地 PKI 中使用证书颁发机构;作为替代方案, 可以使用 K8s 证书 API 进行证书更新,或者作为最后一个选择来生成 CSR 请求。

续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。

kubeadm certs renew apiserver [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
--csr-dir string
CSR 和私钥的输出路径
--csr-only
创建 CSR 而不是生成证书
-h, --help
apiserver 子操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.15 -

概要

续订 kubeconfig 文件中嵌入的证书,以供控制器管理器(Controller Manager)使用。

续订无条件地进行,与证书的到期日期无关;SAN 等额外属性将基于现有的文件/证书,因此无需重新提供它们。

默认情况下,续订会尝试使用 kubeadm 管理的本地 PKI 中的证书颁发机构;作为替代方案, 可以使用 K8s 证书 API 进行证书续订;亦或者,作为最后一种选择,生成 CSR 请求。

续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。

kubeadm alpha renew controller-manager.conf [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
--csr-dir string
CSR 和私钥的输出路径
--csr-only
创建 CSR 而不是生成证书
-h, --help
controller-manager.conf 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.16 -

概要

续订存活态探针的证书,用于对 etcd 执行健康检查。

无论证书的到期日期如何,续订都是无条件进行的;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。

默认情况下,续订会尝试使用由 kubeadm 管理的本地 PKI 中的证书机构;作为替代方案, 也可以使用 K8s certificate API 进行证书续订,或者(作为最后一种选择)生成 CSR 请求。

续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防证书文件在其他地方使用。

kubeadm certs renew etcd-healthcheck-client [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
--csr-dir string
CSR 和私钥的输出路径
--csr-only
创建 CSR 而不是生成证书
-h, --help
etcd-healthcheck-client 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.17 -

概要

续订 etcd 节点间用来相互通信的证书。

无论证书的到期日期如何,续订都是无条件进行的;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。

默认情况下,续订会尝试使用由 kubeadm 管理的本地 PKI 中的证书机构; 作为替代方案,也可以使用 K8s certificate API 进行证书续订,或者(作为最后一种选择)生成 CSR 请求。

续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防证书文件在其他地方使用。

kubeadm certs renew etcd-peer [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
--csr-dir string
CSR 和私钥的输出路径
--csr-only
创建 CSR 而不是生成证书
-h, --help
etcd-peer 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.18 -

概要

续订用于提供 etcd 服务的证书。

续订无条件地进行,与证书的到期日期无关;SAN 等额外属性将基于现有的文件/证书,因此无需重新提供它们。

默认情况下,续订会尝试在 kubeadm 管理的本地 PKI 中使用证书颁发机构;作为替代方案, 可以使用 K8s 证书 API 进行证书续订,或者作为最后一种选择来生成 CSR 请求。

续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。

kubeadm certs renew etcd-server [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
--csr-dir string
CSR 和私钥的输出路径
--csr-only
创建 CSR 而不是生成证书
-h, --help
etcd-server 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.19 -

概要

为前端代理客户端续订证书。

无论证书的到期日期如何,续订都会无条件地进行;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。

默认情况下,续订尝试使用位于 kubeadm 所管理的本地 PKI 中的证书颁发机构;作为替代方案, 也可以使用 K8s 证书 API 进行证书续订;亦或者,作为最后一种方案,生成 CSR 请求。

续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。

kubeadm certs renew front-proxy-client [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--csr-dir string
输出 CSR 和私钥的路径
--csr-only
创建 CSR 而不是生成证书
-h, --help
front-proxy-client 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.20 -

概要

续订 kubeconfig 文件中嵌入的证书,以供调度管理器使用。

续订无条件地进行,与证书的到期日期无关;SAN 等额外属性将基于现有的文件/证书,因此无需重新提供它们。

默认情况下,续订会尝试使用在 kubeadm 所管理的本地 PKI 中的证书颁发机构;作为替代方案, 也可以使用 K8s 证书 API 进行证书续订;亦或者,作为最后一种选择,生成 CSR 请求。

续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。

kubeadm certs renew scheduler.conf [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
--csr-dir string
CSR 和私钥的输出路径
--csr-only
创建 CSR 而不是生成证书
-h, --help
scheduler.conf 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.21 -

概要

为指定的 shell(bash 或 zsh)输出 shell 自动补全代码。 必须激活 shell 代码以提供交互式 kubeadm 命令补全。这可以通过加载 .bash_profile 文件完成。

注意: 此功能依赖于 bash-completion 框架。

在 Mac 上使用 homebrew 安装:

brew install bash-completion

安装后,必须激活 bash_completion。这可以通过在 .bash_profile 文件中添加下面的命令行来完成

source $(brew --prefix)/etc/bash_completion

如果在 Linux 上没有安装 bash-completion,请通过您的发行版的包管理器安装 bash-completion 软件包。

zsh 用户注意事项:[1] zsh 自动补全仅在 >=v5.2 及以上版本中支持。

kubeadm completion SHELL [flags]

示例

# 在 Mac 上使用 homebrew 安装 bash completion
brew install bash-completion
printf "\n# Bash completion support\nsource $(brew --prefix)/etc/bash_completion\n" >> $HOME/.bash_profile
source $HOME/.bash_profile

# 将 bash 版本的 kubeadm 自动补全代码加载到当前 shell 中
source <(kubeadm completion bash)

# 将 bash 自动补全完成代码写入文件并且从 .bash_profile 文件加载它
printf "\n# Kubeadm shell completion\nsource '$HOME/.kube/kubeadm_completion.bash.inc'\n" >> $HOME/.bash_profile
source $HOME/.bash_profile

# 将 zsh 版本的 kubeadm 自动补全代码加载到当前 shell 中
source <(kubeadm completion zsh)

选项

-h, --help
completion 操作的帮助命令

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.22 -

概要

kube-system 命名空间里有一个名为 "kubeadm-config" 的 ConfigMap,kubeadm 用它来存储有关集群的内部配置。 kubeadm CLI v1.8.0+ 通过一个配置自动创建该 ConfigMap,这个配置是和 'kubeadm init' 共用的。 但是您如果使用 kubeadm v1.7.x 或更低的版本初始化集群,那么必须使用 'config upload' 命令创建该 ConfigMap。 这是必要的操作,目的是使 'kubeadm upgrade' 能够正确地配置升级后的集群。

kubeadm config [flags]

选项

-h, --help
config 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.23 -

概要

与 kubeadm 使用的容器镜像交互。

kubeadm config images [flags]

选项

-h, --help
images 的帮助命令

从父命令继承的选项

--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.24 -

概要

打印 kubeadm 要使用的镜像列表。配置文件用于自定义任何镜像或镜像存储库。

kubeadm config images list [flags]

选项

--allow-missing-template-keys     默认值:true
如果设置为 true,则在模板中缺少字段或哈希表的键时忽略模板中的任何错误。 仅适用于 golang 和 jsonpath 输出格式。
-o, --experimental-output string     默认值:"text"
输出格式:text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file 其中之一
--config string
kubeadm 配置文件的路径。
--feature-gates string
一组键值对(key=value),用于描述各种特征。选项是:
Auditing=true|false (ALPHA - 默认=false)
CoreDNS=true|false (默认=true)
DynamicKubeletConfig=true|false (BETA - 默认=false)
-h, --help
list 操作的帮助命令
--image-repository string     默认值:"k8s.gcr.io"
选择要从中拉取控制平面镜像的容器仓库
--kubernetes-version string     默认值:"stable-1"
为控制平面选择一个特定的 Kubernetes 版本

从父命令继承的选项

--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.25 -

概要

拉取 kubeadm 使用的镜像。

kubeadm config images pull [flags]

选项

--config string
kubeadm 配置文件的路径。
--cri-socket string
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;仅当安装了多个 CRI 或具有非标准 CRI 插槽时,才使用此选项。
--feature-gates string
一系列键值对(key=value),用于描述各种特征。可选项是:
IPv6DualStack=true|false (ALPHA - 默认值=false)
-h, --help
pull 操作的帮助命令
--image-repository string     默认值:"k8s.gcr.io"
选择用于拉取控制平面镜像的容器仓库
--kubernetes-version string     默认值:"stable-1"
为控制平面选择一个特定的 Kubernetes 版本。

从父命令继承的选项

--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.26 -

概要

此命令允许您在 CLI 工具中将本地旧版本的配置对象转换为最新支持的版本,而无需变更集群中的任何内容。在此版本的 kubeadm 中,支持以下 API 版本:

  • kubeadm.k8s.io/v1beta2

因此,无论您在此处传递 --old-config 参数的版本是什么,当写入到 stdout 或 --new-config (如果已指定)时, 都会读取、反序列化、默认、转换、验证和重新序列化 API 对象。

换句话说,如果您将此文件传递给 "kubeadm init",则该命令的输出就是 kubeadm 实际上在内部读取的内容。

kubeadm config migrate [flags]

选项

-h, --help
migrate 操作的帮助信息
--new-config string
使用新的 API 版本生成的 kubeadm 配置文件的路径。这个路径是可选的。如果没有指定,输出将被写到 stdout。
--old-config string
使用旧 API 版本且应转换的 kubeadm 配置文件的路径。此参数是必需的。

从父命令继承的选项

--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果未设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.27 -

打印配置

概要

此命令打印子命令所提供的配置信息。 相关细节可参阅 https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2

kubeadm config print [flags]

选项

-h, --help

print 命令的帮助信息

从父命令继承而来的选项

--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"

与集群通信时使用的 kubeconfig 文件。如此标志未设置,将在一组标准位置中搜索现有的kubeconfig 文件。

--rootfs string

[试验性] 指向“真实”宿主根文件系统的路径。

1.28 -

概要

此命令打印对象,例如用于 'kubeadm init' 的默认 init 配置对象。

请注意,Bootstrap Token 字段之类的敏感值已替换为 {"abcdef.0123456789abcdef" "" "nil" <nil> [] []} 之类的占位符值以通过验证,但不执行创建令牌的实际计算。

kubeadm config print init-defaults [flags]

选项

--component-configs stringSlice
组件配置 API 对象的逗号分隔列表,打印其默认值。可用值:[KubeProxyConfiguration KubeletConfiguration]。如果未设置此参数,则不会打印任何组件配置。
-h, --help
init-defaults 操作的帮助命令

从父命令继承的选项

--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.29 -

概要

此命令打印对象,例如用于 'kubeadm join' 的默认 join 配置对象。

请注意,诸如启动引导令牌字段之类的敏感值已替换为 {"abcdef.0123456789abcdef" "" "nil" <nil> [] []} 之类的占位符值以通过验证,但不执行创建令牌的实际计算。

kubeadm config print join-defaults [flags]

选项

--component-configs stringSlice
组件配置 API 对象的逗号分隔列表,打印其默认值。可用值:[KubeProxyConfiguration KubeletConfiguration]。如果未设置此参数,则不会打印任何组件配置。
-h, --help
join-defaults 操作的帮助命令

从父命令继承的选项

--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.30 -

概要

运行此命令来搭建 Kubernetes 控制平面节点。

"init" 命令执行以下阶段:

preflight                    Run pre-flight checks
certs                        Certificate generation
  /ca                          Generate the self-signed Kubernetes CA to provision identities for other Kubernetes components
  /apiserver                   Generate the certificate for serving the Kubernetes API
  /apiserver-kubelet-client    Generate the certificate for the API server to connect to kubelet
  /front-proxy-ca              Generate the self-signed CA to provision identities for front proxy
  /front-proxy-client          Generate the certificate for the front proxy client
  /etcd-ca                     Generate the self-signed CA to provision identities for etcd
  /etcd-server                 Generate the certificate for serving etcd
  /etcd-peer                   Generate the certificate for etcd nodes to communicate with each other
  /etcd-healthcheck-client     Generate the certificate for liveness probes to healthcheck etcd
  /apiserver-etcd-client       Generate the certificate the apiserver uses to access etcd
  /sa                          Generate a private key for signing service account tokens along with its public key
kubeconfig                   Generate all kubeconfig files necessary to establish the control plane and the admin kubeconfig file
  /admin                       Generate a kubeconfig file for the admin to use and for kubeadm itself
  /kubelet                     Generate a kubeconfig file for the kubelet to use *only* for cluster bootstrapping purposes
  /controller-manager          Generate a kubeconfig file for the controller manager to use
  /scheduler                   Generate a kubeconfig file for the scheduler to use
kubelet-start                Write kubelet settings and (re)start the kubelet
control-plane                Generate all static Pod manifest files necessary to establish the control plane
  /apiserver                   Generates the kube-apiserver static Pod manifest
  /controller-manager          Generates the kube-controller-manager static Pod manifest
  /scheduler                   Generates the kube-scheduler static Pod manifest
etcd                         Generate static Pod manifest file for local etcd
  /local                       Generate the static Pod manifest file for a local, single-node local etcd instance
upload-config                Upload the kubeadm and kubelet configuration to a ConfigMap
  /kubeadm                     Upload the kubeadm ClusterConfiguration to a ConfigMap
  /kubelet                     Upload the kubelet component config to a ConfigMap
upload-certs                 Upload certificates to kubeadm-certs
mark-control-plane           Mark a node as a control-plane
bootstrap-token              Generates bootstrap tokens used to join a node to a cluster
kubelet-finalize             Updates settings relevant to the kubelet after TLS bootstrap
  /experimental-cert-rotation  Enable kubelet client certificate rotation
addon                        Install required addons for passing Conformance tests
  /coredns                     Install the CoreDNS addon to a Kubernetes cluster
  /kube-proxy                  Install the kube-proxy addon to a Kubernetes cluster
kubeadm init [flags]

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认网络接口。
--apiserver-bind-port int32     默认值:6443
API 服务器绑定的端口。
--apiserver-cert-extra-sans stringSlice
用于 API Server 服务证书的可选附加主题备用名称(SAN)。可以是 IP 地址和 DNS 名称。
--cert-dir string     默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--certificate-key string
用于加密 kubeadm-certs Secret 中的控制平面证书的密钥。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--cri-socket string
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;仅当安装了多个 CRI 或具有非标准 CRI 插槽时,才使用此选项。
--dry-run
不要应用任何更改;只是输出将要执行的操作。
--experimental-patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录路径。 例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。 默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。 "suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
--feature-gates string
一组用来描述各种功能特性的键值(key=value)对。选项是:
IPv6DualStack=true|false (ALPHA - default=false)
-h, --help
init 操作的帮助命令
--ignore-preflight-errors stringSlice
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--image-repository string     默认值:"k8s.gcr.io"
选择用于拉取控制平面镜像的容器仓库
--kubernetes-version string     默认值:"stable-1"
为控制平面选择一个特定的 Kubernetes 版本。
--node-name string
指定节点的名称。
--pod-network-cidr string
指明 pod 网络可以使用的 IP 地址段。如果设置了这个参数,控制平面将会为每一个节点自动分配 CIDRs。
--service-cidr string     默认值:"10.96.0.0/12"
为服务的虚拟 IP 地址另外指定 IP 地址段
--service-dns-domain string     默认值:"cluster.local"
为服务另外指定域名,例如:"myorg.internal"。
--skip-certificate-key-print
不要打印用于加密控制平面证书的密钥。
--skip-phases stringSlice
要跳过的阶段列表
--skip-token-print
跳过打印 'kubeadm init' 生成的默认引导令牌。
--token string
这个令牌用于建立控制平面节点与工作节点间的双向通信。格式为 [a-z0-9]{6}\.[a-z0-9]{16} - 示例:abcdef.0123456789abcdef
--token-ttl duration     默认值:24h0m0s
令牌被自动删除之前的持续时间(例如 1 s,2 m,3 h)。如果设置为 '0',则令牌将永不过期
--upload-certs
将控制平面证书上传到 kubeadm-certs Secret。

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.31 -

概要

使用此命令可以调用 init 工作流程的单个阶段

选项

-h, --help
phase 操作的帮助命令

继承于父命令的选择项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.32 -

概要

此命令并非设计用来单独运行。请参阅可用子命令列表。

kubeadm init phase addon [flags]

选项

-h, --help
addon 操作的帮助命令

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.33 -

概要

安装所有插件(addon)

kubeadm init phase addon all [flags]

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则将使用默认网络接口。
--apiserver-bind-port int32     默认值:6443
API 服务器绑定的端口。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--feature-gates string
一组键值对(key=value),描述了各种特征。选项包括:
IPv6DualStack=true|false (ALPHA - 默认值=false)
-h, --help
--image-repository string     默认值:"k8s.gcr.io"
选择用于拉取控制平面镜像的容器仓库
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--pod-network-cidr string
指定 Pod 网络的 IP 地址范围。如果已设置,控制平面将自动为每个节点分配 CIDR。
--service-cidr string     默认值:"10.96.0.0/12"
为服务 VIP 使用 IP 地址的其他范围。
--service-dns-domain string     默认值:"cluster.local"
为服务使用其他域名,例如 "myorg.internal"。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.34 -

概要

通过 API 服务器安装 CoreDNS 附加组件。请注意,即使 DNS 服务器已部署,在安装 CNI 之前 DNS 服务器不会被调度执行。

kubeadm init phase addon coredns [flags]

选项

--config string
kubeadm 配置文件的路径。
--feature-gates string
一组用来描述各种功能特性的键值(key=value)对。选项是:
IPv6DualStack=true|false (ALPHA - 默认值=false)
-h, --help
coredns 操作的帮助命令
--image-repository string     默认值:"k8s.gcr.io"
选择用于拉取控制平面镜像的容器仓库
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--service-cidr string     默认值:"10.96.0.0/12"
为服务 VIP 选择 IP 地址范围。
--service-dns-domain string     默认值:"cluster.local"
服务使用其它的域名,例如:"myorg.internal"。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.35 -

概要

通过 API 服务器安装 kube-proxy 附加组件。

kubeadm init phase addon kube-proxy [flags]

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则将使用默认网络接口。
--apiserver-bind-port int32     默认值: 6443
API 服务器绑定的端口。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
-h, --help
kube-proxy 操作的帮助命令
--image-repository string     默认值:"k8s.gcr.io"
选择用于拉取控制平面镜像的容器仓库
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--pod-network-cidr string
指定 Pod 网络的 IP 地址范围。如果已设置,控制平面将自动为每个节点分配 CIDR。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.36 -

概要

启动引导令牌(bootstrap token)用于在即将加入集群的节点和控制平面节点之间建立双向信任。

该命令使启动引导令牌(bootstrap token)所需的所有配置生效,然后创建初始令牌。

kubeadm init phase bootstrap-token [flags]

示例

# 进行所有引导令牌配置,并创建一个初始令牌,功能上与 kubeadm init 生成的令牌等效。
kubeadm init phase bootstrap-token

选项

--config string
kubeadm 配置文件的路径。
-h, --help
bootstrap-token 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--skip-token-print
跳过打印 'kubeadm init' 生成的默认引导令牌。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.37 -

概要

此命令并非设计用来单独运行。请参阅可用子命令列表。

kubeadm init phase certs [flags]

选项

-h, --help
certs 操作的帮助命令

从父指令中继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.38 -

概要

生成所有证书

kubeadm init phase certs all [flags]

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,将使用默认网络接口。
--apiserver-cert-extra-sans stringSlice
用于 API 服务器服务证书的可选额外替代名称(SAN)。可以同时使用 IP 地址和 DNS 名称。
--cert-dir string     默认值:"/etc/kubernetes/pki"
证书的存储路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
-h, --help
all 操作的帮助命令
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--service-cidr string     默认值:"10.96.0.0/12"
VIP 服务使用其它的 IP 地址范围。
--service-dns-domain string     默认值:"cluster.local"
服务使用其它的域名,例如:"myorg.internal"。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.39 -

概要

生成 apiserver 用于访问 etcd 的证书,并将其保存到 apiserver-etcd-client.cert 和 apiserver-etcd-client.key 文件中。

如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。

Alpha 免责声明:此命令当前为 Alpha 功能。

kubeadm init phase certs apiserver-etcd-client [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
证书的存储路径。
--config string
kubeadm 配置文件的路径。
-h, --help
apiserver-etcd-client 操作的帮助命令
--kubernetes-version string     默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.40 -

概要

生成供 API 服务器连接 kubelet 的证书,并将其保存到 apiserver-kubelet-client.cert 和 apiserver-kubelet-client.key 文件中。

如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。

Alpha 免责声明:此命令当前为 Alpha 功能。

kubeadm init phase certs apiserver-kubelet-client [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件路径。
-h, --help
apiserver-kubelet-client 操作的帮助命令
--kubernetes-version string     默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。

继承于父命令的选项

--rootfs string
[实验] 指向宿主机上的 '实际' 根文件系统的路径。

1.41 -

概要

生成用于服务 Kubernetes API 的证书,并将其保存到 apiserver.cert 和 apiserver.key 文件中。

默认 SAN 是 kubernetes、kubernetes.default、kubernetes.default.svc、kubernetes.default.svc.cluster.local、10.96.0.1、127.0.0.1。

如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。

Alpha 免责声明:此命令当前为 Alpha 功能。

kubeadm init phase certs apiserver [flags]

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
--apiserver-cert-extra-sans stringSlice
用于 API Server 服务证书的可选附加主体备用名称(SAN)。可以是 IP 地址和 DNS 名称。
--cert-dir string     默认值:"/etc/kubernetes/pki"
证书的存储路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
-h, --help
apiserver 操作的帮助命令
--kubernetes-version string     默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。
--service-cidr string     默认值:"10.96.0.0/12"
指定服务 VIP 可使用的其他 IP 地址段。
--service-dns-domain string     默认值:"cluster.local"
为服务使用其他域名,例如 "myorg.internal"。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.42 -

概要

生成自签名的 Kubernetes CA 以提供其他 Kubernetes 组件的身份,并将其保存到 ca.cert 和 ca.key 文件中。

如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。

Alpha 免责声明:此命令当前为 Alpha 功能。

kubeadm init phase certs ca [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
证书的存储路径。
--config string
kubeadm 配置文件的路径。
-h, --help
ca 操作的帮助命令
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.43 -

概要

生成用于为 etcd 设置身份的自签名 CA,并将其保存到 etcd/ca.cert 和 etcd/ca.key 文件中。

如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。

Alpha 免责声明:此命令当前为 Alpha 功能。

kubeadm init phase certs etcd-ca [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
证书的存储路径。
--config string
kubeadm 配置文件的路径。
-h, --help
etcd-ca 操作的帮助命令
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.44 -

概要

生成用于 etcd 健康检查的活跃性探针的证书,并将其保存到 healthcheck-client.cert 和 etcd/healthcheck-client.key 文件中。

如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。

Alpha 免责声明:此命令当前为 alpha 功能。

kubeadm init phase certs etcd-healthcheck-client [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
证书存储的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
etcd-healthcheck-client 操作的帮助命令
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.45 -

概要

生成 etcd 节点相互通信的证书,并将其保存到 etcd/peer.cert 和 etcd/peer.key 文件中。

默认 SAN 为 localhost、127.0.0.1、127.0.0.1、:: 1

如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。

Alpha 免责声明:此命令当前为 alpha 功能。

kubeadm init phase certs etcd-peer [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
etcd-peer 操作的帮助命令
--kubernetes-version string     默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.46 -

概要

生成用于提供 etcd 服务的证书,并将其保存到 etcd/server.cert 和 etcd/server.key 文件中。

默认 SAN 为 localhost、127.0.0.1、127.0.0.1、:: 1

如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。

Alpha 免责声明:此命令当前为 alpha 功能。

kubeadm init phase certs etcd-server [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
etcd-server 操作的帮助命令
--kubernetes-version string     默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.47 -

概要

生成自签名 CA 来提供前端代理的身份,并将其保存到 front-proxy-ca.cert 和 front-proxy-ca.key 文件中。

如果两个文件都已存在,kubeadm 将跳过生成步骤并将使用现有文件。

Alpha 免责声明:此命令目前是 alpha 阶段。

kubeadm init phase certs front-proxy-ca [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
front-proxy-ca 操作的帮助命令
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.48 -

概要

为前端代理客户端生成证书,并将其保存到 front-proxy-client.cert 和 front-proxy-client.key 文件中。 如果两个文件都已存在,kubeadm 将跳过生成步骤并将使用现有文件。 Alpha 免责声明:此命令目前是 alpha 阶段。

kubeadm init phase certs front-proxy-client [flags]

选项

--cert-dir string     默认:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
front-proxy-client 操作的帮助命令
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.49 -

概要

生成用于签名 service account 令牌的私钥及其公钥,并将其保存到 sa.key 和 sa.pub 文件中。如果两个文件都已存在,则 kubeadm 会跳过生成步骤,而将使用现有文件。

Alpha 免责声明:此命令当前为 alpha 阶段。

kubeadm init phase certs sa [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
-h, --help
sa 操作的帮助命令

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.50 -

概要

此命令并非设计用来单独运行。请参阅可用子命令列表。

kubeadm init phase control-plane [flags]

选项

-h, --help
control-plane 操作的帮助命令

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.51 -

概要

生成所有的静态 Pod 清单文件

kubeadm init phase control-plane all [flags]

示例

# 为控制平面组件生成静态 Pod 清单文件,其功能等效于 kubeadm init 生成的文件。
kubeadm init phase control-plane all

# 使用从某配置文件中读取的选项为生成静态 Pod 清单文件。
kubeadm init phase control-plane all --config config.yaml

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,将使用默认的网络接口。
--apiserver-bind-port int32     默认值:6443
API 服务器要绑定的端口。
--apiserver-extra-args mapStringString
形式为 <flagname>=<value> 的一组额外参数,用来传递给 API 服务器, 或者覆盖其默认配置值
--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面选择一个稳定的 IP 地址或者 DNS 名称。
--controller-manager-extra-args mapStringString
一组形式为 <flagname>=<value> 的额外参数,用来传递给控制管理器(Controller Manager) 或覆盖其默认设置值
--experimental-patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录。 例如,"kube-apiserver0+merge.yaml" 或者 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,分别与 kubectl 所支持的 patch 格式相匹配。默认的 "patchtype" 是 "strategic"。 "extension" 必须是 "json" 或 "yaml"。 "suffix" 是一个可选的字符串,用来确定按字母顺序排序时首先应用哪些 patch。
--feature-gates string
一组用来描述各种特性门控的键值(key=value)对。选项是:
IPv6DualStack=true|false (ALPHA - 默认=false)
PublicKeysECDSA=true|false (ALPHA - 默认=false)
-h, --help
all 操作的帮助命令
--image-repository string     默认值:"k8s.gcr.io"
选择用于拉取控制平面镜像的容器仓库
--kubernetes-version string     默认值:"stable-1"
为控制平面选择指定的 Kubernetes 版本。
--pod-network-cidr string
指定 Pod 网络的 IP 地址范围。如果设置了此标志,控制平面将自动地为每个节点分配 CIDR。
--scheduler-extra-args mapStringString
一组形式为 <flagname>=<value> 的额外参数,用来传递给调度器(Scheduler) 或覆盖其默认设置值

传递给调度器(scheduler)一组额外的参数或者以 <flagname>=<value> 形式覆盖其默认值。

--service-cidr string     默认值:"10.96.0.0/12"
为服务 VIP 选择 IP 地址范围。

从父指令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机的根文件系统的路径。

1.52 -

概要

生成 kube-apiserver 静态 Pod 清单

kubeadm init phase control-plane apiserver [flags]

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,将使用默认网络接口。
--apiserver-bind-port int32     默认值: 6443
要绑定到 API 服务器的端口。
--apiserver-extra-args mapStringString
一组 <flagname>=<value> 形式的额外参数,用来传递给 API 服务器 或者覆盖其默认参数配置
--cert-dir string     默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
包含名为 "target[suffix][+patchtype].extension" 的文件的目录。 例如,"kube-apiserver0+merge.yaml" 或者 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,分别与 kubectl 所支持的 patch 格式相匹配。默认的 "patchtype" 是 "strategic"。 "extension" 必须是 "json" 或 "yaml"。 "suffix" 是一个可选的字符串,用来确定按字母顺序排序时首先应用哪些 patch。
--feature-gates string
一组键值对,用于描述各种功能特性的特性门控。选项是:
IPv6DualStack=true|false (ALPHA - 默认=false)
PublicKeysECDSA=true|false (ALPHA - 默认=false)
-h, --help
apiserver 操作的帮助命令
--image-repository string     默认值:"k8s.gcr.io"
选择要从中拉取控制平面镜像的容器仓库
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本
--service-cidr string     默认值:"10.96.0.0/12"
指定服务 VIP 使用 IP 地址的其他范围。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统路径。

1.53 -

概要

生成 kube-controller-manager 静态 Pod 清单

kubeadm init phase control-plane controller-manager [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--controller-manager-extra-args mapStringString
一组 <flagname>=< 形式的额外参数,传递给控制器管理器(Controller Manager) 或者覆盖其默认配置值
包含名为 "target[suffix][+patchtype].extension" 的文件的目录。 例如,"kube-apiserver0+merge.yaml" 或者 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,分别与 kubectl 所支持的 patch 格式相匹配。默认的 "patchtype" 是 "strategic"。 "extension" 必须是 "json" 或 "yaml"。 "suffix" 是一个可选的字符串,用来确定按字母顺序排序时首先应用哪些 patch。
-h, --help
controller-manager 操作的帮助命令
--image-repository string     默认值:"k8s.gcr.io"
选择要从中拉取控制平面镜像的容器仓库
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--pod-network-cidr string
指定 Pod 网络的 IP 地址范围。如果设置,控制平面将自动为每个节点分配 CIDR。

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.54 -

概要

生成 kube-scheduler 静态 Pod 清单

kubeadm init phase control-plane scheduler [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--experimental-patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录。 例如,"kube-apiserver0+merge.yaml" 或者 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,分别与 kubectl 所支持的 patch 格式相匹配。默认的 "patchtype" 是 "strategic"。 "extension" 必须是 "json" 或 "yaml"。 "suffix" 是一个可选的字符串,用来确定按字母顺序排序时首先应用哪些 patch。
-h, --help
scheduler 操作的帮助命令
--image-repository string     默认值:"k8s.gcr.io"
选择要从中拉取控制平面镜像的容器仓库
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--scheduler-extra-args mapStringString
一组 <flagname>=<value> 形式的额外参数,用来传递给调度器 或者覆盖其默认参数配置

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.55 -

概要

此命令并非设计用来单独运行。请参阅可用子命令列表。

kubeadm init phase etcd [flags]

选项

-h, --help
etcd 操作的帮助命令

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.56 -

概要

为本地单节点 etcd 实例生成静态 Pod 清单文件

kubeadm init phase etcd local [flags]

示例

# 为 etcd 生成静态 Pod 清单文件,其功能等效于 kubeadm init 生成的文件。
kubeadm init phase etcd local

# 使用从配置文件读取的选项为 etcd 生成静态 Pod 清单文件。
kubeadm init phase etcd local --config config.yaml

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--experimental-patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。 例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。 默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。 "suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
-h, --help
local 操作的帮助命令
--image-repository string     默认值:"k8s.gcr.io"
选择要从中拉取控制平面镜像的容器仓库

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.57 -

概要

此命令并非设计用来单独运行。请阅读可用子命令列表。

kubeadm init phase kubeconfig [flags]

选项

-h, --help
kubeconfig 操作的帮助命令

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.58 -

概要

为管理员和 kubeadm 本身生成 kubeconfig 文件,并将其保存到 admin.conf 文件中。

kubeadm init phase kubeconfig admin [flags]

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
--apiserver-bind-port int32     默认值:6443
要绑定到 API 服务器的端口。
--cert-dir string     默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
-h, --help
admin 操作的帮助命令
--kubeconfig-dir string     默认值:"/etc/kubernetes"
kubeconfig 文件的保存路径。
--kubernetes-version string     默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.59 -

概要

生成所有 kubeconfig 文件

kubeadm init phase kubeconfig all [flags]

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果没有设置,将使用默认的网络接口。
--apiserver-bind-port int32     默认值:6443
要绑定到 API 服务器的端口。
--cert-dir string     默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
-h, --help
all 操作的帮助命令
--kubeconfig-dir string     默认值:"/etc/kubernetes"
kubeconfig 文件的保存路径。
--kubernetes-version string     默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。
--node-name string
指定节点名称。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.60 -

概要

生成控制器管理器要使用的 kubeconfig 文件,并保存到 controller-manager.conf 文件中。

kubeadm init phase kubeconfig controller-manager [flags]

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
--apiserver-bind-port int32     默认值:6443
要绑定到 API 服务器的端口。
--cert-dir string     默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
-h, --help
controller-manager 操作的帮助命令
--kubeconfig-dir string     默认值:"/etc/kubernetes"
kubeconfig 文件的保存路径。
--kubernetes-version string     默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。

继承于父命令的选项

--rootfs 字符串
[实验] 到 '真实' 主机根文件系统的路径。

1.61 -

概要

生成 kubelet 要使用的 kubeconfig 文件,并将其保存到 kubelet.conf 文件。

请注意,该操作目的是应用于引导集群。在控制平面启动之后,应该从 CSR API 请求所有 kubelet 凭据。

kubeadm init phase kubeconfig kubelet [flags]

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
--apiserver-bind-port int32     默认值:6443
要绑定到 API 服务器的端口。
--cert-dir string     默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
-h, --help
kubelet 操作的帮助命令
--kubeconfig-dir string     默认值:"/etc/kubernetes"
kubeconfig 文件的保存路径。
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--node-name string
指定节点的名称。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.62 -

概要

生成调度器(scheduler)要使用的 kubeconfig 文件,并保存到 scheduler.conf 文件中。

kubeadm init phase kubeconfig scheduler [flags]

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
--apiserver-bind-port int32     默认值:6443
要绑定到 API 服务器的端口。
--cert-dir string     默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
-h, --help
scheduler 操作的帮助命令
--kubeconfig-dir string     默认值:"/etc/kubernetes"
kubeconfig 文件的保存路径。
--kubernetes-version string     默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.63 -

TLS 引导后更新与 kubelet 相关的设置

kubeadm init phase kubelet-finalize [flags]

示例

  # 在 TLS 引导后更新与 kubelet 相关的设置
  kubeadm init phase kubelet-finalize all --config

选项

-h, --help
kubelet-finalize 操作的帮助命令

继承于父命令的选项

--rootfs string
[实验] 到'真实'主机根文件系统的路径。

1.64 -

运行所有 kubelet-finalize 阶段

kubeadm init phase kubelet-finalize all [flags]

示例

  # 在 TLS 引导后更新与 kubelet 相关的设置
  kubeadm init phase kubelet-finalize all --config

选项

--cert-dir string     默认值: "/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
all 操作的帮助命令

继承于父命令的选项

--rootfs string
[实验] 到'真实'主机根文件系统的路径。

1.65 -

启用 kubelet 客户端证书轮换

kubeadm init phase kubelet-finalize experimental-cert-rotation [flags]

选项

--cert-dir string     Default: "/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
experimental-cert-rotation 操作的帮助命令

继承于父命令的选项

--rootfs string
[实验] 到'真实'主机根文件系统的路径。

1.66 -

概要

使用 kubelet 配置文件编写一个文件,并使用特定节点的 kubelet 设置编写一个环境文件,然后(重新)启动 kubelet。

kubeadm init phase kubelet-start [flags]

示例

# 从 InitConfiguration 文件中写入带有 kubelet 参数的动态环境文件。
kubeadm init phase kubelet-start --config config.yaml

选项

--config string
kubeadm 配置文件的路径。
--cri-socket string
连接到 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测该值;仅当安装了多个 CRI 或具有非标准 CRI 套接字时,才使用此选项。
-h, --help
kubelet-start 操作的帮助命令
--node-name string
指定节点名称。

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.67 -

概要

标记 Node 节点为控制平面节点

kubeadm init phase mark-control-plane [flags]

示例

# 将控制平面标签和污点应用于当前节点,其功能等效于 kubeadm init执行的操作。
kubeadm init phase mark-control-plane --config config.yml

# 将控制平面标签和污点应用于特定节点
kubeadm init phase mark-control-plane --node-name myNode

选项

--config string
kubeadm 配置文件的路径。
-h, --help
mark-control-plane 操作的帮助命令
--node-name string
指定节点名称。

从父命令继承的选项

--rootfs 字符串
[实验] 到 '真实' 主机根文件系统的路径。

1.68 -

概要

运行 kubeadm init 前的启动检查。

kubeadm init phase preflight [flags]

案例

# 使用配置文件对 kubeadm init 进行启动检查。
kubeadm init phase preflight --config kubeadm-config.yml

选项

--config string
kubeadm 配置文件的路径。
-h, --help
preflight 操作的帮助命令
--ignore-preflight-errors stringSlice
错误将显示为警告的检查列表:例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.69 -

概要

此命令并非设计用来单独运行。请参阅可用子命令列表。

kubeadm init phase upload-certs [flags]

选项

--certificate-key string
用于加密 kubeadm-certs Secret 中的控制平面证书的密钥。
--config string
kubeadm 配置文件的路径。
-h, --help
upload-certs 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
用来与集群通信的 kubeconfig 文件。 如果此标志未设置,则可以在一组标准的位置搜索现有的 kubeconfig 文件。
--skip-certificate-key-print
不要打印输出用于加密控制平面证书的密钥。
--upload-certs
将控制平面证书上传到 kubeadm-certs Secret。

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.70 -

概要

此命令并非设计用来单独运行。请参阅可用的子命令列表。

kubeadm init phase upload-config [flags]

选项

-h, --help
upload-config 操作的帮助命令

从父命令中继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.71 -

概要

将所有配置上传到 ConfigMap

kubeadm init phase upload-config all [flags]

选项

--config string
kubeadm 配置文件的路径。
-h, --help
all 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.72 -

概要

将 kubeadm ClusterConfiguration 上传到 kube-system 命名空间中名为 kubeadm-config 的 ConfigMap 中。 这样就可以正确配置系统组件,并在升级时提供无缝的用户体验。

另外,可以使用 kubeadm 配置。

kubeadm init phase upload-config kubeadm [flags]

示例

# 上传集群配置
kubeadm init phase upload-config --config=myConfig.yaml

选项

--config string
kubeadm 配置文件的路径。
-h, --help
kubeadm 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.73 -

概要

将从 kubeadm InitConfiguration 对象提取的 kubelet 配置上传到集群中 kubelet-config-1.X 形式的 ConfigMap,其中 X 是当前(API 服务器)Kubernetes 版本的次要版本。

kubeadm init phase upload-config kubelet [flags]

示例

# 将 kubelet 配置从 kubeadm 配置文件上传到集群中的 ConfigMap。
kubeadm init phase upload-config kubelet --config kubeadm.yaml

选项

--config string
到 kubeadm 配置文件的路径。
-h, --help
kubelet 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该标签,则可以通过一组标准路径来寻找已有的 kubeconfig 文件。

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.74 -

摘要

当节点加入 kubeadm 初始化的集群时,我们需要建立双向信任。 这个过程可以分解为发现(让待加入节点信任 Kubernetes 控制平面节点)和 TLS 引导(让Kubernetes 控制平面节点信任待加入节点)两个部分。

有两种主要的发现方案。 第一种方法是使用共享令牌和 API 服务器的 IP 地址。 第二种是提供一个文件 - 标准 kubeconfig 文件的一个子集。 该文件可以是本地文件,也可以通过 HTTPS URL 下载。 格式是 kubeadm join --discovery-token abcdef.1234567890abcdef 1.2.3.4:6443kubeadm join--discovery-file path/to/file.conf 或者kubeadm join --discovery-file https://url/file.conf。 只能使用其中一种。 如果发现信息是从 URL 加载的,必须使用 HTTPS。 此外,在这种情况下,主机安装的 CA 包用于验证连接。

如果使用共享令牌进行发现,还应该传递 --discovery-token-ca-cert-hash 参数来验证 Kubernetes 控制平面节点提供的根证书颁发机构(CA)的公钥。 此参数的值指定为 "<hash-type>:<hex-encoded-value>",其中支持的哈希类型为 "sha256"。哈希是通过 Subject Public Key Info(SPKI)对象的字节计算的(如 RFC7469)。 这个值可以从 "kubeadm init" 的输出中获得,或者可以使用标准工具进行计算。 可以多次重复 --discovery-token-ca-cert-hash 参数以允许多个公钥。

如果无法提前知道 CA 公钥哈希,则可以通过 --discovery-token-unsafe-skip-ca-verification 参数禁用此验证。 这削弱了kubeadm 安全模型,因为其他节点可能会模仿 Kubernetes 控制平面节点。

TLS 引导机制也通过共享令牌驱动。 这用于向 Kubernetes 控制平面节点进行临时的身份验证,以提交本地创建的密钥对的证书签名请求(CSR)。 默认情况下,kubeadm 将设置 Kubernetes 控制平面节点自动批准这些签名请求。 这个令牌通过 --tls-bootstrap-token abcdef.1234567890abcdef 参数传入。

通常两个部分会使用相同的令牌。 在这种情况下可以使用 --token 参数,而不是单独指定每个令牌。

"join [api-server-endpoint]" 命令执行下列阶段:

preflight              Run join pre-flight checks
control-plane-prepare  Prepare the machine for serving a control plane
  /download-certs        [EXPERIMENTAL] Download certificates shared among control-plane nodes from the kubeadm-certs Secret
  /certs                 Generate the certificates for the new control plane components
  /kubeconfig            Generate the kubeconfig for the new control plane components
  /control-plane         Generate the manifests for the new control plane components
kubelet-start          Write kubelet settings, certificates and (re)start the kubelet
control-plane-join     Join a machine as a control plane instance
  /etcd                  Add a new local etcd member
  /update-status         Register the new control-plane node into the ClusterStatus maintained in the kubeadm-config ConfigMap
  /mark-control-plane    Mark a node as a control-plane
kubeadm join [api-server-endpoint] [flags]

选项

--apiserver-advertise-address string
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--apiserver-bind-port int32     默认值: 6443
如果节点应该托管新的控制平面实例,则为 API 服务器要绑定的端口。
--certificate-key string
使用此密钥可以解密由 init 上传的证书 secret。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例
--cri-socket string
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;仅当安装了多个 CRI 或具有非标准 CRI 插槽时,才使用此选项。
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash stringSlice
对基于令牌的发现,验证根 CA 公钥是否与此哈希匹配 (格式: "<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
--experimental-patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。 例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。 默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。 "suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
-h, --help
join 操作的帮助命令
--ignore-preflight-errors stringSlice
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--node-name string
指定节点的名称
--skip-phases stringSlice
要跳过的阶段列表
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.75 -

概要

使用此命令来调用 join 工作流程的某个阶段

选项

-h, --help
phase 操作的帮助命令

从父命令中继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.76 -

概要

添加作为控制平面实例的机器

kubeadm join phase control-plane-join [flags]

示例

# 将机器作为控制平面实例加入
kubeadm join phase control-plane-join all

选项

-h, --help
control-plane-join 操作的帮助命令

从父命令中继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.77 -

概要

添加作为控制平面实例的机器

kubeadm join phase control-plane-join all [flags]

选项

--apiserver-advertise-address string
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--config string
kubeadm 配置文件的路径。
--experimental-control-plane
在此节点上创建一个新的控制平面实例
-h, --help
all 操作的帮助命令
--node-name string
指定节点名称。

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.78 -

概要

添加新的本地 etcd 成员

kubeadm join phase control-plane-join etcd [flags]

选项

--apiserver-advertise-address string
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例
--experimental-patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。 例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。 "patchtype" 可以是"strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。 默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。 "suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
-h, --help
etcd 操作的帮助命令
--node-name string
指定节点的名称

从父命令中继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.79 -

概要

将 Node 节点标记为控制平面节点

kubeadm join phase control-plane-join mark-control-plane [flags]

选项

--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例
-h, --help
mark-control-plane 操作的帮助命令
--node-name string
指定节点的名称

从父命令中继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.80 -

概要

将新的控制平面节点注册到 kubeadm-config ConfigMap 维护的 ClusterStatus 中

kubeadm join phase control-plane-join update-status [flags]

选项

--apiserver-advertise-address string
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例
-h, --help
update-status 操作的帮助命令
--node-name string
指定节点名称。

从父命令中继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

1.81 -

概要

准备为控制平面服务的机器

kubeadm join phase control-plane-prepare [flags]

示例

# 准备为控制平面服务的机器
kubeadm join phase control-plane-prepare all

选项

-h, --help
control-plane-prepare 操作的帮助命令

从父命令中继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.82 -

概要

准备为控制平面服务的机器

kubeadm join phase control-plane-prepare all [api-server-endpoint] [flags]

选项

--apiserver-advertise-address string
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--apiserver-bind-port int32     默认值:6443
如果该节点托管一个新的控制平面实例,则为 API 服务器要绑定的端口。
--certificate-key string
使用此密钥解密由 init 上传的证书 secrets。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash stringSlice
对于基于令牌的发现,请验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
--experimental-patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。 例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。 默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。 "suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
-h, --help
all 操作的帮助命令
--node-name string
指定节点名称。
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.83 -

概要

为新的控制平面组件生成证书

kubeadm join phase control-plane-prepare certs [api-server-endpoint] [flags]

选项

--apiserver-advertise-address string
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash stringSlice
对于基于令牌的发现,请验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
-h, --help
certs 操作的帮助命令
--node-name string
指定节点名称。
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.84 -

概要

为新的控制平面组件生成清单(manifest)

kubeadm join phase control-plane-prepare control-plane [flags]

选项

--apiserver-advertise-address string
对于将要托管新的控制平面实例的节点,指定 API 服务器将公布的其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--apiserver-bind-port int32     默认值:6443
针对将要托管新的控制平面实例的节点,设置 API 服务器要绑定的端口。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例
--experimental-patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。 例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。 默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。 "suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
-h, --help
control-plane 操作的帮助命令

从父命令中继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.85 -

概要

[实验]从 kubeadm-certs Secret 下载控制平面节点之间共享的证书

kubeadm join phase control-plane-prepare download-certs [api-server-endpoint] [flags]

选项

--certificate-key string
使用此密钥可以解密由 init 上传的证书 secret。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash stringSlice
对于基于令牌的发现,请验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
-h, --help
kubeconfig 操作的帮助命令
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。

从父命令中继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.86 -

概要

为新的控制平面组件生成 kubeconfig

kubeadm join phase control-plane-prepare kubeconfig [api-server-endpoint] [flags]

选项

--certificate-key string
使用此密钥可以解密由 init 上传的证书 secret。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash stringSlice
对于基于令牌的发现,请验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
-h, --help
kubeconfig 操作的帮助命令
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。

从父命令中继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.87 -

概要

生成一个包含 KubeletConfiguration 的文件和一个包含特定于节点的 kubelet 配置的环境文件,然后(重新)启动 kubelet。

kubeadm join phase kubelet-start [api-server-endpoint] [flags]

选项

--config string
kubeadm 配置文件的路径。
--cri-socket string
提供给 CRI 套接字建立连接的路径。如果为空,则 kubeadm 将尝试自动检测该值;仅当安装了多个 CRI 或具有非标准 CRI 套接字时,才使用此选项。
--discovery-file string
For file-based discovery, a file or URL from which to load cluster information. 对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash stringSlice
对于基于令牌的发现,验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
-h, --help
kubelet-start 操作的帮助命令
--node-name string
指定节点名称。
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.88 -

概要

运行 kubeadm join 命令添加节点前检查。

kubeadm join phase preflight [api-server-endpoint] [flags]

示例

# 使用配置文件运行 kubeadm join 命令添加节点前检查。
kubeadm join phase preflight --config kubeadm-config.yml

选项

--apiserver-advertise-address string
对于将要托管新的控制平面实例的节点,指定 API 服务器将公布的其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--apiserver-bind-port int32     默认值:6443
针对将要托管新的控制平面实例的节点,设置 API 服务器要绑定的端口。
--certificate-key string
使用此密钥可以解密由 `init` 操作上传的证书 secret。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例
--cri-socket string
提供给 CRI 套接字建立连接的路径。如果为空,则 kubeadm 将尝试自动检测该值;仅当安装了多个 CRI 或具有非标准 CRI 套接字时,才使用此选项。
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash stringSlice
对于基于令牌的发现,验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
-h, --help
preflight 操作的帮助命令
--ignore-preflight-errors stringSlice
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--node-name string
指定节点名称。
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.89 -

概要

尽最大努力还原通过 'kubeadm init' 或者 'kubeadm join' 操作对主机所做的更改

"reset" 命令执行以下阶段:

preflight              Run reset pre-flight checks
update-cluster-status  Remove this node from the ClusterStatus object.
remove-etcd-member     Remove a local etcd member.
cleanup-node           Run cleanup node.
kubeadm reset [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的目录路径。如果已指定,则需要清空此目录。
--cri-socket string
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;仅当安装了多个CRI 或具有非标准 CRI 插槽时,才使用此选项。
-f, --force
在不提示确认的情况下重置节点。
-h, --help
reset 操作的帮助命令
--ignore-preflight-errors stringSlice
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该标志,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--skip-phases stringSlice
要跳过的阶段列表

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.90 -

概要

使用此命令来调用 reset 工作流程的某个阶段

选项

-h, --help
phase 操作的帮助命令

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.91 -

概要

执行 cleanup node(清理节点)操作。

kubeadm reset phase cleanup-node [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的目录路径。如果已指定,则需要清空此目录。
--cri-socket string
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;仅当安装了多个CRI 或具有非标准 CRI 插槽时,才使用此选项。
-h, --help
cleanup-node 操作的帮助命令

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.92 -

概要

kubeadm reset(重置)前运行启动前检查。

kubeadm reset phase preflight [flags]

选项

-f, --force
在不提示确认的情况下重置节点。
-h, --help
preflight 操作的帮助命令
--ignore-preflight-errors stringSlice
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.93 -

概要

上传关于当前状态的配置,以便 'kubeadm upgrade' 以后可以知道如何配置升级后的集群。

kubeadm config upload [flags]

选项

-h, --help
upload 操作的帮助信息

从父命令继承的选项

--kubeconfig string     默认值: "/etc/kubernetes/admin.conf"
用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。
--rootfs string
[实验] 到'真实'主机根文件系统的路径。

1.94 -

概要

如果该节点是控制平面节点,从 ClusterStatus 对象中删除该节点。

kubeadm reset phase update-cluster-status [flags]

选项

-h, --help
update-cluster-status 操作的帮助命令

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.95 -

概要

此命令管理引导令牌(bootstrap token)。它是可选的,仅适用于高级用例。

简而言之,引导令牌(bootstrap token)用于在客户端和服务器之间建立双向信任。 当客户端(例如,即将加入集群的节点)需要时,可以使用引导令牌相信正在与之通信的服务器。 然后可以使用具有 “签名” 的引导令牌。

引导令牌还可以作为一种允许对 API 服务器进行短期身份验证的方法(令牌用作 API 服务器信任客户端的方式),例如用于执行 TLS 引导程序。

引导令牌准确来说是什么?

  • 它是位于 kube-system 命名空间中类型为 “bootstrap.kubernetes.io/token” 的一个 Secret。
  • 引导令牌的格式必须为 “[a-z0-9]{6}.[a-z0-9]{16}”,前一部分是公共令牌 ID,而后者是令牌秘钥,必须在任何情况下都保密!
  • 必须将 Secret 的名称命名为 “bootstrap-token-(token-id)”。

您可以在此处阅读有关引导令牌(bootstrap token)的更多信息: /docs/admin/bootstrap-tokens/

kubeadm token [flags]

选项

--dry-run
是否启用 `dry-run` 模式
-h, --help
token 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置,则搜索一组标准位置以查找现有 kubeconfig 文件。

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.96 -

概要

这个命令将为你创建一个引导令牌。 您可以设置此令牌的用途,"有效时间" 和可选的人性化的描述。

这里的 [token] 是指将要生成的实际令牌。 该令牌应该是一个通过安全机制生成的随机令牌,形式为 "[a-z0-9]{6}.[a-z0-9]{16}"。 如果没有给出 [token],kubeadm 将生成一个随机令牌。

kubeadm token create [token]

选项

--config string
kubeadm 配置文件的路径。
--description string
针对令牌用途的人性化的描述。
--groups stringSlice     默认值:[system:bootstrappers:kubeadm:default-node-token]
此令牌用于身份验证时将进行身份验证的其他组。必须匹配 "\\Asystem:bootstrappers:[a-z0-9:-]{0,255}[a-z0-9]\\z"
-h, --help
create 操作的帮助命令
--print-join-command
不仅仅打印令牌,而是打印使用令牌加入集群所需的完整 'kubeadm join' 参数。
--ttl duration     默认值:24h0m0s
令牌有效时间,超过该时间令牌被自动删除。(例如: 1s, 2m, 3h)。如果设置为 '0',令牌将永远不过期。
--usages stringSlice     默认值:[signing,authentication]
描述可以使用此令牌的方式。你可以多次使用 `--usages` 或者提供一个以逗号分隔的选项列表。合法选项有: [signing,authentication]

从父命令继承的选项

--dry-run
是否启用 `dry-run` 运行模式
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.97 -

概要

这个命令将为你删除指定的引导令牌列表。

[token-value] 是要删除的 "[a-z0-9]{6}.[a-z0-9]{16}" 形式的完整令牌或者是 "[a-z0-9]{6}" 形式的的令牌 ID。

kubeadm token delete [token-value] ...

选项

-h, --help
delete 操作的帮助命令

从父命令继承的选项

--dry-run
是否启用 `dry-run` 运行模式
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.98 -

概要

此命令将打印一个随机生成的可以被 "init" 和 "join" 命令使用的引导令牌。 您不必使用此命令来生成令牌。你可以自己设定,只要格式符合 "[a-z0-9]{6}.[a-z0-9]{16}"。这个命令提供是为了方便生成规定格式的令牌。 您也可以使用 "kubeadm init" 并且不指定令牌,该命令会生成一个令牌并打印出来。

kubeadm token generate [flags]

选项

-h, --help
generate 操作的帮助命令

从父命令继承的选项

--dry-run
是否启用 `dry-run` 运行模式
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.99 -

概要

此命令将为您列出所有的引导令牌。

kubeadm token list [flags]

选项

--allow-missing-template-keys     默认值:true
如果设置为 true,则在模板中缺少字段或哈希表的键时忽略模板中的任何错误。 仅适用于 golang 和 jsonpath 输出格式。
-o, --experimental-output string     默认值:"text"
输出格式:text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file 其中之一
-h, --help
list 操作的帮助命令

从父命令继承的选项

--dry-run
是否启用 `dry-run` 模式
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.100 -

概要

此命令能将集群平滑升级到新版本

kubeadm upgrade [flags]

选项

-h, --help
upgrade 操作的帮助命令

继承于父命令的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.101 -

概要

将 Kubernetes 集群升级到指定版本

kubeadm upgrade apply [version]

选项

--allow-experimental-upgrades
显示 Kubernetes 的不稳定版本作为升级替代方案,并允许升级到 Kubernetes 的 alpha/beta 或 RC 版本。
--allow-release-candidate-upgrades
显示 Kubernetes 的候选版本作为升级替代方案,并允许升级到 Kubernetes 的 RC 版本。
--certificate-renewal     Default: true
执行升级期间更改的组件所使用的证书的更新。
--config string
kubeadm 配置文件的路径。
--dry-run
不要更改任何状态,只输出要执行的操作。
--etcd-upgrade     默认值: true
执行 etcd 的升级。
--experimental-patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。 例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。 默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。 "suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
--feature-gates string
一组键值对,用于描述各种功能。选项包括:
IPv6DualStack=true|false (ALPHA - 默认=false)
PublicKeysECDSA=true|false (ALPHA - 默认=false)
-f, --force
强制升级,但可能无法满足某些要求。这也意味着非交互模式。
-h, --help
apply 操作的帮助命令
--ignore-preflight-errors stringSlice
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置标志,则在相关目录下搜索以查找现有 kubeconfig 文件。
--print-config
指定是否应打印将在升级中使用的配置文件。
-y, --yes
执行升级,不提示确认(非交互模式)。

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.102 -

概述

显示哪些差异将被应用于现有的静态 pod 资源清单。参考: kubeadm upgrade apply --dry-run

kubeadm upgrade diff [version] [flags]

选项

--api-server-manifest string     默认值:"/etc/kubernetes/manifests/kube-apiserver.yaml"
API服务器清单的路径
--config string
kubeadm 配置文件的路径
-c, --context-lines int     默认值:3
差异中有多少行上下文
--controller-manager-manifest string     默认值: "/etc/kubernetes/manifests/kube-controller-manager.yaml"
控制器清单的路径
-h, --help
帮助
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件,如果标志是未设置,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--scheduler-manifest string     默认值:"/etc/kubernetes/manifests/kube-scheduler.yaml"
调度程序清单的路径

从父命令继承的选项

--rootfs string
[EXPERIMENTAL] “真实”主机根文件系统的路径。

1.103 -

概要

升级集群中某个节点的命令

"node" 命令执行以下阶段:

preflight       执行节点升级前检查
control-plane   如果存在的话,升级部署在该节点上的管理面实例
kubelet-config  更新该节点上的 kubelet 配置
kubeadm upgrade node [flags]

选项

--certificate-renewal
对升级期间变化的组件所使用的证书执行更新。
--dry-run
不更改任何状态,只输出将要执行的操作。
--etcd-upgrade     默认值: true
执行 etcd 的升级。
--experimental-patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。 例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。 默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。 "suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
-h, --help
node 操作的帮助命令
--kubeconfig string     默认值: "/etc/kubernetes/admin.conf"
用于与集群交互的 kubeconfig 文件。如果参数未指定,将从一系列标准位置检索存在的 kubeconfig 文件。
--kubelet-version string
升级后 *期望的* kubelet 配置版本。如未指定,将使用 kubeadm-config ConfigMap 中的 KubernetesVersion
--skip-phases stringSlice
要跳过的阶段的列表

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.104 -

概要

使用此命令调用 node 工作流的某个阶段

选项

-h, --help
phase 操作的帮助命令

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.105 -

概要

升级部署在此节点上的控制平面实例,如果有的话

kubeadm upgrade node phase control-plane [flags]

选项

--certificate-renewal
更新在升级期间变更的组件使用的证书。
--dry-run
不改变任何状态,只输出将要执行的动作。
--etcd-upgrade     默认值: true
执行 etcd 的升级。
--experimental-patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。 例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。 默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。 "suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
-h, --help
control-plane 的帮助信息
--kubeconfig string     默认值: "/etc/kubernetes/admin.conf"
用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。

从父命令继承的选项

--rootfs string
[实验] 到'真实'主机根文件系统的路径。

1.106 -

从群集中 "kubelet-config-1.X" 的 ConfigMap 下载 kubelet 配置,其中 X 是kubelet 的次要版本。 kubeadm 使用 --kubelet-version 参数来确定所需的 kubelet 版本。

kubeadm upgrade node phase kubelet-config [flags]

选项

--dry-run
不改变任何状态,只输出将要执行的操作
-h, --help
配置操作的帮助信息
--kubeconfig string     默认值: "/etc/kubernetes/kubelet.conf"
用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。
--kubelet-version string
升级后的 kubelet 的*期望*版本。

从父命令继承的选项

--rootfs string
[实验] 到'真实'主机根文件系统的路径。

1.107 -

执行 kubeadm 升级节点的预检。

kubeadm upgrade node phase preflight [flags]

选项

-h, --help
preflight 操作的帮助命令
--ignore-preflight-errors stringSlice
错误将显示为警告的检查清单。示例:'IsPrivilegedUser,Swap'。值为'all'表示忽略所有检查的错误。

继承于父命令的选项

--rootfs string
[实验] 到'真实'主机根文件系统的路径。

1.108 -

概述

检查可升级到哪些版本,并验证您当前的集群是否可升级。 要跳过互联网检查,请传递可选的 [version] 参数

kubeadm upgrade plan [version] [flags]

选项

--allow-experimental-upgrades
显示不稳定版本的 Kubernetes 作为升级替代方案,并允许升级到 Kubernetes 的 Alpha/Beta/发行候选版本。
--allow-release-candidate-upgrades
显示 Kubernetes 的发行候选版本作为升级选择,并允许升级到 Kubernetes 的发行候选版本。
--config string
配置文件的路径。
--feature-gates string
一组描述各种特征特性门控的键值对。选项有:IPv6DualStack=true|false (ALPHA - default=false) PublicKeysECDSA=true|false (ALPHA - default=false)
-h, --help
帮助
--ignore-preflight-errors stringSlice
检查清单,其错误将显示为警告。 例如:“IsPrivilegedUser,Swap”。 值 “all” 忽略所有检查的错误。
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果标志为未设置,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--print-config
指定是否打印将在升级中使用的配置文件。

从父命令继承的选项

--rootfs string
[EXPERIMENTAL] “真实”主机根文件系统的路径。

1.109 -

概要

打印 kubeadm 的版本

kubeadm version [flags]

选项

-h, --help
version 操作的帮助命令
-o, --output string
输出格式;可用的选项有 'yaml', 'json' 和 'short'

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

1.110 -

此目录下的所有文件都是从其他仓库自动生成的。 不要人工编辑它们。 您必须在上游仓库中编辑它们

2 - kubeadm init

此命令初始化一个 Kubernetes 控制平面节点。

概要

运行此命令来搭建 Kubernetes 控制平面节点。

"init" 命令执行以下阶段:

preflight                    Run pre-flight checks
certs                        Certificate generation
  /ca                          Generate the self-signed Kubernetes CA to provision identities for other Kubernetes components
  /apiserver                   Generate the certificate for serving the Kubernetes API
  /apiserver-kubelet-client    Generate the certificate for the API server to connect to kubelet
  /front-proxy-ca              Generate the self-signed CA to provision identities for front proxy
  /front-proxy-client          Generate the certificate for the front proxy client
  /etcd-ca                     Generate the self-signed CA to provision identities for etcd
  /etcd-server                 Generate the certificate for serving etcd
  /etcd-peer                   Generate the certificate for etcd nodes to communicate with each other
  /etcd-healthcheck-client     Generate the certificate for liveness probes to healthcheck etcd
  /apiserver-etcd-client       Generate the certificate the apiserver uses to access etcd
  /sa                          Generate a private key for signing service account tokens along with its public key
kubeconfig                   Generate all kubeconfig files necessary to establish the control plane and the admin kubeconfig file
  /admin                       Generate a kubeconfig file for the admin to use and for kubeadm itself
  /kubelet                     Generate a kubeconfig file for the kubelet to use *only* for cluster bootstrapping purposes
  /controller-manager          Generate a kubeconfig file for the controller manager to use
  /scheduler                   Generate a kubeconfig file for the scheduler to use
kubelet-start                Write kubelet settings and (re)start the kubelet
control-plane                Generate all static Pod manifest files necessary to establish the control plane
  /apiserver                   Generates the kube-apiserver static Pod manifest
  /controller-manager          Generates the kube-controller-manager static Pod manifest
  /scheduler                   Generates the kube-scheduler static Pod manifest
etcd                         Generate static Pod manifest file for local etcd
  /local                       Generate the static Pod manifest file for a local, single-node local etcd instance
upload-config                Upload the kubeadm and kubelet configuration to a ConfigMap
  /kubeadm                     Upload the kubeadm ClusterConfiguration to a ConfigMap
  /kubelet                     Upload the kubelet component config to a ConfigMap
upload-certs                 Upload certificates to kubeadm-certs
mark-control-plane           Mark a node as a control-plane
bootstrap-token              Generates bootstrap tokens used to join a node to a cluster
kubelet-finalize             Updates settings relevant to the kubelet after TLS bootstrap
  /experimental-cert-rotation  Enable kubelet client certificate rotation
addon                        Install required addons for passing Conformance tests
  /coredns                     Install the CoreDNS addon to a Kubernetes cluster
  /kube-proxy                  Install the kube-proxy addon to a Kubernetes cluster
kubeadm init [flags]

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认网络接口。
--apiserver-bind-port int32     默认值:6443
API 服务器绑定的端口。
--apiserver-cert-extra-sans stringSlice
用于 API Server 服务证书的可选附加主题备用名称(SAN)。可以是 IP 地址和 DNS 名称。
--cert-dir string     默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--certificate-key string
用于加密 kubeadm-certs Secret 中的控制平面证书的密钥。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--cri-socket string
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;仅当安装了多个 CRI 或具有非标准 CRI 插槽时,才使用此选项。
--dry-run
不要应用任何更改;只是输出将要执行的操作。
--experimental-patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录路径。 例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。 默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。 "suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
--feature-gates string
一组用来描述各种功能特性的键值(key=value)对。选项是:
IPv6DualStack=true|false (ALPHA - default=false)
-h, --help
init 操作的帮助命令
--ignore-preflight-errors stringSlice
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--image-repository string     默认值:"k8s.gcr.io"
选择用于拉取控制平面镜像的容器仓库
--kubernetes-version string     默认值:"stable-1"
为控制平面选择一个特定的 Kubernetes 版本。
--node-name string
指定节点的名称。
--pod-network-cidr string
指明 pod 网络可以使用的 IP 地址段。如果设置了这个参数,控制平面将会为每一个节点自动分配 CIDRs。
--service-cidr string     默认值:"10.96.0.0/12"
为服务的虚拟 IP 地址另外指定 IP 地址段
--service-dns-domain string     默认值:"cluster.local"
为服务另外指定域名,例如:"myorg.internal"。
--skip-certificate-key-print
不要打印用于加密控制平面证书的密钥。
--skip-phases stringSlice
要跳过的阶段列表
--skip-token-print
跳过打印 'kubeadm init' 生成的默认引导令牌。
--token string
这个令牌用于建立控制平面节点与工作节点间的双向通信。格式为 [a-z0-9]{6}\.[a-z0-9]{16} - 示例:abcdef.0123456789abcdef
--token-ttl duration     默认值:24h0m0s
令牌被自动删除之前的持续时间(例如 1 s,2 m,3 h)。如果设置为 '0',则令牌将永不过期
--upload-certs
将控制平面证书上传到 kubeadm-certs Secret。

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

Init 命令的工作流程

kubeadm init 命令通过执行下列步骤来启动一个 Kubernetes 控制平面节点。

  1. 在做出变更前运行一系列的预检项来验证系统状态。一些检查项目仅仅触发警告, 其它的则会被视为错误并且退出 kubeadm,除非问题得到解决或者用户指定了 --ignore-preflight-errors=<错误列表> 参数。
  1. 生成一个自签名的 CA 证书来为集群中的每一个组件建立身份标识。 用户可以通过将其放入 --cert-dir 配置的证书目录中(默认为 /etc/kubernetes/pki) 来提供他们自己的 CA 证书以及/或者密钥。 APIServer 证书将为任何 --apiserver-cert-extra-sans 参数值提供附加的 SAN 条目,必要时将其小写。
  1. 将 kubeconfig 文件写入 /etc/kubernetes/ 目录以便 kubelet、控制器管理器和调度器用来连接到 API 服务器,它们每一个都有自己的身份标识,同时生成一个名为 admin.conf 的独立的 kubeconfig 文件,用于管理操作。
  1. 为 API 服务器、控制器管理器和调度器生成静态 Pod 的清单文件。假使没有提供一个外部的 etcd 服务的话,也会为 etcd 生成一份额外的静态 Pod 清单文件。

    静态 Pod 的清单文件被写入到 /etc/kubernetes/manifests 目录; kubelet 会监视这个目录以便在系统启动的时候创建 Pod。

    一旦控制平面的 Pod 都运行起来, kubeadm init 的工作流程就继续往下执行。

  1. 对控制平面节点应用标签和污点标记以便不会在它上面运行其它的工作负载。
  1. 生成令牌,将来其他节点可使用该令牌向控制平面注册自己。 如 kubeadm token 文档所述, 用户可以选择通过 --token 提供令牌。
  1. 为了使得节点能够遵照启动引导令牌TLS 启动引导 这两份文档中描述的机制加入到集群中,kubeadm 会执行所有的必要配置:

    • 创建一个 ConfigMap 提供添加集群节点所需的信息,并为该 ConfigMap 设置相关的 RBAC 访问规则。

    • 允许启动引导令牌访问 CSR 签名 API。

    • 配置自动签发新的 CSR 请求。

    更多相关信息,请查看 kubeadm join

  1. 通过 API 服务器安装一个 DNS 服务器 (CoreDNS) 和 kube-proxy 附加组件。 在 Kubernetes 版本 1.11 和更高版本中,CoreDNS 是默认的 DNS 服务器。 请注意,尽管已部署 DNS 服务器,但直到安装 CNI 时才调度它。

    警告: 从 v1.18 开始,在 kubeadm 中使用 kube-dns 的支持已被废弃,并已在 v1.21 版本中删除。

在 kubeadm 中使用 init phases

Kubeadm 允许你使用 kubeadm init phase 命令分阶段创建控制平面节点。

要查看阶段和子阶段的有序列表,可以调用 kubeadm init --help。 该列表将位于帮助屏幕的顶部,每个阶段旁边都有一个描述。 注意,通过调用 kubeadm init,所有阶段和子阶段都将按照此确切顺序执行。

某些阶段具有唯一的标志,因此,如果要查看可用选项的列表,请添加 --help,例如:

sudo kubeadm init phase control-plane controller-manager --help

你也可以使用 --help 查看特定父阶段的子阶段列表:

sudo kubeadm init phase control-plane --help

kubeadm init 还公开了一个名为 --skip-phases 的参数,该参数可用于跳过某些阶段。 参数接受阶段名称列表,并且这些名称可以从上面的有序列表中获取。

例如:

sudo kubeadm init phase control-plane all --config=configfile.yaml
sudo kubeadm init phase etcd local --config=configfile.yaml
# 你现在可以修改控制平面和 etcd 清单文件
sudo kubeadm init --skip-phases=control-plane,etcd --config=configfile.yaml

该示例将执行的操作是基于 configfile.yaml 中的配置在 /etc/kubernetes/manifests 中写入控制平面和 etcd 的清单文件。 这允许你修改文件,然后使用 --skip-phases 跳过这些阶段。 通过调用最后一个命令,你将使用自定义清单文件创建一个控制平面节点。

结合一份配置文件来使用 kubeadm init

注意: 配置文件的功能仍然处于 alpha 状态并且在将来的版本中可能会改变。

通过一份配置文件而不是使用命令行参数来配置 kubeadm init 命令是可能的, 但是一些更加高级的功能只能够通过配置文件设定。 这份配置文件通过 --config 选项参数指定的, 它必须包含 ClusterConfiguration 结构,并可能包含更多由 ---\n 分隔的结构。 在某些情况下,可能不允许将 --config 与其他标志混合使用。

可以使用 kubeadm config print 命令打印出默认配置。

如果你的配置没有使用最新版本, 推荐使用 kubeadm config migrate 命令进行迁移。

有关配置的字段和用法的更多信息, 你可以访问 API 参考页面并从 列表 中选择一个版本。

添加 kube-proxy 参数

kubeadm 配置中有关 kube-proxy 的说明请查看:

使用 kubeadm 启用 IPVS 模式的说明请查看:

向控制平面组件传递自定义的命令行参数

有关向控制平面组件传递命令行参数的说明请查看: 控制平面命令行参数

使用自定义的镜像

默认情况下, kubeadm 会从 k8s.gcr.io 仓库拉取镜像。如果请求的 Kubernetes 版本是 CI 标签 (例如 ci/latest),则使用 gcr.io/k8s-staging-ci-images

你可以通过使用带有配置文件的 kubeadm 来重写此操作。

允许的自定义功能有:

  • 使用其他的 imageRepository 来代替 k8s.gcr.io
  • useHyperKubeImage 设置为 true,使用 HyperKube 镜像。
  • 为 etcd 或 DNS 附件提供特定的 imageRepositoryimageTag

请注意配置文件中的配置项 kubernetesVersion 或者命令行参数 --kubernetes-version 会影响到镜像的版本。

将控制平面证书上传到集群

通过将参数 --upload-certs 添加到 kubeadm init,你可以将控制平面证书临时上传到集群中的 Secret。 请注意,此 Secret 将在 2 小时后自动过期。证书使用 32 字节密钥加密,可以使用 --certificate-key 指定。 通过将 --control-plane--certificate-key 传递给 kubeadm join, 可以在添加其他控制平面节点时使用相同的密钥下载证书。

以下阶段命令可用于证书到期后重新上传证书:

kubeadm init phase upload-certs --upload-certs --certificate-key=SOME_VALUE --config=SOME_YAML_FILE

如果未将参数 --certificate-key 传递给 kubeadm initkubeadm init phase upload-certs, 则会自动生成一个新密钥。

以下命令可用于按需生成新密钥:

kubeadm certs certificate-key

使用 kubeadm 管理证书

有关使用 kubeadm 进行证书管理的详细信息,请参阅 使用 kubeadm 进行证书管理。 该文档包括有关使用外部 CA,自定义证书和证书更新的信息。

管理 kubeadm 为 kubelet 提供的 systemd 配置文件

kubeadm 包自带了关于 systemd 如何运行 kubelet 的配置文件。 请注意 kubeadm 客户端命令行工具永远不会修改这份 systemd 配置文件。 这份 systemd 配置文件属于 kubeadm DEB/RPM 包。

有关更多信息,请阅读 管理 systemd 的 kubeadm 内嵌文件

结合 CRI 运行时使用 kubeadm

默认情况下,kubeadm 尝试检测你的容器运行环境。有关此检测的更多详细信息,请参见 kubeadm CRI 安装指南

设置节点的名称

默认情况下, kubeadm 基于机器的主机地址分配一个节点名称。你可以使用 --node-name 参数覆盖此设置。 此标识将合适的 --hostname-override 值传递给 kubelet。

在没有互联网连接的情况下运行 kubeadm

要在没有互联网连接的情况下运行 kubeadm,你必须提前拉取所需的控制平面镜像。

你可以使用 kubeadm config images 子命令列出并拉取镜像:

kubeadm config images list
kubeadm config images pull

kubeadm 需要的所有镜像,例如 k8s.gcr.io/kube-*k8s.gcr.io/etcdk8s.gcr.io/pause 都支持多种架构。

kubeadm 自动化

除了像文档 kubeadm 基础教程 中所描述的那样,将从 kubeadm init 取得的令牌复制到每个节点, 你还可以并行地分发令牌以实现简单自动化。 要实现自动化,你必须知道控制平面节点启动后将拥有的 IP 地址,或使用 DNS 名称或负载均衡器的地址。

  1. 生成一个令牌。这个令牌必须具有以下格式:< 6 个字符的字符串>.< 16 个字符的字符串>。 更加正式的说法是,它必须符合以下正则表达式:[a-z0-9]{6}\.[a-z0-9]{16}

    kubeadm 可以为你生成一个令牌:

    kubeadm token generate
    
  1. 使用这个令牌同时启动控制平面节点和工作节点。它们一旦运行起来应该就会互相寻找对方并且建立集群。 同样的 --token 参数可以同时用于 kubeadm initkubeadm join 命令。
  1. 当加入其他控制平面节点时,可以对 --certificate-key 执行类似的操作。可以使用以下方式生成密钥:

    kubeadm certs certificate-key
    

一旦集群启动起来,你就可以从控制平面节点的 /etc/kubernetes/admin.conf 文件获取管理凭证, 并使用这个凭证同集群通信。

注意这种搭建集群的方式在安全保证上会有一些宽松,因为这种方式不允许使用 --discovery-token-ca-cert-hash 来验证根 CA 的哈希值(因为当配置节点的时候,它还没有被生成)。 更多信息请参阅 kubeadm join 文档。

接下来

3 - kubeadm join

此命令用来初始化 Kubernetes 工作节点并将其加入集群。

摘要

当节点加入 kubeadm 初始化的集群时,我们需要建立双向信任。 这个过程可以分解为发现(让待加入节点信任 Kubernetes 控制平面节点)和 TLS 引导(让Kubernetes 控制平面节点信任待加入节点)两个部分。

有两种主要的发现方案。 第一种方法是使用共享令牌和 API 服务器的 IP 地址。 第二种是提供一个文件 - 标准 kubeconfig 文件的一个子集。 该文件可以是本地文件,也可以通过 HTTPS URL 下载。 格式是 kubeadm join --discovery-token abcdef.1234567890abcdef 1.2.3.4:6443kubeadm join--discovery-file path/to/file.conf 或者kubeadm join --discovery-file https://url/file.conf。 只能使用其中一种。 如果发现信息是从 URL 加载的,必须使用 HTTPS。 此外,在这种情况下,主机安装的 CA 包用于验证连接。

如果使用共享令牌进行发现,还应该传递 --discovery-token-ca-cert-hash 参数来验证 Kubernetes 控制平面节点提供的根证书颁发机构(CA)的公钥。 此参数的值指定为 "<hash-type>:<hex-encoded-value>",其中支持的哈希类型为 "sha256"。哈希是通过 Subject Public Key Info(SPKI)对象的字节计算的(如 RFC7469)。 这个值可以从 "kubeadm init" 的输出中获得,或者可以使用标准工具进行计算。 可以多次重复 --discovery-token-ca-cert-hash 参数以允许多个公钥。

如果无法提前知道 CA 公钥哈希,则可以通过 --discovery-token-unsafe-skip-ca-verification 参数禁用此验证。 这削弱了kubeadm 安全模型,因为其他节点可能会模仿 Kubernetes 控制平面节点。

TLS 引导机制也通过共享令牌驱动。 这用于向 Kubernetes 控制平面节点进行临时的身份验证,以提交本地创建的密钥对的证书签名请求(CSR)。 默认情况下,kubeadm 将设置 Kubernetes 控制平面节点自动批准这些签名请求。 这个令牌通过 --tls-bootstrap-token abcdef.1234567890abcdef 参数传入。

通常两个部分会使用相同的令牌。 在这种情况下可以使用 --token 参数,而不是单独指定每个令牌。

"join [api-server-endpoint]" 命令执行下列阶段:

preflight              Run join pre-flight checks
control-plane-prepare  Prepare the machine for serving a control plane
  /download-certs        [EXPERIMENTAL] Download certificates shared among control-plane nodes from the kubeadm-certs Secret
  /certs                 Generate the certificates for the new control plane components
  /kubeconfig            Generate the kubeconfig for the new control plane components
  /control-plane         Generate the manifests for the new control plane components
kubelet-start          Write kubelet settings, certificates and (re)start the kubelet
control-plane-join     Join a machine as a control plane instance
  /etcd                  Add a new local etcd member
  /update-status         Register the new control-plane node into the ClusterStatus maintained in the kubeadm-config ConfigMap
  /mark-control-plane    Mark a node as a control-plane
kubeadm join [api-server-endpoint] [flags]

选项

--apiserver-advertise-address string
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--apiserver-bind-port int32     默认值: 6443
如果节点应该托管新的控制平面实例,则为 API 服务器要绑定的端口。
--certificate-key string
使用此密钥可以解密由 init 上传的证书 secret。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例
--cri-socket string
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;仅当安装了多个 CRI 或具有非标准 CRI 插槽时,才使用此选项。
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash stringSlice
对基于令牌的发现,验证根 CA 公钥是否与此哈希匹配 (格式: "<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
--experimental-patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。 例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。 默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。 "suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
-h, --help
join 操作的帮助命令
--ignore-preflight-errors stringSlice
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--node-name string
指定节点的名称
--skip-phases stringSlice
要跳过的阶段列表
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

join 工作流

kubeadm join 初始化 Kubernetes 工作节点并将其加入集群。 该操作过程包含下面几个步骤:

  1. kubeadm 从 API 服务器下载必要的集群信息。 默认情况下,它使用引导令牌和 CA 密钥哈希来验证数据的真实性。 也可以通过文件或 URL 直接发现根 CA。
  1. 一旦知道集群信息,kubelet 就可以开始 TLS 引导过程。

    TLS 引导程序使用共享令牌与 Kubernetes API 服务器进行临时的身份验证,以提交证书签名请求 (CSR); 默认情况下,控制平面自动对该 CSR 请求进行签名。

  1. 最后,kubeadm 配置本地 kubelet 使用分配给节点的确定标识连接到 API 服务器。

对于控制平面节点,执行额外的步骤:

  1. 从集群下载控制平面节点之间共享的证书(如果用户明确要求)。

  2. 生成控制平面组件清单、证书和 kubeconfig。

  3. 添加新的本地 etcd 成员。

  4. 将此节点添加到 kubeadm 集群的 ClusterStatus。

使用 kubeadm 的 join phase 命令

Kubeadm 允许你使用 kubeadm join phase 分阶段将节点加入集群。

要查看阶段和子阶段的有序列表,可以调用 kubeadm join --help。 该列表将位于帮助屏幕的顶部,每个阶段旁边都有一个描述。 注意,通过调用 kubeadm join,所有阶段和子阶段都将按照此确切顺序执行。

有些阶段具有唯一的标志,因此,如果要查看可用选项列表,请添加 --help,例如:

kubeadm join phase kubelet-start --help

类似于 kubeadm init phase命令, kubeadm join phase 允许你使用 --skip-phases 标志跳过阶段列表。

例如:

sudo kubeadm join --skip-phases=preflight --config=config.yaml

发现要信任的集群 CA

Kubeadm 的发现有几个选项,每个选项都有安全性上的优缺点。 适合你的环境的正确方法取决于节点是如何准备的以及你对网络的安全性期望 和节点的生命周期特点。

带 CA 锁定模式的基于令牌的发现

这是 Kubernetes 1.8 及以上版本中的默认模式。 在这种模式下,kubeadm 下载集群配置(包括根CA)并使用令牌验证它, 并且会验证根 CA 的公钥与所提供的哈希是否匹配, 以及 API 服务器证书在根 CA 下是否有效。

CA 键哈希格式为 sha256:<hex_encoded_hash>。 默认情况下,在 kubeadm init 最后打印的 kubeadm join 命令 或者 kubeadm token create --print-join-command 的输出信息中返回哈希值。 它使用标准格式 (请参考 RFC7469) 并且也能通过第三方工具或者制备系统进行计算。 例如,使用 OpenSSL CLI:

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

kubeadm join 命令示例

对于工作节点:

kubeadm join --discovery-token abcdef.1234567890abcdef --discovery-token-ca-cert-hash sha256:1234..cdef 1.2.3.4:6443

对于控制面节点:

kubeadm join --discovery-token abcdef.1234567890abcdef --discovery-token-ca-cert-hash sha256:1234..cdef --control-plane 1.2.3.4:6443

如果使用 --upload-certs 调用 kubeadm init 命令, 你也可以对控制平面节点调用带 --certificate-key 参数的 join 命令, 将证书复制到该节点。

优势:

  • 允许引导节点安全地发现主节点的信任根,即使其他工作节点或网络受到损害。

  • 方便手动执行,因为所需的所有信息都可放到一个 kubeadm join 命令中。

劣势:

  • CA 哈希通常在主节点被提供之前是不知道的,这使得构建使用 kubeadm 的自动化配置工具更加困难。 通过预先生成CA,你可以解除这个限制。

无 CA 锁定模式的基于令牌的发现

_这是 Kubernetes 1.7 和早期版本_中的默认设置;使用时要注意一些重要的补充说明。 此模式仅依赖于对称令牌来签名(HMAC-SHA256)发现信息,这些发现信息为主节点建立信任根。 在 Kubernetes 1.8 及以上版本中仍然可以使用 --discovery-token-unsafe-skip-ca-verification 参数,但是如果可能的话,你应该考虑使用一种其他模式。

kubeadm join 命令示例

kubeadm join --token abcdef.1234567890abcdef --discovery-token-unsafe-skip-ca-verification 1.2.3.4:6443

优势

  • 仍然可以防止许多网络级攻击。

  • 可以提前生成令牌并与主节点和工作节点共享,这样主节点和工作节点就可以并行引导而无需协调。 这允许它在许多配置场景中使用。

劣势

  • 如果攻击者能够通过某些漏洞窃取引导令牌,那么他们可以使用该令牌(连同网络级访问) 为其它处于引导过程中的节点提供假冒的主节点。 在你的环境中,这可能是一个适当的折衷方法,也可能不是。

基于 HTTPS 或文件发现

这种方案提供了一种带外方式在主节点和引导节点之间建立信任根。 如果使用 kubeadm 构建自动配置,请考虑使用此模式。 发现文件的格式为常规的 Kubernetes kubeconfig 文件。

如果发现文件不包含凭据,则将使用 TLS 发现令牌。

kubeadm join 命令示例:

  • kubeadm join --discovery-file path/to/file.conf (本地文件)

  • kubeadm join --discovery-file https://url/file.conf (远程 HTTPS URL)

优势:

  • 允许引导节点安全地发现主节点的信任根,即使网络或其他工作节点受到损害。

劣势:

  • 要求你有某种方法将发现信息从主节点传送到引导节点。 例如,这可以通过云提供商或驱动工具实现。 该文件中的信息不是加密的,而是需要 HTTPS 或等效文件来保证其完整性。

确保你的安装更加安全

Kubeadm 的默认值可能不适用于所有人。 本节说明如何以牺牲可用性为代价来加强 kubeadm 安装。

关闭节点客户端证书的自动批准

默认情况下,Kubernetes 启用了 CSR 自动批准器,如果在身份验证时使用启动引导令牌, 它会批准对 kubelet 的任何客户端证书的请求。 如果不希望集群自动批准kubelet客户端证书,可以通过执行以下命令关闭它:

kubectl delete clusterrolebinding kubeadm:node-autoapprove-bootstrap

关闭后,kubeadm join 操作将会被阻塞,直到管理员已经手动批准了在途中的 CSR 才会继续:

kubectl get csr

输出类似于:

NAME                                                   AGE       REQUESTOR                 CONDITION
node-csr-c69HXe7aYcqkS1bKmH4faEnHAWxn6i2bHZ2mD04jZyQ   18s       system:bootstrap:878f07   Pending
kubectl certificate approve node-csr-c69HXe7aYcqkS1bKmH4faEnHAWxn6i2bHZ2mD04jZyQ

输出类似于:

certificatesigningrequest "node-csr-c69HXe7aYcqkS1bKmH4faEnHAWxn6i2bHZ2mD04jZyQ" approved
kubectl get csr

输出类似于:

NAME                                                   AGE       REQUESTOR                 CONDITION
node-csr-c69HXe7aYcqkS1bKmH4faEnHAWxn6i2bHZ2mD04jZyQ   1m        system:bootstrap:878f07   Approved,Issued

这迫使工作流只有在运行了 kubectl 证书批准后,kubeadm join 才能成功。

关闭对集群信息 ConfigMap 的公开访问

为了实现使用令牌作为唯一验证信息的加入工作流,默认情况下会公开带有验证主节点标识 所需数据的 ConfigMap。 虽然此 ConfigMap 中没有私有数据,但一些用户可能希望无论如何都关闭它。 这样做需要禁用 kubeadm join 工作流的 --discovery-token 参数。 以下是实现步骤:

  • 从 API 服务器获取 cluster-info 文件:
kubectl -n kube-public get cm cluster-info -o yaml | grep "kubeconfig:" -A11 | grep "apiVersion" -A10 | sed "s/    //" | tee cluster-info.yaml

输出类似于:

apiVersion: v1
kind: Config
clusters:
- cluster:
    certificate-authority-data: <ca-cert>
    server: https://<ip>:<port>
  name: ""
contexts: []
current-context: ""
preferences: {}
users: []
  • 使用 cluster-info.yaml 文件作为 kubeadm join --discovery-file 参数。

  • 关闭 cluster-info ConfigMap 的公开访问:

    kubectl -n kube-public delete rolebinding kubeadm:bootstrap-signer-clusterinfo
    

这些命令应该在执行 kubeadm init 之后、在kubeadm join 之前执行。

使用带有配置文件的 kubeadm join

注意:

配置文件目前是 alpha 功能,在将来的版本中可能会变动。

可以用配置文件替代命令行参数的方法配置 kubeadm join,一些高级功能也只有在使用配置文件时才可选用。 该文件通过 --config 参数来传递,并且文件中必须包含 JoinConfiguration 结构。 在某些情况下,不允许将 --config 与其他标志混合使用。

使用 kubeadm config print 命令可以打印默认配置。

如果你的配置没有使用最新版本, 推荐使用 kubeadm config migrate 命令转换。

有关配置的字段和用法的更多信息,你可以导航到我们的 API 参考页 并从[列表]中选择一个版本(https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm#pkg-subdirectories)。

接下来

4 - kubeadm upgrade

kubeadm upgrade 是一个对用户友好的命令,它将复杂的升级逻辑包装在一个命令后面,支持升级的规划和实际执行。

kubeadm upgrade 指南

本文档概述 使用 kubeadm 执行升级的步骤。 与 kubeadm 旧版本相关的文档,请参阅 Kubernetes 网站的旧版文档。

你可以使用 kubeadm upgrade diff 来查看将应用于静态 Pod 清单的更改。

在 Kubernetes v1.15.0 和更高版本中,kubeadm upgrade applykubeadm upgrade node 也将自动续订该节点上的 kubeadm 托管证书,包括存储在 kubeconfig 文件中的证书。 要选择退出,可以传递参数 --certificate-renewal=false。 有关证书续订的更多详细信息请参见证书管理文档

说明:

kubeadm upgrade applykubeadm upgrade plan 命令都具有遗留的 --config 标志, 可以在执行特定控制平面节点的规划或升级时重新配置集群。 请注意,升级工作流不是为这种情况而设计的,并且有意外结果的报告。

kubeadm upgrade plan

概述

检查可升级到哪些版本,并验证您当前的集群是否可升级。 要跳过互联网检查,请传递可选的 [version] 参数

kubeadm upgrade plan [version] [flags]

选项

--allow-experimental-upgrades
显示不稳定版本的 Kubernetes 作为升级替代方案,并允许升级到 Kubernetes 的 Alpha/Beta/发行候选版本。
--allow-release-candidate-upgrades
显示 Kubernetes 的发行候选版本作为升级选择,并允许升级到 Kubernetes 的发行候选版本。
--config string
配置文件的路径。
--feature-gates string
一组描述各种特征特性门控的键值对。选项有:IPv6DualStack=true|false (ALPHA - default=false) PublicKeysECDSA=true|false (ALPHA - default=false)
-h, --help
帮助
--ignore-preflight-errors stringSlice
检查清单,其错误将显示为警告。 例如:“IsPrivilegedUser,Swap”。 值 “all” 忽略所有检查的错误。
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果标志为未设置,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--print-config
指定是否打印将在升级中使用的配置文件。

从父命令继承的选项

--rootfs string
[EXPERIMENTAL] “真实”主机根文件系统的路径。

kubeadm upgrade apply

概要

将 Kubernetes 集群升级到指定版本

kubeadm upgrade apply [version]

选项

--allow-experimental-upgrades
显示 Kubernetes 的不稳定版本作为升级替代方案,并允许升级到 Kubernetes 的 alpha/beta 或 RC 版本。
--allow-release-candidate-upgrades
显示 Kubernetes 的候选版本作为升级替代方案,并允许升级到 Kubernetes 的 RC 版本。
--certificate-renewal     Default: true
执行升级期间更改的组件所使用的证书的更新。
--config string
kubeadm 配置文件的路径。
--dry-run
不要更改任何状态,只输出要执行的操作。
--etcd-upgrade     默认值: true
执行 etcd 的升级。
--experimental-patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。 例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。 默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。 "suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
--feature-gates string
一组键值对,用于描述各种功能。选项包括:
IPv6DualStack=true|false (ALPHA - 默认=false)
PublicKeysECDSA=true|false (ALPHA - 默认=false)
-f, --force
强制升级,但可能无法满足某些要求。这也意味着非交互模式。
-h, --help
apply 操作的帮助命令
--ignore-preflight-errors stringSlice
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置标志,则在相关目录下搜索以查找现有 kubeconfig 文件。
--print-config
指定是否应打印将在升级中使用的配置文件。
-y, --yes
执行升级,不提示确认(非交互模式)。

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

kubeadm upgrade diff

概述

显示哪些差异将被应用于现有的静态 pod 资源清单。参考: kubeadm upgrade apply --dry-run

kubeadm upgrade diff [version] [flags]

选项

--api-server-manifest string     默认值:"/etc/kubernetes/manifests/kube-apiserver.yaml"
API服务器清单的路径
--config string
kubeadm 配置文件的路径
-c, --context-lines int     默认值:3
差异中有多少行上下文
--controller-manager-manifest string     默认值: "/etc/kubernetes/manifests/kube-controller-manager.yaml"
控制器清单的路径
-h, --help
帮助
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件,如果标志是未设置,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--scheduler-manifest string     默认值:"/etc/kubernetes/manifests/kube-scheduler.yaml"
调度程序清单的路径

从父命令继承的选项

--rootfs string
[EXPERIMENTAL] “真实”主机根文件系统的路径。

kubeadm upgrade node

概要

升级集群中某个节点的命令

"node" 命令执行以下阶段:

preflight       执行节点升级前检查
control-plane   如果存在的话,升级部署在该节点上的管理面实例
kubelet-config  更新该节点上的 kubelet 配置
kubeadm upgrade node [flags]

选项

--certificate-renewal
对升级期间变化的组件所使用的证书执行更新。
--dry-run
不更改任何状态,只输出将要执行的操作。
--etcd-upgrade     默认值: true
执行 etcd 的升级。
--experimental-patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。 例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。 默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。 "suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
-h, --help
node 操作的帮助命令
--kubeconfig string     默认值: "/etc/kubernetes/admin.conf"
用于与集群交互的 kubeconfig 文件。如果参数未指定,将从一系列标准位置检索存在的 kubeconfig 文件。
--kubelet-version string
升级后 *期望的* kubelet 配置版本。如未指定,将使用 kubeadm-config ConfigMap 中的 KubernetesVersion
--skip-phases stringSlice
要跳过的阶段的列表

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

接下来

  • 如果你使用 kubeadm v1.7.x 或更低版本初始化集群,则可以参考 kubeadm 配置 配置集群用于 kubeadm upgrade

5 - kubeadm config

kubeadm init 执行期间,kubeadm 将 ClusterConfiguration 对象上传 到你的集群的 kube-system 名字空间下名为 kubeadm-config 的 ConfigMap 对象中。 然后在 kubeadm joinkubeadm resetkubeadm upgrade 执行期间读取此配置。 要查看此 ConfigMap,请调用 kubeadm config view

你可以使用 kubeadm config print 命令打印默认配置, 并使用 kubeadm config migrate 命令将旧版本的配置转化成新版本。 kubeadm config images listkubeadm config images pull 命令可以用来列出并拉取 kubeadm 所需的镜像。

更多信息请浏览使用带配置文件的 kubeadm init使用带配置文件的 kubeadm join.

你也可以在使用 kubeadm init 命令时配置若干 kubelet 配置选项。 这些选项对于集群中所有节点而言都是相同的。 参阅使用 kubeadm 来配置集群中的各个 kubelet 了解详细信息。

在 Kubernetes v1.13.0 及更高版本中,要列出/拉取 kube-dns 镜像而不是 CoreDNS 镜像, 必须使用这里 所描述的 --config 方法。

kubeadm config upload from-file

kubeadm config print

打印配置

概要

此命令打印子命令所提供的配置信息。 相关细节可参阅 https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2

kubeadm config print [flags]

选项

-h, --help

print 命令的帮助信息

从父命令继承而来的选项

--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"

与集群通信时使用的 kubeconfig 文件。如此标志未设置,将在一组标准位置中搜索现有的kubeconfig 文件。

--rootfs string

[试验性] 指向“真实”宿主根文件系统的路径。

kubeadm config print init-defaults

概要

此命令打印对象,例如用于 'kubeadm init' 的默认 init 配置对象。

请注意,Bootstrap Token 字段之类的敏感值已替换为 {"abcdef.0123456789abcdef" "" "nil" <nil> [] []} 之类的占位符值以通过验证,但不执行创建令牌的实际计算。

kubeadm config print init-defaults [flags]

选项

--component-configs stringSlice
组件配置 API 对象的逗号分隔列表,打印其默认值。可用值:[KubeProxyConfiguration KubeletConfiguration]。如果未设置此参数,则不会打印任何组件配置。
-h, --help
init-defaults 操作的帮助命令

从父命令继承的选项

--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

kubeadm config print join-defaults

概要

此命令打印对象,例如用于 'kubeadm join' 的默认 join 配置对象。

请注意,诸如启动引导令牌字段之类的敏感值已替换为 {"abcdef.0123456789abcdef" "" "nil" <nil> [] []} 之类的占位符值以通过验证,但不执行创建令牌的实际计算。

kubeadm config print join-defaults [flags]

选项

--component-configs stringSlice
组件配置 API 对象的逗号分隔列表,打印其默认值。可用值:[KubeProxyConfiguration KubeletConfiguration]。如果未设置此参数,则不会打印任何组件配置。
-h, --help
join-defaults 操作的帮助命令

从父命令继承的选项

--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

kubeadm config migrate

概要

此命令允许您在 CLI 工具中将本地旧版本的配置对象转换为最新支持的版本,而无需变更集群中的任何内容。在此版本的 kubeadm 中,支持以下 API 版本:

  • kubeadm.k8s.io/v1beta2

因此,无论您在此处传递 --old-config 参数的版本是什么,当写入到 stdout 或 --new-config (如果已指定)时, 都会读取、反序列化、默认、转换、验证和重新序列化 API 对象。

换句话说,如果您将此文件传递给 "kubeadm init",则该命令的输出就是 kubeadm 实际上在内部读取的内容。

kubeadm config migrate [flags]

选项

-h, --help
migrate 操作的帮助信息
--new-config string
使用新的 API 版本生成的 kubeadm 配置文件的路径。这个路径是可选的。如果没有指定,输出将被写到 stdout。
--old-config string
使用旧 API 版本且应转换的 kubeadm 配置文件的路径。此参数是必需的。

从父命令继承的选项

--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果未设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

kubeadm config images list

概要

打印 kubeadm 要使用的镜像列表。配置文件用于自定义任何镜像或镜像存储库。

kubeadm config images list [flags]

选项

--allow-missing-template-keys     默认值:true
如果设置为 true,则在模板中缺少字段或哈希表的键时忽略模板中的任何错误。 仅适用于 golang 和 jsonpath 输出格式。
-o, --experimental-output string     默认值:"text"
输出格式:text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file 其中之一
--config string
kubeadm 配置文件的路径。
--feature-gates string
一组键值对(key=value),用于描述各种特征。选项是:
Auditing=true|false (ALPHA - 默认=false)
CoreDNS=true|false (默认=true)
DynamicKubeletConfig=true|false (BETA - 默认=false)
-h, --help
list 操作的帮助命令
--image-repository string     默认值:"k8s.gcr.io"
选择要从中拉取控制平面镜像的容器仓库
--kubernetes-version string     默认值:"stable-1"
为控制平面选择一个特定的 Kubernetes 版本

从父命令继承的选项

--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

kubeadm config images pull

概要

拉取 kubeadm 使用的镜像。

kubeadm config images pull [flags]

选项

--config string
kubeadm 配置文件的路径。
--cri-socket string
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;仅当安装了多个 CRI 或具有非标准 CRI 插槽时,才使用此选项。
--feature-gates string
一系列键值对(key=value),用于描述各种特征。可选项是:
IPv6DualStack=true|false (ALPHA - 默认值=false)
-h, --help
pull 操作的帮助命令
--image-repository string     默认值:"k8s.gcr.io"
选择用于拉取控制平面镜像的容器仓库
--kubernetes-version string     默认值:"stable-1"
为控制平面选择一个特定的 Kubernetes 版本。

从父命令继承的选项

--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

接下来

  • kubeadm upgrade 将 Kubernetes 集群升级到更新版本 [kubeadm upgrade]

6 - kubeadm reset

该命令尽力还原由 kubeadm initkubeadm join 所做的更改。

概要

尽最大努力还原通过 'kubeadm init' 或者 'kubeadm join' 操作对主机所做的更改

"reset" 命令执行以下阶段:

preflight              Run reset pre-flight checks
update-cluster-status  Remove this node from the ClusterStatus object.
remove-etcd-member     Remove a local etcd member.
cleanup-node           Run cleanup node.
kubeadm reset [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的目录路径。如果已指定,则需要清空此目录。
--cri-socket string
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;仅当安装了多个CRI 或具有非标准 CRI 插槽时,才使用此选项。
-f, --force
在不提示确认的情况下重置节点。
-h, --help
reset 操作的帮助命令
--ignore-preflight-errors stringSlice
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该标志,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--skip-phases stringSlice
要跳过的阶段列表

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

Reset 工作流程

kubeadm reset 负责从使用 kubeadm initkubeadm join 命令创建的文件中清除节点本地文件系统。对于控制平面节点,reset 还从 etcd 集群中删除该节点的本地 etcd 堆成员,还从 kubeadm ClusterStatus 对象中删除该节点的信息。 ClusterStatus 是一个 kubeadm 管理的 Kubernetes API 对象,该对象包含 kube-apiserver 端点列表。

kubeadm reset phase 可用于执行上述工作流程的各个阶段。 要跳过阶段列表,你可以使用 --skip-phases 参数,该参数的工作方式类似于 kubeadm joinkubeadm init 阶段运行器。

外部 etcd 清理

如果使用了外部 etcd,kubeadm reset 将不会删除任何 etcd 中的数据。这意味着,如果再次使用相同的 etcd 端点运行 kubeadm init,你将看到先前集群的状态。

要清理 etcd 中的数据,建议你使用 etcdctl 这样的客户端,例如:

etcdctl del "" --prefix

更多详情请参考 etcd 文档

接下来

  • 参考 kubeadm init 来初始化 Kubernetes 主节点。
  • 参考 kubeadm join 来初始化 Kubernetes 工作节点并加入集群。

7 - kubeadm token

使用引导令牌进行身份验证所描述的,引导令牌用于在即将加入集群的节点和主节点间建立双向认证。

kubeadm init 创建了一个有效期为 24 小时的令牌,下面的命令允许你管理令牌,也可以创建和管理新的令牌。

kubeadm token create

概要

这个命令将为你创建一个引导令牌。 您可以设置此令牌的用途,"有效时间" 和可选的人性化的描述。

这里的 [token] 是指将要生成的实际令牌。 该令牌应该是一个通过安全机制生成的随机令牌,形式为 "[a-z0-9]{6}.[a-z0-9]{16}"。 如果没有给出 [token],kubeadm 将生成一个随机令牌。

kubeadm token create [token]

选项

--config string
kubeadm 配置文件的路径。
--description string
针对令牌用途的人性化的描述。
--groups stringSlice     默认值:[system:bootstrappers:kubeadm:default-node-token]
此令牌用于身份验证时将进行身份验证的其他组。必须匹配 "\\Asystem:bootstrappers:[a-z0-9:-]{0,255}[a-z0-9]\\z"
-h, --help
create 操作的帮助命令
--print-join-command
不仅仅打印令牌,而是打印使用令牌加入集群所需的完整 'kubeadm join' 参数。
--ttl duration     默认值:24h0m0s
令牌有效时间,超过该时间令牌被自动删除。(例如: 1s, 2m, 3h)。如果设置为 '0',令牌将永远不过期。
--usages stringSlice     默认值:[signing,authentication]
描述可以使用此令牌的方式。你可以多次使用 `--usages` 或者提供一个以逗号分隔的选项列表。合法选项有: [signing,authentication]

从父命令继承的选项

--dry-run
是否启用 `dry-run` 运行模式
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

kubeadm token delete

概要

这个命令将为你删除指定的引导令牌列表。

[token-value] 是要删除的 "[a-z0-9]{6}.[a-z0-9]{16}" 形式的完整令牌或者是 "[a-z0-9]{6}" 形式的的令牌 ID。

kubeadm token delete [token-value] ...

选项

-h, --help
delete 操作的帮助命令

从父命令继承的选项

--dry-run
是否启用 `dry-run` 运行模式
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

kubeadm token generate

概要

此命令将打印一个随机生成的可以被 "init" 和 "join" 命令使用的引导令牌。 您不必使用此命令来生成令牌。你可以自己设定,只要格式符合 "[a-z0-9]{6}.[a-z0-9]{16}"。这个命令提供是为了方便生成规定格式的令牌。 您也可以使用 "kubeadm init" 并且不指定令牌,该命令会生成一个令牌并打印出来。

kubeadm token generate [flags]

选项

-h, --help
generate 操作的帮助命令

从父命令继承的选项

--dry-run
是否启用 `dry-run` 运行模式
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

kubeadm token list

概要

此命令将为您列出所有的引导令牌。

kubeadm token list [flags]

选项

--allow-missing-template-keys     默认值:true
如果设置为 true,则在模板中缺少字段或哈希表的键时忽略模板中的任何错误。 仅适用于 golang 和 jsonpath 输出格式。
-o, --experimental-output string     默认值:"text"
输出格式:text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file 其中之一
-h, --help
list 操作的帮助命令

从父命令继承的选项

--dry-run
是否启用 `dry-run` 模式
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

接下来

  • kubeadm join 引导 Kubernetes 工作节点并将其加入集群

8 - kubeadm version

此命令用来输出 kubeadm 的版本。

概要

打印 kubeadm 的版本

kubeadm version [flags]

选项

-h, --help
version 操作的帮助命令
-o, --output string
输出格式;可用的选项有 'yaml', 'json' 和 'short'

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

9 - kubeadm alpha

注意:

kubeadm alpha 提供了一组可用于收集社区反馈的预览性质功能。 请试用这些功能并给我们提供反馈!

目前在 kubeadm alpha 之下没有试验性质的命令。

接下来

  • 用来启动引导 Kubernetes 控制平面节点的 kubeadm init 命令
  • 用来将节点连接到集群的 kubeadm join 命令
  • 用来还原 kubeadm initkubeadm join 操作对主机所做的任何更改的 kubeadm reset 命令

10 - kubeadm certs

kubeadm certs 提供管理证书的工具。关于如何使用这些命令的细节,可参见 使用 kubeadm 管理证书

kubeadm certs

用来操作 Kubernetes 证书的一组命令。

概要

与处理 kubernetes 证书相关的命令

选项

-h, --help
certs 命令的帮助

继承于父命令的选项

--rootfs string
[实验] 到'真实'主机根文件系统的路径。

kubeadm certs renew

你可以使用 all 子命令来续订所有 Kubernetes 证书,也可以选择性地续订部分证书。 更多的相关细节,可参见 手动续订证书

概要

此命令并非设计用来单独运行。请参阅可用子命令列表。

kubeadm certs renew [flags]

选项

-h, --help
renew 操作的帮助命令

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

续订运行控制平面所需的所有已知证书。续订是无条件进行的,与到期日期无关。续订也可以单独运行以进行更多控制。

kubeadm certs renew all [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--csr-dir string
输出 CSR 和私钥的路径
--csr-only
创建 CSR 而不是生成证书
-h, --help
all 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

续订 kubeconfig 文件中嵌入的证书,供管理员 和 kubeadm 自身使用。

无论证书的到期日期如何,续订都是无条件进行的;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。

默认情况下,续订会尝试使用由 kubeadm 管理的本地 PKI 中的证书机构;作为替代方案, 也可以使用 K8s 证书 API 进行证书续订,或者(作为最后一种选择)生成 CSR 请求。

续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防证书文件在其他地方使用。

kubeadm certs renew admin.conf [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
--csr-dir string
CSR 和私钥的输出路径
--csr-only
创建 CSR 而不是生成证书
-h, --help
admin.conf 子操作的帮助命令
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

续订 apiserver 用于访问 etcd 的证书。

无论证书的到期日期如何,续订都会无条件地进行;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。

默认情况下,续订尝试使用在 kubeadm 所管理的本地 PKI 中的证书颁发机构;作为替代方案, 可以使用 K8s 证书 API 进行证书更新,或者作为最后一个选择来生成 CSR 请求。

续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。

kubeadm certs renew apiserver-etcd-client [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--csr-dir string
输出 CSR 和私钥的路径
--csr-only
创建 CSR 而不是生成证书
-h, --help
apiserver-etcd-client 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

续订 apiserver 用于连接 kubelet 的证书。

无论证书的到期日期如何,续订都会无条件地进行;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。

默认情况下,续订尝试使用位于 kubeadm 所管理的本地 PKI 中的证书颁发机构;作为替代方案, 也可能调用 K8s 证书 API 进行证书更新;亦或者,作为最后一个选择,生成 CSR 请求。

续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。

kubeadm certs renew apiserver-kubelet-client [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--csr-dir string
输出 CSR 和私钥的路径
--csr-only
创建 CSR 而不是生成证书
-h, --help
apiserver-kubelet-client 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

续订用于提供 Kubernetes API 的证书。

无论证书的到期日期如何,续订都会无条件地进行;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。

默认情况下,续订尝试在 kubeadm 管理的本地 PKI 中使用证书颁发机构;作为替代方案, 可以使用 K8s 证书 API 进行证书更新,或者作为最后一个选择来生成 CSR 请求。

续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。

kubeadm certs renew apiserver [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
--csr-dir string
CSR 和私钥的输出路径
--csr-only
创建 CSR 而不是生成证书
-h, --help
apiserver 子操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

续订 kubeconfig 文件中嵌入的证书,以供控制器管理器(Controller Manager)使用。

续订无条件地进行,与证书的到期日期无关;SAN 等额外属性将基于现有的文件/证书,因此无需重新提供它们。

默认情况下,续订会尝试使用 kubeadm 管理的本地 PKI 中的证书颁发机构;作为替代方案, 可以使用 K8s 证书 API 进行证书续订;亦或者,作为最后一种选择,生成 CSR 请求。

续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。

kubeadm alpha renew controller-manager.conf [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
--csr-dir string
CSR 和私钥的输出路径
--csr-only
创建 CSR 而不是生成证书
-h, --help
controller-manager.conf 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

续订存活态探针的证书,用于对 etcd 执行健康检查。

无论证书的到期日期如何,续订都是无条件进行的;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。

默认情况下,续订会尝试使用由 kubeadm 管理的本地 PKI 中的证书机构;作为替代方案, 也可以使用 K8s certificate API 进行证书续订,或者(作为最后一种选择)生成 CSR 请求。

续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防证书文件在其他地方使用。

kubeadm certs renew etcd-healthcheck-client [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
--csr-dir string
CSR 和私钥的输出路径
--csr-only
创建 CSR 而不是生成证书
-h, --help
etcd-healthcheck-client 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

续订 etcd 节点间用来相互通信的证书。

无论证书的到期日期如何,续订都是无条件进行的;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。

默认情况下,续订会尝试使用由 kubeadm 管理的本地 PKI 中的证书机构; 作为替代方案,也可以使用 K8s certificate API 进行证书续订,或者(作为最后一种选择)生成 CSR 请求。

续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防证书文件在其他地方使用。

kubeadm certs renew etcd-peer [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
--csr-dir string
CSR 和私钥的输出路径
--csr-only
创建 CSR 而不是生成证书
-h, --help
etcd-peer 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

续订用于提供 etcd 服务的证书。

续订无条件地进行,与证书的到期日期无关;SAN 等额外属性将基于现有的文件/证书,因此无需重新提供它们。

默认情况下,续订会尝试在 kubeadm 管理的本地 PKI 中使用证书颁发机构;作为替代方案, 可以使用 K8s 证书 API 进行证书续订,或者作为最后一种选择来生成 CSR 请求。

续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。

kubeadm certs renew etcd-server [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
--csr-dir string
CSR 和私钥的输出路径
--csr-only
创建 CSR 而不是生成证书
-h, --help
etcd-server 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

为前端代理客户端续订证书。

无论证书的到期日期如何,续订都会无条件地进行;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。

默认情况下,续订尝试使用位于 kubeadm 所管理的本地 PKI 中的证书颁发机构;作为替代方案, 也可以使用 K8s 证书 API 进行证书续订;亦或者,作为最后一种方案,生成 CSR 请求。

续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。

kubeadm certs renew front-proxy-client [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--csr-dir string
输出 CSR 和私钥的路径
--csr-only
创建 CSR 而不是生成证书
-h, --help
front-proxy-client 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

续订 kubeconfig 文件中嵌入的证书,以供调度管理器使用。

续订无条件地进行,与证书的到期日期无关;SAN 等额外属性将基于现有的文件/证书,因此无需重新提供它们。

默认情况下,续订会尝试使用在 kubeadm 所管理的本地 PKI 中的证书颁发机构;作为替代方案, 也可以使用 K8s 证书 API 进行证书续订;亦或者,作为最后一种选择,生成 CSR 请求。

续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。

kubeadm certs renew scheduler.conf [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
--csr-dir string
CSR 和私钥的输出路径
--csr-only
创建 CSR 而不是生成证书
-h, --help
scheduler.conf 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。 如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

kubeadm certs certificate-key

此命令可用来生成一个新的控制面证书密钥。密钥可以作为 --certificate-key 标志的取值传递给 kubeadm initkubeadm join 命令,从而在添加新的控制面节点时能够自动完成证书复制。

概要

该命令将打印出可以与 "init" 命令一起使用的安全的随机生成的证书密钥。

你也可以使用 kubeadm init --upload-certs 而无需指定证书密钥; 命令将为你生成并打印一个证书密钥。

kubeadm certs certificate-key [flags]

选项

-h, --help
certificate-key 操作的帮助命令

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

kubeadm certs check-expiration

此命令检查 kubeadm 所管理的本地 PKI 中的证书是否以及何时过期。 更多的相关细节,可参见 检查证书过期

概要

检查 kubeadm 管理的本地 PKI 中证书的到期时间。

kubeadm certs check-expiration [flags]

选项

--cert-dir string     默认值: "/etc/kubernetes/pki"
保存证书的路径
--config string
kubeadm 配置文件的路径
-h, --help
check-expiration 的帮助命令

继承于父命令的选项

--rootfs string
[实验] 到'真实'主机根文件系统的路径。

kubeadm certs generate-csr

此命令可用来为所有控制面证书和 kubeconfig 文件生成密钥和 CSR(签名请求)。 用户可以根据自身需要选择 CA 为 CSR 签名。

为运行控制平面所需的所有证书生成密钥和证书签名请求(CSR)。该命令会生成部分 kubeconfig 文件, 其中 "users > user > client-key-data" 字段包含私钥数据,并为每个 kubeconfig 文件创建一个随附的 ".csr" 文件。

此命令设计用于 Kubeadm 外部 CA 模式。 它生成你可以提交给外部证书颁发机构进行签名的 CSR。

应使用 ".crt" 作为文件扩展名将 PEM 编码的签名证书与密钥文件一起保存。 或者,对于 kubeconfig 文件,PEM 编码的签名证书应使用 base64 编码, 并添加到 "users > user > client-certificate-data" 字段。

kubeadm certs generate-csr [flags]

示例

# 以下命令将为所有控制平面证书和 kubeconfig 文件生成密钥和 CSR :
kubeadm certs generate-csr --kubeconfig-dir /tmp/etc-k8s --cert-dir /tmp/etc-k8s/pki

选项

--cert-dir string
保存证书的路径
--config string
kubeadm 配置文件的路径。
-h, --help
generate-csr 命令的帮助
--kubeconfig-dir string     默认值:"/etc/kubernetes"
保存 kubeconfig 文件的路径。

继承于父命令的选项

--rootfs string
[实验] 到'真实'主机根文件系统的路径。

接下来

  • 用来启动引导 Kubernetes 控制面节点的 kubeadm init 命令
  • 用来将节点连接到集群的 kubeadm join 命令
  • 用来回滚 kubeadm initkubeadm join 对当前主机所做修改的 kubeadm reset 命令

11 - kubeadm init phase

kubeadm init phase 能确保调用引导过程的原子步骤。 因此,如果希望自定义应用,则可以让 kubeadm 做一些工作,然后填补空白。

kubeadm init phasekubeadm init 工作流 一致,后台都使用相同的代码。

kubeadm init phase preflight

使用此命令可以在控制平面节点上执行启动前检查。

概要

运行 kubeadm init 前的启动检查。

kubeadm init phase preflight [flags]

案例

# 使用配置文件对 kubeadm init 进行启动检查。
kubeadm init phase preflight --config kubeadm-config.yml

选项

--config string
kubeadm 配置文件的路径。
-h, --help
preflight 操作的帮助命令
--ignore-preflight-errors stringSlice
错误将显示为警告的检查列表:例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

kubeadm init phase kubelet-start

此阶段将检查 kubelet 配置文件和环境文件,然后启动 kubelet。

概要

使用 kubelet 配置文件编写一个文件,并使用特定节点的 kubelet 设置编写一个环境文件,然后(重新)启动 kubelet。

kubeadm init phase kubelet-start [flags]

示例

# 从 InitConfiguration 文件中写入带有 kubelet 参数的动态环境文件。
kubeadm init phase kubelet-start --config config.yaml

选项

--config string
kubeadm 配置文件的路径。
--cri-socket string
连接到 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测该值;仅当安装了多个 CRI 或具有非标准 CRI 套接字时,才使用此选项。
-h, --help
kubelet-start 操作的帮助命令
--node-name string
指定节点名称。

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

kubeadm init phase certs

该阶段可用于创建 kubeadm 所需的所有证书。

概要

此命令并非设计用来单独运行。请参阅可用子命令列表。

kubeadm init phase certs [flags]

选项

-h, --help
certs 操作的帮助命令

从父指令中继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

生成所有证书

kubeadm init phase certs all [flags]

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,将使用默认网络接口。
--apiserver-cert-extra-sans stringSlice
用于 API 服务器服务证书的可选额外替代名称(SAN)。可以同时使用 IP 地址和 DNS 名称。
--cert-dir string     默认值:"/etc/kubernetes/pki"
证书的存储路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
-h, --help
all 操作的帮助命令
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--service-cidr string     默认值:"10.96.0.0/12"
VIP 服务使用其它的 IP 地址范围。
--service-dns-domain string     默认值:"cluster.local"
服务使用其它的域名,例如:"myorg.internal"。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

生成自签名的 Kubernetes CA 以提供其他 Kubernetes 组件的身份,并将其保存到 ca.cert 和 ca.key 文件中。

如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。

Alpha 免责声明:此命令当前为 Alpha 功能。

kubeadm init phase certs ca [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
证书的存储路径。
--config string
kubeadm 配置文件的路径。
-h, --help
ca 操作的帮助命令
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

生成用于服务 Kubernetes API 的证书,并将其保存到 apiserver.cert 和 apiserver.key 文件中。

默认 SAN 是 kubernetes、kubernetes.default、kubernetes.default.svc、kubernetes.default.svc.cluster.local、10.96.0.1、127.0.0.1。

如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。

Alpha 免责声明:此命令当前为 Alpha 功能。

kubeadm init phase certs apiserver [flags]

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
--apiserver-cert-extra-sans stringSlice
用于 API Server 服务证书的可选附加主体备用名称(SAN)。可以是 IP 地址和 DNS 名称。
--cert-dir string     默认值:"/etc/kubernetes/pki"
证书的存储路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
-h, --help
apiserver 操作的帮助命令
--kubernetes-version string     默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。
--service-cidr string     默认值:"10.96.0.0/12"
指定服务 VIP 可使用的其他 IP 地址段。
--service-dns-domain string     默认值:"cluster.local"
为服务使用其他域名,例如 "myorg.internal"。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

生成供 API 服务器连接 kubelet 的证书,并将其保存到 apiserver-kubelet-client.cert 和 apiserver-kubelet-client.key 文件中。

如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。

Alpha 免责声明:此命令当前为 Alpha 功能。

kubeadm init phase certs apiserver-kubelet-client [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件路径。
-h, --help
apiserver-kubelet-client 操作的帮助命令
--kubernetes-version string     默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。

继承于父命令的选项

--rootfs string
[实验] 指向宿主机上的 '实际' 根文件系统的路径。

概要

生成自签名 CA 来提供前端代理的身份,并将其保存到 front-proxy-ca.cert 和 front-proxy-ca.key 文件中。

如果两个文件都已存在,kubeadm 将跳过生成步骤并将使用现有文件。

Alpha 免责声明:此命令目前是 alpha 阶段。

kubeadm init phase certs front-proxy-ca [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
front-proxy-ca 操作的帮助命令
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

为前端代理客户端生成证书,并将其保存到 front-proxy-client.cert 和 front-proxy-client.key 文件中。 如果两个文件都已存在,kubeadm 将跳过生成步骤并将使用现有文件。 Alpha 免责声明:此命令目前是 alpha 阶段。

kubeadm init phase certs front-proxy-client [flags]

选项

--cert-dir string     默认:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
front-proxy-client 操作的帮助命令
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

生成用于为 etcd 设置身份的自签名 CA,并将其保存到 etcd/ca.cert 和 etcd/ca.key 文件中。

如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。

Alpha 免责声明:此命令当前为 Alpha 功能。

kubeadm init phase certs etcd-ca [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
证书的存储路径。
--config string
kubeadm 配置文件的路径。
-h, --help
etcd-ca 操作的帮助命令
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

生成用于提供 etcd 服务的证书,并将其保存到 etcd/server.cert 和 etcd/server.key 文件中。

默认 SAN 为 localhost、127.0.0.1、127.0.0.1、:: 1

如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。

Alpha 免责声明:此命令当前为 alpha 功能。

kubeadm init phase certs etcd-server [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
etcd-server 操作的帮助命令
--kubernetes-version string     默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

生成 etcd 节点相互通信的证书,并将其保存到 etcd/peer.cert 和 etcd/peer.key 文件中。

默认 SAN 为 localhost、127.0.0.1、127.0.0.1、:: 1

如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。

Alpha 免责声明:此命令当前为 alpha 功能。

kubeadm init phase certs etcd-peer [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
etcd-peer 操作的帮助命令
--kubernetes-version string     默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

生成用于 etcd 健康检查的活跃性探针的证书,并将其保存到 healthcheck-client.cert 和 etcd/healthcheck-client.key 文件中。

如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。

Alpha 免责声明:此命令当前为 alpha 功能。

kubeadm init phase certs etcd-healthcheck-client [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
证书存储的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
etcd-healthcheck-client 操作的帮助命令
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

生成 apiserver 用于访问 etcd 的证书,并将其保存到 apiserver-etcd-client.cert 和 apiserver-etcd-client.key 文件中。

如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。

Alpha 免责声明:此命令当前为 Alpha 功能。

kubeadm init phase certs apiserver-etcd-client [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
证书的存储路径。
--config string
kubeadm 配置文件的路径。
-h, --help
apiserver-etcd-client 操作的帮助命令
--kubernetes-version string     默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

生成用于签名 service account 令牌的私钥及其公钥,并将其保存到 sa.key 和 sa.pub 文件中。如果两个文件都已存在,则 kubeadm 会跳过生成步骤,而将使用现有文件。

Alpha 免责声明:此命令当前为 alpha 阶段。

kubeadm init phase certs sa [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
-h, --help
sa 操作的帮助命令

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

kubeadm init phase kubeconfig

可以通过调用 all 子命令来创建所有必需的 kubeconfig 文件,或者分别调用它们。

概要

此命令并非设计用来单独运行。请阅读可用子命令列表。

kubeadm init phase kubeconfig [flags]

选项

-h, --help
kubeconfig 操作的帮助命令

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

生成所有 kubeconfig 文件

kubeadm init phase kubeconfig all [flags]

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果没有设置,将使用默认的网络接口。
--apiserver-bind-port int32     默认值:6443
要绑定到 API 服务器的端口。
--cert-dir string     默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
-h, --help
all 操作的帮助命令
--kubeconfig-dir string     默认值:"/etc/kubernetes"
kubeconfig 文件的保存路径。
--kubernetes-version string     默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。
--node-name string
指定节点名称。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

为管理员和 kubeadm 本身生成 kubeconfig 文件,并将其保存到 admin.conf 文件中。

kubeadm init phase kubeconfig admin [flags]

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
--apiserver-bind-port int32     默认值:6443
要绑定到 API 服务器的端口。
--cert-dir string     默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
-h, --help
admin 操作的帮助命令
--kubeconfig-dir string     默认值:"/etc/kubernetes"
kubeconfig 文件的保存路径。
--kubernetes-version string     默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

生成 kubelet 要使用的 kubeconfig 文件,并将其保存到 kubelet.conf 文件。

请注意,该操作目的是应用于引导集群。在控制平面启动之后,应该从 CSR API 请求所有 kubelet 凭据。

kubeadm init phase kubeconfig kubelet [flags]

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
--apiserver-bind-port int32     默认值:6443
要绑定到 API 服务器的端口。
--cert-dir string     默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
-h, --help
kubelet 操作的帮助命令
--kubeconfig-dir string     默认值:"/etc/kubernetes"
kubeconfig 文件的保存路径。
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--node-name string
指定节点的名称。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

生成控制器管理器要使用的 kubeconfig 文件,并保存到 controller-manager.conf 文件中。

kubeadm init phase kubeconfig controller-manager [flags]

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
--apiserver-bind-port int32     默认值:6443
要绑定到 API 服务器的端口。
--cert-dir string     默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
-h, --help
controller-manager 操作的帮助命令
--kubeconfig-dir string     默认值:"/etc/kubernetes"
kubeconfig 文件的保存路径。
--kubernetes-version string     默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。

继承于父命令的选项

--rootfs 字符串
[实验] 到 '真实' 主机根文件系统的路径。

概要

生成调度器(scheduler)要使用的 kubeconfig 文件,并保存到 scheduler.conf 文件中。

kubeadm init phase kubeconfig scheduler [flags]

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
--apiserver-bind-port int32     默认值:6443
要绑定到 API 服务器的端口。
--cert-dir string     默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
-h, --help
scheduler 操作的帮助命令
--kubeconfig-dir string     默认值:"/etc/kubernetes"
kubeconfig 文件的保存路径。
--kubernetes-version string     默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

kubeadm init phase control-plane

使用此阶段,可以为控制平面组件创建所有必需的静态 Pod 文件。

概要

此命令并非设计用来单独运行。请参阅可用子命令列表。

kubeadm init phase control-plane [flags]

选项

-h, --help
control-plane 操作的帮助命令

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

生成所有的静态 Pod 清单文件

kubeadm init phase control-plane all [flags]

示例

# 为控制平面组件生成静态 Pod 清单文件,其功能等效于 kubeadm init 生成的文件。
kubeadm init phase control-plane all

# 使用从某配置文件中读取的选项为生成静态 Pod 清单文件。
kubeadm init phase control-plane all --config config.yaml

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,将使用默认的网络接口。
--apiserver-bind-port int32     默认值:6443
API 服务器要绑定的端口。
--apiserver-extra-args mapStringString
形式为 <flagname>=<value> 的一组额外参数,用来传递给 API 服务器, 或者覆盖其默认配置值
--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面选择一个稳定的 IP 地址或者 DNS 名称。
--controller-manager-extra-args mapStringString
一组形式为 <flagname>=<value> 的额外参数,用来传递给控制管理器(Controller Manager) 或覆盖其默认设置值
--experimental-patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录。 例如,"kube-apiserver0+merge.yaml" 或者 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,分别与 kubectl 所支持的 patch 格式相匹配。默认的 "patchtype" 是 "strategic"。 "extension" 必须是 "json" 或 "yaml"。 "suffix" 是一个可选的字符串,用来确定按字母顺序排序时首先应用哪些 patch。
--feature-gates string
一组用来描述各种特性门控的键值(key=value)对。选项是:
IPv6DualStack=true|false (ALPHA - 默认=false)
PublicKeysECDSA=true|false (ALPHA - 默认=false)
-h, --help
all 操作的帮助命令
--image-repository string     默认值:"k8s.gcr.io"
选择用于拉取控制平面镜像的容器仓库
--kubernetes-version string     默认值:"stable-1"
为控制平面选择指定的 Kubernetes 版本。
--pod-network-cidr string
指定 Pod 网络的 IP 地址范围。如果设置了此标志,控制平面将自动地为每个节点分配 CIDR。
--scheduler-extra-args mapStringString
一组形式为 <flagname>=<value> 的额外参数,用来传递给调度器(Scheduler) 或覆盖其默认设置值

传递给调度器(scheduler)一组额外的参数或者以 <flagname>=<value> 形式覆盖其默认值。

--service-cidr string     默认值:"10.96.0.0/12"
为服务 VIP 选择 IP 地址范围。

从父指令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机的根文件系统的路径。

概要

生成 kube-apiserver 静态 Pod 清单

kubeadm init phase control-plane apiserver [flags]

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,将使用默认网络接口。
--apiserver-bind-port int32     默认值: 6443
要绑定到 API 服务器的端口。
--apiserver-extra-args mapStringString
一组 <flagname>=<value> 形式的额外参数,用来传递给 API 服务器 或者覆盖其默认参数配置
--cert-dir string     默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
包含名为 "target[suffix][+patchtype].extension" 的文件的目录。 例如,"kube-apiserver0+merge.yaml" 或者 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,分别与 kubectl 所支持的 patch 格式相匹配。默认的 "patchtype" 是 "strategic"。 "extension" 必须是 "json" 或 "yaml"。 "suffix" 是一个可选的字符串,用来确定按字母顺序排序时首先应用哪些 patch。
--feature-gates string
一组键值对,用于描述各种功能特性的特性门控。选项是:
IPv6DualStack=true|false (ALPHA - 默认=false)
PublicKeysECDSA=true|false (ALPHA - 默认=false)
-h, --help
apiserver 操作的帮助命令
--image-repository string     默认值:"k8s.gcr.io"
选择要从中拉取控制平面镜像的容器仓库
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本
--service-cidr string     默认值:"10.96.0.0/12"
指定服务 VIP 使用 IP 地址的其他范围。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统路径。

概要

生成 kube-controller-manager 静态 Pod 清单

kubeadm init phase control-plane controller-manager [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--controller-manager-extra-args mapStringString
一组 <flagname>=< 形式的额外参数,传递给控制器管理器(Controller Manager) 或者覆盖其默认配置值
包含名为 "target[suffix][+patchtype].extension" 的文件的目录。 例如,"kube-apiserver0+merge.yaml" 或者 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,分别与 kubectl 所支持的 patch 格式相匹配。默认的 "patchtype" 是 "strategic"。 "extension" 必须是 "json" 或 "yaml"。 "suffix" 是一个可选的字符串,用来确定按字母顺序排序时首先应用哪些 patch。
-h, --help
controller-manager 操作的帮助命令
--image-repository string     默认值:"k8s.gcr.io"
选择要从中拉取控制平面镜像的容器仓库
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--pod-network-cidr string
指定 Pod 网络的 IP 地址范围。如果设置,控制平面将自动为每个节点分配 CIDR。

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

生成 kube-scheduler 静态 Pod 清单

kubeadm init phase control-plane scheduler [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--experimental-patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录。 例如,"kube-apiserver0+merge.yaml" 或者 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,分别与 kubectl 所支持的 patch 格式相匹配。默认的 "patchtype" 是 "strategic"。 "extension" 必须是 "json" 或 "yaml"。 "suffix" 是一个可选的字符串,用来确定按字母顺序排序时首先应用哪些 patch。
-h, --help
scheduler 操作的帮助命令
--image-repository string     默认值:"k8s.gcr.io"
选择要从中拉取控制平面镜像的容器仓库
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--scheduler-extra-args mapStringString
一组 <flagname>=<value> 形式的额外参数,用来传递给调度器 或者覆盖其默认参数配置

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

kubeadm init phase etcd

根据静态 Pod 文件,使用以下阶段创建本地 etcd 实例。

概要

此命令并非设计用来单独运行。请参阅可用子命令列表。

kubeadm init phase etcd [flags]

选项

-h, --help
etcd 操作的帮助命令

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

为本地单节点 etcd 实例生成静态 Pod 清单文件

kubeadm init phase etcd local [flags]

示例

# 为 etcd 生成静态 Pod 清单文件,其功能等效于 kubeadm init 生成的文件。
kubeadm init phase etcd local

# 使用从配置文件读取的选项为 etcd 生成静态 Pod 清单文件。
kubeadm init phase etcd local --config config.yaml

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--experimental-patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。 例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。 默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。 "suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
-h, --help
local 操作的帮助命令
--image-repository string     默认值:"k8s.gcr.io"
选择要从中拉取控制平面镜像的容器仓库

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

kubeadm init phase upload-config

可以使用此命令将 kubeadm 配置文件上传到集群。或者使用 kubeadm config

概要

此命令并非设计用来单独运行。请参阅可用的子命令列表。

kubeadm init phase upload-config [flags]

选项

-h, --help
upload-config 操作的帮助命令

从父命令中继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

将所有配置上传到 ConfigMap

kubeadm init phase upload-config all [flags]

选项

--config string
kubeadm 配置文件的路径。
-h, --help
all 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

将 kubeadm ClusterConfiguration 上传到 kube-system 命名空间中名为 kubeadm-config 的 ConfigMap 中。 这样就可以正确配置系统组件,并在升级时提供无缝的用户体验。

另外,可以使用 kubeadm 配置。

kubeadm init phase upload-config kubeadm [flags]

示例

# 上传集群配置
kubeadm init phase upload-config --config=myConfig.yaml

选项

--config string
kubeadm 配置文件的路径。
-h, --help
kubeadm 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

将从 kubeadm InitConfiguration 对象提取的 kubelet 配置上传到集群中 kubelet-config-1.X 形式的 ConfigMap,其中 X 是当前(API 服务器)Kubernetes 版本的次要版本。

kubeadm init phase upload-config kubelet [flags]

示例

# 将 kubelet 配置从 kubeadm 配置文件上传到集群中的 ConfigMap。
kubeadm init phase upload-config kubelet --config kubeadm.yaml

选项

--config string
到 kubeadm 配置文件的路径。
-h, --help
kubelet 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该标签,则可以通过一组标准路径来寻找已有的 kubeconfig 文件。

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

kubeadm init phase upload-certs

使用以下阶段将控制平面证书上传到集群。默认情况下,证书和加密密钥会在两个小时后过期。

概要

此命令并非设计用来单独运行。请参阅可用子命令列表。

kubeadm init phase upload-certs [flags]

选项

--certificate-key string
用于加密 kubeadm-certs Secret 中的控制平面证书的密钥。
--config string
kubeadm 配置文件的路径。
-h, --help
upload-certs 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
用来与集群通信的 kubeconfig 文件。 如果此标志未设置,则可以在一组标准的位置搜索现有的 kubeconfig 文件。
--skip-certificate-key-print
不要打印输出用于加密控制平面证书的密钥。
--upload-certs
将控制平面证书上传到 kubeadm-certs Secret。

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

kubeadm init phase mark-control-plane

使用以下阶段来给具有 node-role.kubernetes.io/master="" 键值对的节点 打标签(label)和记录污点(taint)。

概要

标记 Node 节点为控制平面节点

kubeadm init phase mark-control-plane [flags]

示例

# 将控制平面标签和污点应用于当前节点,其功能等效于 kubeadm init执行的操作。
kubeadm init phase mark-control-plane --config config.yml

# 将控制平面标签和污点应用于特定节点
kubeadm init phase mark-control-plane --node-name myNode

选项

--config string
kubeadm 配置文件的路径。
-h, --help
mark-control-plane 操作的帮助命令
--node-name string
指定节点名称。

从父命令继承的选项

--rootfs 字符串
[实验] 到 '真实' 主机根文件系统的路径。

kubeadm init phase bootstrap-token

使用以下阶段来配置引导令牌。

概要

启动引导令牌(bootstrap token)用于在即将加入集群的节点和控制平面节点之间建立双向信任。

该命令使启动引导令牌(bootstrap token)所需的所有配置生效,然后创建初始令牌。

kubeadm init phase bootstrap-token [flags]

示例

# 进行所有引导令牌配置,并创建一个初始令牌,功能上与 kubeadm init 生成的令牌等效。
kubeadm init phase bootstrap-token

选项

--config string
kubeadm 配置文件的路径。
-h, --help
bootstrap-token 操作的帮助命令
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--skip-token-print
跳过打印 'kubeadm init' 生成的默认引导令牌。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

kubeadm init phase kubelet-finialize

使用以下阶段在 TLS 引导后更新与 kubelet 相关的设置。 你可以使用 all 子命令来运行所有 kubelet-finalize 阶段。

TLS 引导后更新与 kubelet 相关的设置

kubeadm init phase kubelet-finalize [flags]

示例

  # 在 TLS 引导后更新与 kubelet 相关的设置
  kubeadm init phase kubelet-finalize all --config

选项

-h, --help
kubelet-finalize 操作的帮助命令

继承于父命令的选项

--rootfs string
[实验] 到'真实'主机根文件系统的路径。

运行所有 kubelet-finalize 阶段

kubeadm init phase kubelet-finalize all [flags]

示例

  # 在 TLS 引导后更新与 kubelet 相关的设置
  kubeadm init phase kubelet-finalize all --config

选项

--cert-dir string     默认值: "/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
all 操作的帮助命令

继承于父命令的选项

--rootfs string
[实验] 到'真实'主机根文件系统的路径。

启用 kubelet 客户端证书轮换

kubeadm init phase kubelet-finalize experimental-cert-rotation [flags]

选项

--cert-dir string     Default: "/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
experimental-cert-rotation 操作的帮助命令

继承于父命令的选项

--rootfs string
[实验] 到'真实'主机根文件系统的路径。

kubeadm init phase addon

可以使用 all 子命令安装所有可用的插件,或者有选择性地安装它们。

概要

此命令并非设计用来单独运行。请参阅可用子命令列表。

kubeadm init phase addon [flags]

选项

-h, --help
addon 操作的帮助命令

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

安装所有插件(addon)

kubeadm init phase addon all [flags]

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则将使用默认网络接口。
--apiserver-bind-port int32     默认值:6443
API 服务器绑定的端口。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--feature-gates string
一组键值对(key=value),描述了各种特征。选项包括:
IPv6DualStack=true|false (ALPHA - 默认值=false)
-h, --help
--image-repository string     默认值:"k8s.gcr.io"
选择用于拉取控制平面镜像的容器仓库
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--pod-network-cidr string
指定 Pod 网络的 IP 地址范围。如果已设置,控制平面将自动为每个节点分配 CIDR。
--service-cidr string     默认值:"10.96.0.0/12"
为服务 VIP 使用 IP 地址的其他范围。
--service-dns-domain string     默认值:"cluster.local"
为服务使用其他域名,例如 "myorg.internal"。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

通过 API 服务器安装 CoreDNS 附加组件。请注意,即使 DNS 服务器已部署,在安装 CNI 之前 DNS 服务器不会被调度执行。

kubeadm init phase addon coredns [flags]

选项

--config string
kubeadm 配置文件的路径。
--feature-gates string
一组用来描述各种功能特性的键值(key=value)对。选项是:
IPv6DualStack=true|false (ALPHA - 默认值=false)
-h, --help
coredns 操作的帮助命令
--image-repository string     默认值:"k8s.gcr.io"
选择用于拉取控制平面镜像的容器仓库
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--service-cidr string     默认值:"10.96.0.0/12"
为服务 VIP 选择 IP 地址范围。
--service-dns-domain string     默认值:"cluster.local"
服务使用其它的域名,例如:"myorg.internal"。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

通过 API 服务器安装 kube-proxy 附加组件。

kubeadm init phase addon kube-proxy [flags]

选项

--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则将使用默认网络接口。
--apiserver-bind-port int32     默认值: 6443
API 服务器绑定的端口。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
-h, --help
kube-proxy 操作的帮助命令
--image-repository string     默认值:"k8s.gcr.io"
选择用于拉取控制平面镜像的容器仓库
--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--kubernetes-version string     默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--pod-network-cidr string
指定 Pod 网络的 IP 地址范围。如果已设置,控制平面将自动为每个节点分配 CIDR。

继承于父命令的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

有关 v1beta2 配置中每个字段的更多详细信息,可以访问 API

接下来

12 - kubeadm join phase

kubeadm join phase 使你能够调用 join 过程的基本原子步骤。 因此,如果希望执行自定义操作,可以让 kubeadm 做一些工作,然后由用户来补足剩余操作。

kubeadm join phasekubeadm join 工作流程 一致,后台都使用相同的代码。

kubeadm join phase

概要

使用此命令来调用 join 工作流程的某个阶段

选项

-h, --help
phase 操作的帮助命令

从父命令中继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

kubeadm join phase preflight

使用此命令可以在即将加入集群的节点上执行启动前检查。

概要

运行 kubeadm join 命令添加节点前检查。

kubeadm join phase preflight [api-server-endpoint] [flags]

示例

# 使用配置文件运行 kubeadm join 命令添加节点前检查。
kubeadm join phase preflight --config kubeadm-config.yml

选项

--apiserver-advertise-address string
对于将要托管新的控制平面实例的节点,指定 API 服务器将公布的其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--apiserver-bind-port int32     默认值:6443
针对将要托管新的控制平面实例的节点,设置 API 服务器要绑定的端口。
--certificate-key string
使用此密钥可以解密由 `init` 操作上传的证书 secret。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例
--cri-socket string
提供给 CRI 套接字建立连接的路径。如果为空,则 kubeadm 将尝试自动检测该值;仅当安装了多个 CRI 或具有非标准 CRI 套接字时,才使用此选项。
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash stringSlice
对于基于令牌的发现,验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
-h, --help
preflight 操作的帮助命令
--ignore-preflight-errors stringSlice
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--node-name string
指定节点名称。
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

kubeadm join phase control-plane-prepare

使用此阶段,你可以准备一个作为控制平面的节点。

概要

准备为控制平面服务的机器

kubeadm join phase control-plane-prepare [flags]

示例

# 准备为控制平面服务的机器
kubeadm join phase control-plane-prepare all

选项

-h, --help
control-plane-prepare 操作的帮助命令

从父命令中继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

概要

准备为控制平面服务的机器

kubeadm join phase control-plane-prepare all [api-server-endpoint] [flags]

选项

--apiserver-advertise-address string
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--apiserver-bind-port int32     默认值:6443
如果该节点托管一个新的控制平面实例,则为 API 服务器要绑定的端口。
--certificate-key string
使用此密钥解密由 init 上传的证书 secrets。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash stringSlice
对于基于令牌的发现,请验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
--experimental-patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。 例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。 默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。 "suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
-h, --help
all 操作的帮助命令
--node-name string
指定节点名称。
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

概要

[实验]从 kubeadm-certs Secret 下载控制平面节点之间共享的证书

kubeadm join phase control-plane-prepare download-certs [api-server-endpoint] [flags]

选项

--certificate-key string
使用此密钥可以解密由 init 上传的证书 secret。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash stringSlice
对于基于令牌的发现,请验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
-h, --help
kubeconfig 操作的帮助命令
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。

从父命令中继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

概要

为新的控制平面组件生成证书

kubeadm join phase control-plane-prepare certs [api-server-endpoint] [flags]

选项

--apiserver-advertise-address string
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash stringSlice
对于基于令牌的发现,请验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
-h, --help
certs 操作的帮助命令
--node-name string
指定节点名称。
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

概要

为新的控制平面组件生成 kubeconfig

kubeadm join phase control-plane-prepare kubeconfig [api-server-endpoint] [flags]

选项

--certificate-key string
使用此密钥可以解密由 init 上传的证书 secret。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash stringSlice
对于基于令牌的发现,请验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
-h, --help
kubeconfig 操作的帮助命令
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。

从父命令中继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

概要

为新的控制平面组件生成清单(manifest)

kubeadm join phase control-plane-prepare control-plane [flags]

选项

--apiserver-advertise-address string
对于将要托管新的控制平面实例的节点,指定 API 服务器将公布的其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--apiserver-bind-port int32     默认值:6443
针对将要托管新的控制平面实例的节点,设置 API 服务器要绑定的端口。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例
--experimental-patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。 例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。 默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。 "suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
-h, --help
control-plane 操作的帮助命令

从父命令中继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

kubeadm join phase kubelet-start

使用此阶段,你可以配置 kubelet 设置、证书和(重新)启动 kubelet。

概要

生成一个包含 KubeletConfiguration 的文件和一个包含特定于节点的 kubelet 配置的环境文件,然后(重新)启动 kubelet。

kubeadm join phase kubelet-start [api-server-endpoint] [flags]

选项

--config string
kubeadm 配置文件的路径。
--cri-socket string
提供给 CRI 套接字建立连接的路径。如果为空,则 kubeadm 将尝试自动检测该值;仅当安装了多个 CRI 或具有非标准 CRI 套接字时,才使用此选项。
--discovery-file string
For file-based discovery, a file or URL from which to load cluster information. 对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash stringSlice
对于基于令牌的发现,验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
-h, --help
kubelet-start 操作的帮助命令
--node-name string
指定节点名称。
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

kubeadm join phase control-plane-join

使用此阶段,你可以将节点作为控制平面实例加入。

概要

添加作为控制平面实例的机器

kubeadm join phase control-plane-join [flags]

示例

# 将机器作为控制平面实例加入
kubeadm join phase control-plane-join all

选项

-h, --help
control-plane-join 操作的帮助命令

从父命令中继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

添加作为控制平面实例的机器

kubeadm join phase control-plane-join all [flags]

选项

--apiserver-advertise-address string
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--config string
kubeadm 配置文件的路径。
--experimental-control-plane
在此节点上创建一个新的控制平面实例
-h, --help
all 操作的帮助命令
--node-name string
指定节点名称。

从父命令继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

添加新的本地 etcd 成员

kubeadm join phase control-plane-join etcd [flags]

选项

--apiserver-advertise-address string
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例
--experimental-patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。 例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。 "patchtype" 可以是"strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。 默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。 "suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
-h, --help
etcd 操作的帮助命令
--node-name string
指定节点的名称

从父命令中继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

将新的控制平面节点注册到 kubeadm-config ConfigMap 维护的 ClusterStatus 中

kubeadm join phase control-plane-join update-status [flags]

选项

--apiserver-advertise-address string
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例
-h, --help
update-status 操作的帮助命令
--node-name string
指定节点名称。

从父命令中继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

概要

将 Node 节点标记为控制平面节点

kubeadm join phase control-plane-join mark-control-plane [flags]

选项

--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例
-h, --help
mark-control-plane 操作的帮助命令
--node-name string
指定节点的名称

从父命令中继承的选项

--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。

接下来

13 - kubeadm reset phase

kubeadm reset phase 使你能够调用 reset 过程的基本原子步骤。 因此,如果希望执行自定义操作,可以让 kubeadm 做一些工作,然后由用户来补足剩余操作。

kubeadm reset phasekubeadm reset 工作流程 一致,后台都使用相同的代码。

kubeadm reset phase

概要

使用此命令来调用 reset 工作流程的某个阶段

选项

-h, --help
phase 操作的帮助命令

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

kubeadm reset phase preflight

使用此阶段,你可以在要重置的节点上执行启动前检查阶段。

概要

kubeadm reset(重置)前运行启动前检查。

kubeadm reset phase preflight [flags]

选项

-f, --force
在不提示确认的情况下重置节点。
-h, --help
preflight 操作的帮助命令
--ignore-preflight-errors stringSlice
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

kubeadm reset phase update-cluster-status

使用此阶段,你可以从 ClusterStatus 对象中删除此控制平面节点。

概要

如果该节点是控制平面节点,从 ClusterStatus 对象中删除该节点。

kubeadm reset phase update-cluster-status [flags]

选项

-h, --help
update-cluster-status 操作的帮助命令

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

kubeadm reset phase remove-etcd-member

使用此阶段,你可以从 etcd 集群中删除此控制平面节点的 etcd 成员。

概要

上传关于当前状态的配置,以便 'kubeadm upgrade' 以后可以知道如何配置升级后的集群。

kubeadm config upload [flags]

选项

-h, --help
upload 操作的帮助信息

从父命令继承的选项

--kubeconfig string     默认值: "/etc/kubernetes/admin.conf"
用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。
--rootfs string
[实验] 到'真实'主机根文件系统的路径。

kubeadm reset phase cleanup-node

使用此阶段,你可以在此节点上执行清理工作。

概要

执行 cleanup node(清理节点)操作。

kubeadm reset phase cleanup-node [flags]

选项

--cert-dir string     默认值:"/etc/kubernetes/pki"
存储证书的目录路径。如果已指定,则需要清空此目录。
--cri-socket string
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;仅当安装了多个CRI 或具有非标准 CRI 插槽时,才使用此选项。
-h, --help
cleanup-node 操作的帮助命令

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

接下来

14 - kubeadm upgrade phase

在 Kubernetes v1.15.0 版本中,kubeadm 引入了对 kubeadm upgrade node 阶段的初步支持。其他 kubeadm upgrade 子命令如 apply 等阶段将在未来发行版中添加。

kubeadm upgrade node phase

使用此阶段,可以选择执行辅助控制平面或工作节点升级的单独步骤。请注意,kubeadm upgrade apply 命令仍然必须在主控制平面节点上调用。

概要

使用此命令调用 node 工作流的某个阶段

选项

-h, --help
phase 操作的帮助命令

从父命令继承的选项

--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。

执行 kubeadm 升级节点的预检。

kubeadm upgrade node phase preflight [flags]

选项

-h, --help
preflight 操作的帮助命令
--ignore-preflight-errors stringSlice
错误将显示为警告的检查清单。示例:'IsPrivilegedUser,Swap'。值为'all'表示忽略所有检查的错误。

继承于父命令的选项

--rootfs string
[实验] 到'真实'主机根文件系统的路径。

概要

升级部署在此节点上的控制平面实例,如果有的话

kubeadm upgrade node phase control-plane [flags]

选项

--certificate-renewal
更新在升级期间变更的组件使用的证书。
--dry-run
不改变任何状态,只输出将要执行的动作。
--etcd-upgrade     默认值: true
执行 etcd 的升级。
--experimental-patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。 例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。 "patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。 默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。 "suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
-h, --help
control-plane 的帮助信息
--kubeconfig string     默认值: "/etc/kubernetes/admin.conf"
用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。

从父命令继承的选项

--rootfs string
[实验] 到'真实'主机根文件系统的路径。

从群集中 "kubelet-config-1.X" 的 ConfigMap 下载 kubelet 配置,其中 X 是kubelet 的次要版本。 kubeadm 使用 --kubelet-version 参数来确定所需的 kubelet 版本。

kubeadm upgrade node phase kubelet-config [flags]

选项

--dry-run
不改变任何状态,只输出将要执行的操作
-h, --help
配置操作的帮助信息
--kubeconfig string     默认值: "/etc/kubernetes/kubelet.conf"
用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。
--kubelet-version string
升级后的 kubelet 的*期望*版本。

从父命令继承的选项

--rootfs string
[实验] 到'真实'主机根文件系统的路径。

接下来

15 - 实现细节

FEATURE STATE: Kubernetes v1.10 [stable]

kubeadm initkubeadm join 结合在一起提供了良好的用户体验,因为从头开始创建实践最佳而配置最基本的 Kubernetes 集群。 但是,kubeadm 如何 做到这一点可能并不明显。

本文档提供了更多幕后的详细信息,旨在分享有关 Kubernetes 集群最佳实践的知识。

核心设计原则

kubeadm initkubeadm join 设置的集群该是:

  • 安全的:它应采用最新的最佳实践,例如:
    • 实施 RBAC 访问控制
    • 使用节点鉴权机制(Node Authorizer)
    • 在控制平面组件之间使用安全通信
    • 在 API 服务器和 kubelet 之间使用安全通信
    • 锁定 kubelet API
    • 锁定对系统组件(例如 kube-proxy 和 CoreDNS)的 API 的访问
    • 锁定启动引导令牌(Bootstrap Token)可以访问的内容
  • 用户友好:用户只需要运行几个命令即可:
    • kubeadm init
    • export KUBECONFIG=/etc/kubernetes/admin.conf
    • kubectl apply -f <所选网络.yaml>
    • kubeadm join --token <令牌> <端点>:<端口>
  • 可扩展的
    • 应偏向任何特定的网络提供商。不涉及配置集群网络
    • 应该可以使用配置文件来自定义各种参数

常量以及众所周知的值和路径

为了降低复杂性并简化基于 kubeadm 的高级工具的开发,对于众所周知的路径和文件名, kubeadm 使用了一组有限的常量值。

Kubernetes 目录 /etc/kubernetes 在应用程序中是一个常量,因为在大多数情况下 它显然是给定的路径,并且是最直观的位置;其他路径常量和文件名有:

  • /etc/kubernetes/manifests 作为 kubelet 查找静态 Pod 清单的路径。静态 Pod 清单的名称为:
    • etcd.yaml
    • kube-apiserver.yaml
    • kube-controller-manager.yaml
    • kube-scheduler.yaml
  • /etc/kubernetes/ 作为带有控制平面组件身份标识的 kubeconfig 文件的路径。kubeconfig 文件的名称为:
    • kubelet.conf (在 TLS 引导时名称为 bootstrap-kubelet.conf )
    • controller-manager.conf
    • scheduler.conf
    • admin.conf 用于集群管理员和 kubeadm 本身
  • 证书和密钥文件的名称:
    • ca.crt, ca.key 用于 Kubernetes 证书颁发机构
    • apiserver.crt, apiserver.key 用于 API 服务器证书
    • apiserver-kubelet-client.crt, apiserver-kubelet-client.key 用于 API 服务器安全地连接到 kubelet 的客户端证书
    • sa.pub, sa.key 用于控制器管理器签署 ServiceAccount 时使用的密钥
    • front-proxy-ca.crt, front-proxy-ca.key 用于前端代理证书颁发机构
    • front-proxy-client.crt, front-proxy-client.key 用于前端代理客户端

kubeadm init 工作流程内部设计

kubeadm init 内部工作流程 包含一系列要执行的原子性工作任务,如 kubeadm init 中所述。

kubeadm init phase 命令允许用户分别调用每个任务,并最终提供可重用且可组合的 API 或工具箱, 其他 Kubernetes 引导工具、任何 IT 自动化工具和高级用户都可以使用它来 创建自定义集群。

预检

Kubeadm 在启动 init 之前执行一组预检,目的是验证先决条件并避免常见的集群启动问题。 用户可以使用 --ignore-preflight-errors 选项跳过特定的预检查或全部检查。

  • [警告] 如果要使用的 Kubernetes 版本(由 --kubernetes-version 标志指定)比 kubeadm CLI 版本至少高一个小版本。
  • Kubernetes 系统要求:
    • 如果在 linux上运行:
      • [错误] 如果内核早于最低要求的版本
      • [错误] 如果未设置所需的 cgroups 子系统
    • 如果使用 docker:
      • [警告/错误] 如果 Docker 服务不存在、被禁用或未激活。
      • [错误] 如果 Docker 端点不存在或不起作用
      • [警告] 如果 docker 版本不在经过验证的 docker 版本列表中
    • 如果使用其他 cri 引擎:
      • [错误] 如果 crictl 套接字未应答
  • [错误] 如果用户不是 root 用户
  • [错误] 如果机器主机名不是有效的 DNS 子域
  • [警告] 如果通过网络查找无法访问主机名
  • [错误] 如果 kubelet 版本低于 kubeadm 支持的最低 kubelet 版本(当前小版本 -1)
  • [错误] 如果 kubelet 版本比所需的控制平面板版本至少高一个小(不支持的版本偏斜)
  • [警告] 如果 kubelet 服务不存在或已被禁用
  • [警告] 如果 firewalld 处于活动状态
  • [错误] 如果 API ​​服务器绑定的端口或 10250/10251/10252 端口已被占用
  • [错误] 如果 /etc/kubernetes/manifest 文件夹已经存在并且不为空
  • [错误] 如果 /proc/sys/net/bridge/bridge-nf-call-iptables 文件不存在或不包含 1
  • [错误] 如果建议地址是 ipv6,并且 /proc/sys/net/bridge/bridge-nf-call-ip6tables 不存在或不包含 1
  • [错误] 如果启用了交换分区
  • [错误] 如果命令路径中没有 conntrackipiptablesmountnsenter 命令
  • [警告] 如果命令路径中没有 ebtablesethtoolsocattctouchcrictl 命令
  • [警告] 如果 API 服务器、控制器管理器、调度程序的其他参数标志包含一些无效选项
  • [警告] 如果与 https://API.AdvertiseAddress:API.BindPort 的连接通过代理
  • [警告] 如果服务子网的连接通过代理(仅检查第一个地址)
  • [警告] 如果 Pod 子网的连接通过代理(仅检查第一个地址)
  • 如果提供了外部 etcd:
    • [错误] 如果 etcd 版本低于最低要求版本
    • [错误] 如果指定了 etcd 证书或密钥,但无法找到
  • 如果未提供外部 etcd(因此将安装本地 etcd):
    • [错误] 如果端口 2379 已被占用
    • [错误] 如果 Etcd.DataDir 文件夹已经存在并且不为空
  • 如果授权模式为 ABAC:
    • [错误] 如果 abac_policy.json 不存在
  • 如果授权方式为 Webhook
    • [错误] 如果 webhook_authz.conf 不存在

请注意:

  1. 可以使用 kubeadm init phase preflight 命令单独触发预检。

生成必要的证书

Kubeadm 生成用于不同目的的证书和私钥对:

  • Kubernetes 集群的自签名证书颁发机构会保存到 ca.crt 文件和 ca.key 私钥文件中

  • 用于 API 服务器的服务证书,使用 ca.crt 作为 CA 生成,并将证书保存到 apiserver.crt 文件中,私钥保存到 apiserver.key 文件中 该证书应包含以下备用名称:

    • Kubernetes 服务的内部 clusterIP(服务 CIDR 的第一个地址。 例如:如果服务的子网是 10.96.0.0/12,则为 10.96.0.1
    • Kubernetes DNS 名称,例如:如果 --service-dns-domain 标志值是 cluster.local, 则为 kubernetes.default.svc.cluster.local; 加上默认的 DNS 名称 kubernetes.default.svckubernetes.defaultkubernetes
    • 节点名称
    • --apiserver-advertise-address
    • 用户指定的其他备用名称
  • 用于 API 服务器安全连接到 kubelet 的客户端证书,使用 ca.crt 作为 CA 生成, 并保存到 apiserver-kubelet-client.crt,私钥保存到 apiserver-kubelet-client.key 文件中。该证书应该在 system:masters 组织中。

  • 用于签名 ServiceAccount 令牌的私钥保存到 sa.key 文件中,公钥保存到 sa.pub 文件中

  • 用于前端代理的证书颁发机构保存到 front-proxy-ca.crt 文件中,私钥保存到 front-proxy-ca.key 文件中

  • 前端代理客户端的客户端证书,使用 front-proxy-ca.crt 作为 CA 生成,并保存到 front-proxy-client.crt 文件中,私钥保存到 front-proxy-client.key 文件中

证书默认情况下存储在 /etc/kubernetes/pki 中,但是该目录可以使用 --cert-dir 标志进行配置。

请注意:

  1. 如果证书和私钥对都存在,并且其内容经过评估符合上述规范,将使用现有文件, 并且跳过给定证书的生成阶段。 这意味着用户可以将现有的 CA 复制到 /etc/kubernetes/pki/ca.{crt,key}, kubeadm 将使用这些文件对其余证书进行签名。 请参阅使用自定义证书
  2. 仅对 CA 来说,如果所有其他证书和 kubeconfig 文件都已就位,则可以只提供 ca.crt 文件, 而不提供 ca.key 文件。 kubeadm 能够识别出这种情况并启用 ExternalCA,这也意味着了控制器管理器中的 csrsigner 控制器将不会启动
  3. 如果 kubeadm 在 外部 CA 模式 下运行,所有证书必须由用户提供,因为 kubeadm 无法自行生成它们。
  4. 如果在 --dry-run 模式下执行 kubeadm,证书文件将写入一个临时文件夹中
  5. 可以使用 kubeadm init phase certs all 命令单独生成证书。

为控制平面组件生成 kubeconfig 文件

Kubeadm 生成具有用于控制平面组件身份标识的 kubeconfig 文件:

  • 供 kubelet 在 TLS 引导期间使用的 kubeconfig 文件 —— /etc/kubernetes/bootstrap-kubelet.conf。 在此文件中,有一个引导令牌或内嵌的客户端证书,向集群表明此节点身份。 此客户端证书应:

    • 根据节点鉴权模块的要求,属于 system:nodes 组织
    • 具有通用名称(CN):system:node:<小写主机名>
  • 控制器管理器的 kubeconfig 文件 —— /etc/kubernetes/controller-manager.conf; 在此文件中嵌入了一个具有控制器管理器身份标识的客户端证书。 此客户端证书应具有 CN:system:kube-controller-manager, 该 CN 由 RBAC 核心组件角色 默认定义的。

  • 调度器的 kubeconfig 文件 —— /etc/kubernetes/scheduler.conf; 此文件中嵌入了具有调度器身份标识的客户端证书。此客户端证书应具有 CN:system:kube-scheduler, 该 CN 由 RBAC 核心组件角色 默认定义的。

另外,用于 kubeadm 本身和 admin 的 kubeconfig 文件也被生成并保存到 /etc/kubernetes/admin.conf 文件中。 此处的 admin 定义为正在管理集群并希望完全控制集群(root)的实际人员。 内嵌的 admin 客户端证书应是 system:masters 组织的成员, 这一组织名由默认的 RBAC 面向用户的角色绑定 定义。它还应包括一个 CN。kubeadm 使用 kubernetes-admin CN。

请注意:

  1. ca.crt 证书内嵌在所有 kubeconfig 文件中。
  2. 如果给定的 kubeconfig 文件存在且其内容经过评估符合上述规范,则 kubeadm 将使用现有文件, 并跳过给定 kubeconfig 的生成阶段
  3. 如果 kubeadm 以 ExternalCA 模式 运行,则所有必需的 kubeconfig 也必须由用户提供,因为 kubeadm 不能自己生成
  4. 如果在 --dry-run 模式下执行 kubeadm,则 kubeconfig 文件将写入一个临时文件夹中
  5. 可以使用 kubeadm init phase kubeconfig all 命令分别生成 kubeconfig 文件。

为控制平面组件生成静态 Pod 清单

Kubeadm 将用于控制平面组件的静态 Pod 清单文件写入 /etc/kubernetes/manifests 目录。 Kubelet 启动后会监视这个目录以便创建 Pod。

静态 Pod 清单有一些共同的属性:

  • 所有静态 Pod 都部署在 kube-system 名字空间

  • 所有静态 Pod 都打上 tier:ontrol-planecomponent:{组件名称} 标签

  • 所有静态 Pod 均使用 system-node-critical 优先级

  • 所有静态 Pod 都设置了 hostNetwork:true,使得控制平面在配置网络之前启动;结果导致:

    • 控制器管理器和调度器用来调用 API 服务器的地址为 127.0.0.1。
    • 如果使用本地 etcd 服务器,则 etcd-servers 地址将设置为 127.0.0.1:2379
  • 同时为控制器管理器和调度器启用了领导者选举

  • 控制器管理器和调度器将引用 kubeconfig 文件及其各自的唯一标识

  • 将自定义参数传递给控制平面组件 中所述,所有静态 Pod 都会获得用户指定的额外标志

  • 所有静态 Pod 都会获得用户指定的额外卷(主机路径)

请注意:

  1. 所有镜像默认从 k8s.gcr.io 拉取。 关于自定义镜像仓库,请参阅 使用自定义镜像
  2. 如果在 --dry-run 模式下执行 kubeadm,则静态 Pod 文件写入一个临时文件夹中。
  3. 可以使用 kubeadm init phase control-plane all 命令分别生成主控组件的静态 Pod 清单。

API 服务器

API 服务器的静态 Pod 清单会受到用户提供的以下参数的影响:

  • 要绑定的 apiserver-advertise-addressapiserver-bind-port; 如果未提供,则这些值默认为机器上默认网络接口的 IP 地址和 6443 端口。
  • service-cluster-ip-range 给 service 使用
  • 如果指定了外部 etcd 服务器,则应指定 etcd-servers 地址和相关的 TLS 设置 (etcd-cafileetcd-certfileetcd-keyfile); 如果未提供外部 etcd 服务器,则将使用本地 etcd(通过主机网络)
  • 如果指定了云提供商,则配置相应的 --cloud-provider,如果该路径存在,则配置 --cloud-config (这是实验性的,是 Alpha 版本,将在以后的版本中删除)

无条件设置的其他 API 服务器标志有:

  • --insecure-port=0 禁止到 API 服务器不安全的连接
  • --enable-bootstrap-token-auth=true 启用 BootstrapTokenAuthenticator 身份验证模块。 更多细节请参见 TLS 引导
  • --allow-privileged 设为 true(诸如 kube-proxy 这些组件有此要求)
  • --requestheader-client-ca-file 设为 front-proxy-ca.crt
  • --enable-admission-plugins 设为:
    • NamespaceLifecycle 例如,避免删除系统保留的名字空间
    • LimitRangerResourceQuota 对名字空间实施限制
    • ServiceAccount 实施服务账户自动化
    • PersistentVolumeLabel 将区域(Region)或区(Zone)标签附加到由云提供商定义的 PersistentVolumes (此准入控制器已被弃用并将在以后的版本中删除)。 如果未明确选择使用 gceaws 作为云提供商,则默认情况下,v1.9 以后的版本 kubeadm 都不会部署。
    • DefaultStorageClassPersistentVolumeClaim 对象上强制使用默认存储类型
    • DefaultTolerationSeconds
    • NodeRestriction 限制 kubelet 可以修改的内容(例如,仅此节点上的 pod)
  • --kubelet-preferred-address-types 设为 InternalIP,ExternalIP,Hostname; 这使得在节点的主机名无法解析的环境中,kubectl log 和 API 服务器与 kubelet 的其他通信可以工作

  • 使用在前面步骤中生成的证书的标志:

    • --client-ca-file 设为 ca.crt
    • --tls-cert-file 设为 apiserver.crt
    • --tls-private-key-file 设为 apiserver.key
    • --kubelet-client-certificate 设为 apiserver-kubelet-client.crt
    • --kubelet-client-key 设为 apiserver-kubelet-client.key
    • --service-account-key-file 设为 sa.pub
    • --requestheader-client-ca-file 设为 front-proxy-ca.crt
    • --proxy-client-cert-file 设为 front-proxy-client.crt
    • --proxy-client-key-file 设为 front-proxy-client.key
  • 其他用于保护前端代理( API 聚合层) 通信的标志:

    • --requestheader-username-headers=X-Remote-User
    • --requestheader-group-headers=X-Remote-Group
    • --requestheader-extra-headers-prefix=X-Remote-Extra-
    • --requestheader-allowed-names=front-proxy-client

控制器管理器

控制器管理器的静态 Pod 清单受用户提供的以下参数的影响:

  • 如果调用 kubeadm 时指定了 --pod-network-cidr 参数,则可以通过以下方式启用 某些 CNI 网络插件所需的子网管理器功能:
    • 设置 --allocate-node-cidrs=true
    • 根据给定 CIDR 设置 --cluster-cidr--node-cidr-mask-size 标志
  • 如果指定了云提供商,则指定相应的 --cloud-provider,如果存在这样的配置文件, 则指定 --cloud-config 路径(此为试验性功能,是 Alpha 版本,将在以后的版本中删除)。

其他无条件设置的标志包括:

  • --controllers 为 TLS 引导程序启用所有默认控制器以及 BootstrapSignerTokenCleaner 控制器。详细信息请参阅 TLS 引导

  • --use-service-account-credentials 设为 true

  • 使用先前步骤中生成的证书的标志:

    ---root-ca-file 设为 ca.crt

    • 如果禁用了 External CA 模式,则 --cluster-signing-cert-file 设为 ca.crt,否则设为 ""
    • 如果禁用了 External CA 模式,则 --cluster-signing-key-file 设为 ca.key,否则设为 ""
    • --service-account-private-key-file 设为 sa.key

调度器

调度器的静态 Pod 清单不受用户提供的参数的影响。

为本地 etcd 生成静态 Pod 清单

如果用户指定了外部 etcd,则将跳过此步骤,否则 kubeadm 会生成静态 Pod 清单文件, 以创建在 Pod 中运行的具有以下属性的本地 etcd 实例:

  • localhost:2379 上监听并使用 HostNetwork=true
  • hostPathdataDir 挂载到主机的文件系统
  • 用户指定的任何其他标志

请注意:

  1. etcd 镜像默认从 k8s.gcr.io 拉取。有关自定义镜像仓库,请参阅 使用自定义镜像
  2. 如果 kubeadm 以 --dry-run 模式执行,etcd 静态 Pod 清单将写入一个临时文件夹。
  3. 可以使用 'kubeadm init phase etcd local' 命令单独为本地 etcd 生成静态 Pod 清单

可选的动态 Kubelet 配置

要使用这个功能,请执行 kubeadm alpha kubelet config enable-dynamic。 它将 kubelet 的初始化配置写入 /var/lib/kubelet/config/init/kubelet 文件。

初始化配置用于在这个特定节点上启动 kubelet,从而为 kubelet 插件文件提供了 一种替代方法。如以下步骤中所述,这种配置将由 kubelet 基本配置所替代。 请参阅通过配置文件设置 Kubelet 参数 了解更多信息。

请注意:

  1. 要使动态 kubelet 配置生效,应在 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 中指定 --dynamic-config-dir=/var/lib/kubelet/config/dynamic 标志。
  2. 通过使用配置文件 --config some-file.yamlKubeletConfiguration 对象传递给 kubeadm initkubeadm join 来更改 kubelet 配置。 可以使用 --- 分隔符将 KubeletConfiguration 对象与其他对象(例如 InitConfiguration) 分开。更多的详细信息,请查看 kubeadm config print-default 命令。

有关 KubeletConfiguration 结构的详细信息,可参阅 KubeletConfiguration 参考文档

等待控制平面启动

kubeadm 等待(最多 4m0s),直到 localhost:6443/healthz(kube-apiserver 存活)返回 ok。 但是为了检测死锁条件,如果 localhost:10255/healthz(kubelet 存活)或 localhost:10255/healthz/syncloop(kubelet 就绪)未能在 40s 和 60s 内未返回 ok, 则 kubeadm 会快速失败。

kubeadm 依靠 kubelet 拉取控制平面镜像并将其作为静态 Pod 正确运行。 控制平面启动后,kubeadm 将完成以下段落中描述的任务。

(可选)编写基本 kubelet 配置

FEATURE STATE: Kubernetes v1.11 [beta]

如果带 --feature-gates=DynamicKubeletConfig 参数调用 kubeadm,则 kubeadm:

  1. 将 kubelet 基本配置写入 kube-system 名字空间的 kubelet-base-config-v1.9 ConfigMap 中。
  2. 创建 RBAC 规则,以授予对所有引导令牌和所有 kubelet 实例对该 ConfigMap 的读取访问权限 (即 system:bootstrappers:kubeadm:default-node-token 组和 system:nodes 组)
  3. 通过将 Node.spec.configSource 指向新创建的 ConfigMap,为初始控制平面节点启用动态 kubelet 配置功能。

将 kubeadm ClusterConfiguration 保存在 ConfigMap 中以供以后参考

kubeadm 将传递给 kubeadm init 的配置保存在 kube-system 名字空间下名为 kubeadm-config 的 ConfigMap 中。

这将确保将来执行的 kubeadm 操作(例如 kubeadm upgrade)将能够确定实际/当前集群状态, 并根据该数据做出新的决策。

请注意:

  1. 在保存 ClusterConfiguration 之前,从配置中删除令牌等敏感信息。
  2. 可以使用 kubeadm init phase upload-config 命令单独上传主控节点配置。

将节点标记为控制平面

一旦控制平面可用,kubeadm 将执行以下操作:

  • 给节点打上 node-role.kubernetes.io/master="" 标签,标记其为控制平面
  • 给节点打上 node-role.kubernetes.io/master:NoSchedule 污点

请注意:

  1. 可以使用 kubeadm init phase mark-control-plane 命令单独触发控制平面标记

为即将加入的节点加入 TLS 启动引导

Kubeadm 使用引导令牌认证 将新节点连接到现有集群; 更多的详细信息,请参见 设计提案

kubeadm init 确保为该过程正确配置了所有内容,这包括以下步骤以及设置 API 服务器 和控制器标志,如前几段所述。

请注意:

  1. 可以使用 kubeadm init phase bootstrap-token 命令配置节点的 TLS 引导,执行以下段落中描述的所有配置步骤; 或者每个步骤都单独触发。

创建引导令牌

kubeadm init 创建第一个引导令牌,该令牌是自动生成的或由用户提供的 --token 标志的值;如引导令牌规范中记录的那样, 令牌应保存在 kube-system 名字空间下名为 bootstrap-token-<令牌-id> 的 Secret 中。

请注意:

  1. kubeadm init 创建的默认令牌将用于在 TLS 引导过程中验证临时用户; 这些用户会成为 system:bootstrappers:kubeadm:default-node-token 组的成员。
  2. 令牌的有效期有限,默认为 24 小时(间隔可以通过 -token-ttl 标志进行更改)
  3. 可以使用 kubeadm token 命令创建其他令牌,这些令牌还提供其他有用的令牌管理功能

允许加入的节点调用 CSR API

Kubeadm 确保 system:bootstrappers:kubeadm:default-node-token 组中的用户 能够访问证书签名 API。

这是通过在上述组与默认 RBAC 角色 system:node-bootstrapper 之间创建名为 kubeadm:kubelet-bootstrap 的 ClusterRoleBinding 来实现的。

为新的引导令牌设置自动批准

Kubeadm 确保 csrapprover 控制器自动批准引导令牌的 CSR 请求。

这是通过在 system:bootstrappers:kubeadm:default-node-token 用户组和 system:certificates.k8s.io:certificatesigningrequests:nodeclient 默认角色之间 创建名为 kubeadm:node-autoapprove-bootstrap 的 ClusterRoleBinding 来实现的。

还应创建 system:certificates.k8s.io:certificatesigningrequests:nodeclient 角色, 授予对 /apis/certificates.k8s.io/certificatesigningrequests/nodeclient 执行 POST 的权限。

通过自动批准设置节点证书轮换

Kubeadm 确保节点启用了证书轮换,csrapprover 控制器将自动批准节点的 新证书的 CSR 请求。

这是通过在 system:nodes 组和 system:certificates.k8s.io:certificatesigningrequests:selfnodeclient 默认角色之间创建名为 kubeadm:node-autoapprove-certificate-rotation 的 ClusterRoleBinding 来实现的。

创建公共 cluster-info ConfigMap

本步骤在 kube-public 名字空间中创建名为 cluster-info 的 ConfigMap。

另外,它创建一个 Role 和一个 RoleBinding,为未经身份验证的用户授予对 ConfigMap 的访问权限(即 RBAC 组 system:unauthenticated 中的用户)。

请注意:

  1. cluster-info ConfigMap 的访问 不受 速率限制。 如果你把 API 服务器暴露到外网,这可能是一个问题,也可能不是; 这里最坏的情况是 DoS 攻击,攻击者使用 kube-apiserver 能够处理的所有动态请求 来为 cluster-info ConfigMap 提供服务。

安装插件

Kubeadm 通过 API 服务器安装内部 DNS 服务器和 kube-proxy 插件。

请注意:

  1. 此步骤可以调用 'kubeadm init phase addon all' 命令单独执行。

代理

kube-system 名字空间中创建一个用于 kube-proxy 的 ServiceAccount; 然后以 DaemonSet 的方式部署 kube-proxy:

  • 主控节点凭据(ca.crttoken)来自 ServiceAccount
  • API 服务器节点的位置(URL)来自 ConfigMap
  • kube-proxy 的 ServiceAccount 绑定了 system:node-proxier ClusterRole 中的特权

DNS

  • CoreDNS 服务的名称为 kube-dns。这样做是为了防止当用户将集群 DNS 从 kube-dns 切换到 CoreDNS 时出现服务中断。--config 方法在 这里 有描述。
  • kube-system 名字空间中创建 CoreDNS 的 ServiceAccount
  • coredns 的 ServiceAccount 绑定了 system:coredns ClusterRole 中的特权

在 Kubernetes 1.21 版本中,kubeadm 对 kube-dns 的支持被移除。 你可以在 kubeadm 使用 CoreDNS,即使相关的 Service 名字仍然是 kube-dns

kubeadm join 步骤内部设计

kubeadm init 类似,kubeadm join 内部工作流由一系列待执行的原子工作任务组成。

这分为发现(让该节点信任 Kubernetes 的主控节点)和 TLS 引导 (让 Kubernetes 的主控节点信任该节点)。

请参阅使用引导令牌进行身份验证 或相应的设计提案

预检

kubeadm 在开始执行之前执行一组预检,目的是验证先决条件,避免常见的集群启动问题。

请注意:

  1. kubeadm join 预检基本上是 kubeadm init 预检的一个子集
  2. 从 1.9 开始,kubeadm 为 CRI 通用的功能提供了更好的支持;在这种情况下, Docker 特定的控制参数将跳过或替换为 crictl 中与之相似的控制参数。
  3. 从 1.9 开始,kubeadm 支持加入在 Windows 上运行的节点;在这种情况下, 将跳过 Linux 特定的控制参数。
  4. 在任何情况下,用户都可以通过 --ignore-preflight-errors 选项跳过 特定的预检(或者进而跳过所有预检)。

发现 cluster-info

主要有两种发现方案。第一种是使用一个共享令牌以及 API 服务器的 IP 地址。 第二种是提供一个文件(它是标准 kubeconfig 文件的子集)。

共享令牌发现

如果带 --discovery-token 参数调用 kubeadm join,则使用了令牌发现功能; 在这种情况下,节点基本上从 kube-public 名字空间中的 cluster-info ConfigMap 中检索集群 CA 证书。

为了防止“中间人”攻击,采取了以下步骤:

  • 首先,通过不安全连接检索 CA 证书(这是可能的,因为 kubeadm init 授予 system:unauthenticated 的用户对 cluster-info 访问权限)
  • 然后 CA 证书通过以下验证步骤:
    • 基本验证:使用令牌 ID 而不是 JWT 签名
    • 公钥验证:使用提供的 --discovery-token-ca-cert-hash。这个值来自 kubeadm init 的输出, 或者可以使用标准工具计算(哈希值是按 RFC7469 中主体公钥信息(SPKI)对象的字节计算的) --discovery-token-ca-cert-hash 标志可以重复多次,以允许多个公钥。
    • 作为附加验证,通过安全连接检索 CA 证书,然后与初始检索的 CA 进行比较

请注意:

  1. 通过 --discovery-token-unsafe-skip-ca-verification 标志可以跳过公钥验证; 这削弱了 kubeadm 安全模型,因为其他人可能冒充 Kubernetes 主控节点。

文件/HTTPS 发现

如果带 --discovery-file 参数调用 kubeadm join,则使用文件发现功能; 该文件可以是本地文件或通过 HTTPS URL 下载;对于 HTTPS,主机安装的 CA 包 用于验证连接。

通过文件发现,集群 CA 证书是文件本身提供;事实上,这个发现文件是一个 kubeconfig 文件, 只设置了 servercertificate-authority-data 属性, 如 kubeadm join 参考文档中所述,当与集群建立连接时,kubeadm 尝试访问 cluster-info ConfigMap, 如果可用,就使用它。

TLS 引导

知道集群信息后,kubeadm 将写入文件 bootstrap-kubelet.conf,从而允许 kubelet 执行 TLS 引导。

TLS 引导机制使用共享令牌对 Kubernetes API 服务器进行临时身份验证,以便 为本地创建的密钥对提交证书签名请求(CSR)。

该请求会被自动批准,并且该操作保存 ca.crt 文件和 kubelet.conf 文件,用于 kubelet 加入集群,同时删除 bootstrap-kubelet.conf

请注意:

  • 临时身份验证根据 kubeadm init 过程中保存的令牌进行验证(或者使用 kubeadm token 创建的其他令牌)
  • 临时身份验证解析到 system:bootstrappers:kubeadm:default-node-token 组的一个用户成员, 该成员在 kubeadm init 过程中被授予对 CSR API 的访问权
  • 根据 kubeadm init 过程的配置,自动 CSR 审批由 csrapprover 控制器管理

(可选)写入初始的 kubelet 配置

FEATURE STATE: Kubernetes v1.11 [beta]

如果带 --feature-gates=DynamicKubeletConfig 参数调用 kubeadm,则 kubeadm:

  1. 使用引导令牌凭证从 kube-system 名字空间中 ConfigMap kubelet-base-config-v1.x 中读取 kubelet 基本配置, 并将其作为 kubelet 初始配置文件 /var/lib/kubelet/config/init/kubelet 写入磁盘。
  2. 一旦 kubelet 开始使用节点自己的凭据(/etc/kubernetes/kubelet.conf), 就更新当前节点配置,指定该节点或 kubelet 配置来自上述 ConfigMap。

请注意:

  1. 要使动态 kubelet 配置生效,应在 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 中指定 --dynamic-config-dir=/var/lib/kubelet/config/dynamic 标志。