解读Kubeadm源码
解读Kubeadm源码
kubeadm init过程
官网教程:https://kubernetes.io/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init/
1. Node环境检查(pre-fight-check)
生成的checks列表的对象,都实现了check接口,通过调用Check()进行
- 通过与prefight前检查独立存在
- 检查mainfestDir目录,K8s默认组件使用static pod
- NumCPUCheck检查CPU 最低2C,可以通过
--ignore-prefight-errors=NumCPU
进行忽略 - MemCheck检查检查,最低2G
- 进行kubectl、kubelet的版本匹配检查
- 检查FirewaldCheck检查防火墙
- 端口检查
- ……
- 同时还有RunPullImageCheck检查镜像是否存在
|
2.NewCertsPhase
在这个阶段,生成了通过自签的CA证书为每一个组件建立身份标识,可以通过其放入--cert-dir
(默认/etc/kubernets/pki),来提供它们的CA证书和密钥。
ApiServer证书为 apiserver-cert-extra-sans
参数值提供附加的SAN条目
对DNS进行x509证书签发
3.NewKubeConfigPhase
将kubeconfig文件写入/etc/kubernetes/
目录,让kubelet、控制器管理和调度器来连接到API服务器,它们有自己的标识,同时生成一个admin.conf
独立的kubeconfig文件,用于管理操作
4.NewEtcdPhase
一些etcd的准备工作和生成配置文件
5.NewControlPlanePhase
为控制节点的组件和创建静态pod以及生成文件放在/etc/kubernetes/mainfests
下面
6. NewKubeletStartPhase
- 将env的变量写入到
/var/lib/kubelet/kubeadm-flags.env
- 配置写入到
/var/lib/kubelet/config.yaml
- 启动kubelet
7.NewWaitControlPlanePhase
- 监听
/etc/kubernetes/manifest
目录,为了创建的时候启动Pod - 控制面的Pod起来之后,kubeadm init继续执行
8.NewUploadConfigPhase
把配置文件上传到K8s ConfigMap )admin.conf文件
9.*NewUploadCertsPhase
- 需要执行的时候添加
--config=kubeadm-config.yaml --upload-certs
才会执行这个函数
10.NewMarkControlPlanePhase
- 主要是对控制面的节点应用标签和污点的管理,以便在它上面不会运行一些其他的工作负载均衡
11.NewBootstrapTokenPhase
- 生成token
- 配置configmap,RBAC角色
- 配置RBAC,允许节点Bootstrap令牌获取节点
- 配置RBAC,允许节点Boorstrap令牌发布csr,以便节点获得长期证书
- 配置RBAC,允许csrapprover控制器节点从节点引导令牌自动批准
- 配置RBAC,允许集群中所有的节点客户端证书的轮换
- 在kube-public命名空间中创建cluster-info ConfigMap
12.NewKubeletFinalizePhase
- 更新
/etc/kubernetes/kubelet.conf
指向可运行的kubeley客户端证书和密钥
13.NewAddonPhase
- 调用runKubeProxyAddon将KubeProxy插件安装到Kubernetes集群
- 调用runCoreDNSAddon将CoreDNS插件安装到Kubernetes集群
14.NewShowJoinCommandPhase
- 打印Join信息
kubeadm Join过程
官网教程:https://kubernetes.io/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-join/
1.NewPreflightPhase
- https://github.com/kubernetes/kubernetes/blob/2f270bd99609561be53893d3c7fc77d8efe7ac4e/cmd/kubeadm/app/cmd/phases/join/controlplaneprepare.go#L46
- 任何时候都可以通过
--ignore-prefight-errors
选择跳过某一个项目检查
- 任何时候都可以通过
2.NewControlPlanePreparePhase
3.NewCheckEtcdPhase
4.NewKubeletStartPhase
- 把配置文件写入
/var/lib/kubelet/config.yaml
- 把变量文件flags写入
/var/lib/kubelet/kubeadm-flags.env
- 启动kubelet
- 等待kubelet执行TLS Bootstrap
5.NewControlPlaneJoinPhase
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Joohwan!
评论