kubeadm join原理

在这里插入图片描述

kubeadm join的结果是完成一个k8s master节点或node节点加入一个已有的k8s集群。

以下为kubeadm join的处理流程代码,一共5步:

// cmd/kubeadm/app/cmd/join.go-NewCmdInit()
    ...
     // 1.环境检查
    joinRunner.AppendPhase(phases.NewPreflightPhase())
     // 2.控制面准备
	joinRunner.AppendPhase(phases.NewControlPlanePreparePhase())
	// 3.检查etcd是否健康
	joinRunner.AppendPhase(phases.NewCheckEtcdPhase()) 
	// 4.启动kubelet
	joinRunner.AppendPhase(phases.NewKubeletStartPhase()) 
	// 5.控制面操作
	joinRunner.AppendPhase(phases.NewControlPlaneJoinPhase()) 
	...

1、环境检查

检查项包括操作系统内核版本、k8s组件暴露服务的指定端口是否被占用、docker是否安装、
iptables命令是否安装等等,但这里的环境检查与kubeadm init时的检查有点不同,
这里会区分是join的master节点还是node节点,如果是node节点,则仅仅进行node相关的检查;

这里还会获取kube-public命名空间下的configmap对象cluster-info,以获取CA、master api等信息;

2、控制面准备

如果是node的join,这一步的逻辑不会执行。

这里会从kube-system命名空间中加载名称为kubeadm-certs的secret对象,
然后生成控制面组件kube-apiserver、kube-controller-manager、kube-scheduler所需的证书,
最后生成它们的部署yaml,放置到kubelet的static pod目录下,被kubelet使用static pod特性启动;

3、检查etcd是否健康。

4、启动kubelet。

根据CA、bootstrap token等信息生成/etc/kubernetes/bootstrap-kubelet.conf文件,
通过TLS bootstrap机制,kubelet使用bootstrap token来向kube-apiserver申请证书,
由kube-controller-manager签发证书返回,然后kubelet根据返回的证书生成kubeconfig文件
并写入到/etc/kubernetes/kubelet.conf文件,
后续kubelet将会使用该kubeconfig文件来与kube-apiserver通信;

# cat /etc/kubernetes/kubelet.conf
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0F...
    server: https://192.168.1.10:6443
  name: default-cluster
contexts:
- context:
    cluster: default-cluster
    namespace: default
    user: default-auth
  name: default-context
current-context: default-context
kind: Config
preferences: {}
users:
- name: default-auth
  user:
    client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem
    client-key: /var/lib/kubelet/pki/kubelet-client-current.pem

注意:bootstrap-kubelet.conf文件会在kubelet.conf文件生成后,被kubeadm删除掉;

5、控制面操作。

如果是node的join,这一步的逻辑不会执行。

控制面操作包括生成etcd的static pod yaml、更新kube-system命名空间下的configmap对象
kubeadm-config,将该控制节点信息更新进去、将该master节点打上污点,
不作为计算节点数据面使用;至此,kubeadm join流程结束。
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐