kubeadm init流程
引导前检查:kubeadm init pre-flight check
- 进行一系列检查,以确定这台机器可以部署kubernetes。
- kubeadm版本与要安装的kubernetes版本比对检查
- kubernetes安装的系统需求检查,如操作系统内核,Cgroup是否可用,docker是否安装等等
- 其他检查:用户,主机,端口,swap,工具等
生成私钥和数字证书
- 生成kubernetes对外提供服务所需要的各种证书,生成的证书文件存放在 /etc/kubernetes/pki 目录下
- 自建CA,生成ca.key和ca.crt.生成一个自签名的 CA 证书 (或者使用现有的证书,如果提供的话) 来为集群中的每一个组件建立身份标识,以便各组件通信时使用安全的连接。。
- APIServer私钥与公钥证书。
- APIServer访问kubelet使用的客户端私钥与证书。
- sa.key和sa.pub
- Etcd相关私钥和数字证书
生成控制平面组建的kubeconfig文件
- 会生成为其他组件访问api server的kubeconfig配置文件,路径是/etc/kubernetes,文件包括admin.conf, controller-manager.conf, kubelet.conf , scheduler.conf,kubelet、控制器管理器和调度器用来连接到 API 服务器。其中admin是给kubectl操作时用的,告诉kubectl去连接哪个api server去操作。(还记得搭建master节点的某一个步是copy admin.conf到.kube目录下吗?). 这些文件里的内容大体上相似,如master节点的地址,端口,证书目录等信息。
生成各组建的manifest文件
- api server, controller manager, scheduler, etcd生成静态pod配置.yaml文件,放在/etc/kubernetes/manifests路径下,kubelet会更具该路径下的配置文件,启动相应的pod.
下载镜像并等待控制平面启动
- kubeadm依赖kubelet下载镜像并启动static pod
- 从k8s.gcr.io下载组件镜像
- kubeadm会通过检查localhost:6443/healthz这个master组件的健康状态检查URL,等待master组件完全运行起来。
- 控制平面主要组件启动完成
安装DNS和kube-proxy
- 安装默认插件kube-proxy和dns。他们是为整个集群提供服务发现和dns解析用的。这两个也是以pod的方式启动。
kubeadm join原理
- 任何一台机器想要加入集群,必须要拿到server端的ca证书才能和其建立tls连接,那么如何在不手动拷贝的情况下拿到server的ca证书,这就需要指定一个token来证明node的合法性。于是便需要以下这样的命令来加入集群。加入后,ca.crt证书文件也将被存放到/etc/kubenetes/pki目录下。
kubeadm join 10.0.2.15:6443 --token 79xdy6i.gocioykhcd69ywd9u --discovery-token-ca-cert-hash sha256:479d4ef203c6aba0654b48e9e1ff8870dfe332eb574cab1f991e5565e8445fe4f
join前检查
- discovery-token-ca-cert-hash:用于Node验证Master身份
- token:用于Master验证Node身份