持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情
使用部署工具安装集群有三种方式:
原理
这里以kubeadm为例,安装 kubernetes 1.23.1。
使用kubeadm安装kubernetes的核心其实只有两步:
# 创建一个Master节点
$ kubeadm init
# 将一个Node节点加入到当前集群中
$ kubeadm join <Master节点的IP和端口>
即:创建Master节点,并且将Node节点加入到集群中。其他的步骤都是为这两步做准备。
kubeadm init
在执行kubeadm init命令的同时,kubeadm为我们做了很多事情,例如安装前的预检查、生成证书以及生成一些必要的组件等等。
-
预检查其实包括很多步骤
- 检查Linux 内核的版本必须是否是 3.10 以上,可使用
cat /proc/version命令查看。 - 检查Linux Cgroups 模块是否可用?
- 用户户安装的 kubeadm 和 kubelet 的版本是否兼容
- Containerd/Docker 是否已经安装?
- ....
- 检查Linux 内核的版本必须是否是 3.10 以上,可使用
-
证书生成,通常保存在Master 节点的 /etc/kubernetes/pki 目录下。
-
安装必要的组件,Master节点中的API Server、Scheduler、Controller manager、ectl就是在这个时候被kubeadm以pod的形式部署起来的。
首先kubeadm会生成相对应的yaml描述文件(存在于/etc/kubernetes/manifests),并且以一种特殊的方式“静态 pod”的方式进行启动。
[root@master ~]# ls /etc/kubernetes/manifests etcd.yaml kube-apiserver.yaml kube-controller-manager.yaml kube-scheduler.yaml静态 Pod总是由kubelet创建的,并且总在kubelet所在的Node(这里就是Master)上运行。
当然,我们也可以以自定义的方式,修改这些pod的启动参数,并且在init时指定配置文件即可,例如:
kubeadm init --config=kubeadm-init.yaml -
在完成Master 组件的健康检查后,kubeadm 就会为集群生成一个 bootstrap token,通过该token,就可以允许其他的节点加入到这个集群了。
-
最后一步,Kubernetes 会默认 kube-proxy 和 DNS 这两个插件。它们分别用来提供整个集群的服务发现和 DNS 功能。
kubeadm join
kubeadm join的原理就是通过master节点的token以一种安全的方式连接到Master节点的Apiserver上即可。
可是,为什么执行 kubeadm join 需要这样一个 token 呢?
因为,任何一台机器想要成为 Kubernetes 集群中的一个节点,就必须在集群的 kube-apiserver 上注册。可是,要想跟 apiserver 打交道,这台机器就必须要获取到相应的证书文件(CA 文件)。可是,为了能够一键安装,我们就不能让用户去 Master 节点上手动拷贝这些文件。所以,kubeadm 至少需要发起一次“不安全模式”的访问到 kube-apiserver,从而拿到保存在 ConfigMap 中的 cluster-info(它保存了 APIServer 的授权信息)。而 bootstrap token,扮演的就是这个过程中的安全验证的角色。