kubernates kubeadm join详解

421 阅读4分钟

      当加入kubeadm初始化的集群时,我们需要建立双向信任。 分别为发现(具有节点信任Kubernetes控制平面)和TLS引导(具有Kubernetes控制平面信任节点)。

       发现主要有两种方案。一个是使用api服务器的IP地址伴随的共享 令牌。第二个是提供一个文件,此文件是标准kubeconfig文件的子集。此文件 可以是本地文件或通过HTTPS URL下载的文件。格式是kubeadm join --discovery-token abcdef.1234567890abcdef 1.2.3.4:6443, kubeadm 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)颁发的公钥。 此值在“kubeadm init”命令中输出可用,也可以是使用标准工具计算。--discovery-token-ca-cert-hash参数可以重复多次以允许多个公钥。

        如果提前不知道CA公钥哈希,可以通过--discovery-token-unsafe-skip-ca-verification参数禁用此功能验证。这削弱了kubeadm安全模型,因为其他节点可能会模拟kubernates控制平面。 TLS引导机制也通过共享令牌驱动。 这是用于临时验证Kubernetes控制平面提交的本地创建密钥对的证书签名请求(CSR)。 默认情况下,kubeadm会设置Kubernetes控制平面以自动批准这些签名请求。此令牌通过--tls-bootstrap-token参数传递。通常情况下,两个部分使用相同的标记。在这种情况下,使用--token参数,而不是单独指定每个令牌。

命令格式:

kubeadm join [api-server-endpoint] [flags]
kubeadm join [command]

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

preflight              执行预检
control-plane-prepare  准备好机器以供控制
  /download-certs        [实验]从kubeadm certs Secret下载控制平面节点之间共享的证书
  /certs                 为新的控制平面组件生成证书
  /kubeconfig            为新的控制平面组件生成kubeconfig
  /control-plane         为新的控制平面组件生成清单
  
kubelet-start          写入kubelet设置、证书并(重新)启动kubelet

control-plane-join     将一台机器作为控制平面实例
  /etcd                  添加新的本地etcd成员
  /update-status         将新的控制平面节点注册到kubeadm config ConfigMap中维护的ClusterStatus中
  /mark-control-plane    将节点标记为控制平面

现有命令:

phase       使用此命令可调用联接工作流的单个阶段

参数:

--apiserver-advertise-address string            如果节点应该承载一个新的控制平面实例,那么API服务器将公布它正在侦听的IP地址。如果未设置,将使用默认网络接口。
--apiserver-bind-port int32                     如果节点应该承载一个新的控制平面实例,则为API服务器绑定到的端口。(默认6443--certificate-key string                        使用此密钥解密init上载的证书机密。
--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 strings          对于基于令牌的发现,请验证根CA公钥是否与此哈希匹配(格式:“类型:值”)。
--discovery-token-unsafe-skip-ca-verification   对于基于令牌的发现,允许加入而不使用--discovery-token-ca-cert-hash 阻止。
-k, --experimental-kustomize string             存储静态pod清单的kustomize修补程序的路径。
--ignore-preflight-errors strings               其错误将显示为警告的检查列表。示例:“IsPrivilegedUser,Swap”。值“all”忽略所有检查中的错误。
--node-name string                              指定节点名称。
--skip-phases strings                           要跳过的阶段列表
--tls-bootstrap-token string                    指定用于在加入节点时临时通过Kubernetes控制平面进行身份验证的令牌。
--token string                                  当未提供发现令牌和tls引导令牌的值时,请将此令牌用于它们。

全局参数:

--add-dir-header           如果为true,则将文件目录添加到标头                
--log-file string          如果非空,则使用此日志文件
--log-file-max-size uint   定义日志文件可以增长到的最大大小。单位为兆字节。如果该值为0,则最大文件大小不受限制。(默认值1800)
--rootfs string            [实验性]指向“真实”主机根文件系统的路径。
--skip-headers             如果为true,则避免在日志消息中使用头前缀
--skip-log-headers         如果为true,则在打开日志文件时避免使用标头
-v, --v Level              日志级别详细信息的编号