目录
一、Preflight Checks
在执行kubeadm init指令之后,kubeadm首先需要做一系列的检查工作,以确定此台机器是否能够支持部署kubernetes,这一步的检查被称为Preflight Checks。其主要包括以后方面:
- 检查Linux的版本是否是3.10以上?
- Linux Cgroups模块是否可用?
- 机器的hostname是否标准?在Kubernetes项目中,机器的名字一般存储在etcd中的API对象中,对象必须要拥有标准的DNS命名(RFC 1123);
- 安装的kubelet和kubeadm版本是否匹配?
- 机器上是否已经安装了Kubernetes二进制文件?
- Kubernetes的端口10250/10251/10252是否被占用?
- ip、mount等命令是否存在?
- Docker是否安装等等?...
二、生成对外提供服务所需的各种证书和对应目录
通过了Preflight Checks后,kubeadm 就会生成Kubernetes对外提供服务所需的各种证书以及对应的目录文件。Kubernetes项目对外提供服务时,除非开启“非安全模式”,一般情况下,都需要通过HTTPS才能够访问到 kube-apiserver,因此对应的 Kubernetes 项目必须配置好证书文件。
kubeadm为Kubernetes项目生成的证书文件都存放在Master节点的/etc/kubernetes/pki目录下。其中,最主要的证书是ca.crt和对应私钥ca.key,其他的证书还包括:apiserver-kubelet-client.crt、apiserver-kubelet-client.key等。如果,你不想要kubeadm生成默认的证书,需要将现有的证书放到如下目录:
/etc/kubernetes/pki/ca.{crt,key}
这样,kubeadm就会自动跳过证书生成的步骤,从而交给用户自己处理。
三、生成访问kube-apiserver所需的配置文件
证书生成之后,kubeadm会在其他组件生成访问kube-apiserver所需的配置文件,这些文件的目录路径均为:/etc/kubernetes/xxx.conf
ls /etc/kubernetes
admin.conf controller-manager.conf kubelet.conf scheduler.conf
这些文件记录了当前Master节点的服务器地址、监视端口、证书目录等信息。这样,对应的客户端(如:scheduler和kubelet)对自动加载对应的文件,从而使其中的信息与kube-apiserver进行安全对接。
四、为Master组件生成Pod配置文件
接下来,kubeadm会为Master组件自动生成Pod配置文件,Kubernetes的基本配置文件有3个:kube-apiserver、kube-controller-manager和kube-scheduler,这些组件都会以Pod方式部署,但此时的使用特殊的Pod启动方式“Static Pod”。
Static Pod启动方式:允许将要启动部署的Pod的YAML文件放到一个指定的目录中。在kubelet启动时,会自动检测这个该目录,并加载所有的Pod YAML文件并在此机器上启动它们(kubelet不是容器化部署,而是一个具有独立功能的重要组件,直接在宿主机上运行,而其他的Master组件更像是辅助组件)。
当这些YAML出现在kubelet监视的/etc/kubernetes/manifests目录下,kubelet会自动创建这些Pod,即对应的Master组件容器。Master组件启动完成后,kubeadm通过检查localhost:6443/healthz这个Master组件健康来检查URL,并等待所有的Master容器全部运行起来。
五、为集群生成一个bootstarp token
之后,kubeadm会为集群生成一个bootstrap token。只要持有这个token,任何安装了kubelet和kubeadm的节点都可以通过kubeadm join加入集群。而这个token1的值以及用法,会在kubeadm init执行结束后被打印。
六、保存Master节点重要信息
在token生成之后,kubeadm会将ca.crt和ca.key等Master节点重要信息,通过ConfigMap方式保存在etcd中,供后续部署Node节点使用,而这个ConfigMap的名字叫做cluster-info。
七、安装默认插件
kubeadm init的最后一个步骤是安装默认插件,kubernetes默认必须安装的两个插件为:kube-proxy和DNS,分别用来提供集群的服务发现和DNS功能,且均以容器镜像的方式启动。
八、参考文献
【1】张磊:深入剖析Kebernetes