
2.2.4 运行kubeadm init命令安装Master节点
至此,准备工作已经就绪,运行kubeadm init命令即可一键安装Kubernetes的Master节点,也称之为Kubernetes控制平面(Control Plane)。
在开始之前需要注意:kubeadm的安装过程不涉及网络插件(CNI)的初始化,因此kubeadm初步安装完成的集群不具备网络功能,任何Pod(包括自带的CoreDNS)都无法正常工作。而网络插件的安装往往对kubeadm init命令的参数有一定要求。例如,安装Calico插件时需要指定--pod-network-cidr=192.168.0.0/16。关于安装CNI网络插件的更多内容,可参考官方文档的说明。
kubeadm init命令在执行具体的安装操作之前,会执行一系列被称为pre-flight checks的系统预检查,以确保主机环境符合安装要求,如果检查失败就直接终止,不再进行init操作。用户可以通过kubeadm init phase preflight命令执行预检查操作,确保系统就绪后再执行init操作。如果不希望执行预检查,则也可以为kubeadm init命令添加--ignore-preflight-errors参数进行关闭。如表2.3所示是kubeadm检查的系统配置,对不符合要求的检查项以warning或error级别的信息给出提示。
表2.3 kubeadm检查的系统配置

续表

另外,Kubernetes默认设置cgroup驱动(cgroupdriver)为“systemd”,而Docker服务的cgroup驱动默认值为“cgroupfs”,建议将其修改为“systemd”,与Kubernetes保持一致。这可以通过修改Docker服务的配置文件(默认为/etc/docker/daemon.json)进行设置:

准备工作就绪之后,就可以运行kubeadm init命令,使用之前创建的配置文件一键安装Master节点(控制平面)了:

一切正常的话,控制台将输出如下内容:



看到“Your Kubernetes control-plane has initialized successfully!”的提示,就说明Master节点(控制平面)已经安装成功了。
接下来就可以通过kubectl命令行工具访问集群进行操作了。由于kubeadm默认使用CA证书,所以需要为kubectl配置证书才能访问Master。
按照安装成功的提示,非root用户可以将admin.conf配置文件复制到HOME目录的.kube子目录下,命令如下:

如果用户是root,则也可以通过设置环境变量KUBECONFIG完成kubectl的配置:

然后就可以使用kubectl命令行工具对Kubernetes集群进行访问和操作了。
例如查看命名空间kube-system中的ConfigMap列表:

到此,Kubernetes的Master节点已经可以工作了,但在集群内还是没有可用的Worker Node,并缺乏容器网络的配置。
接下来安装Worker Node,需要用到kubeadm init命令运行完成后的最后几行提示信息,其中包含将节点加入集群的命令(kubeadm join)和所需的Token。