【博客437】kubeadm join原理
kubeadmjoin的结果是完成一个k8smaster节点或node节点加入一个已有的k8s集群。3、检查etcd是否健康。4、启动kubelet。
·
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流程结束。
更多推荐
已为社区贡献51条内容
所有评论(0)