Kubeadm 设计
Master:控制面节点
Node:工作节点
目标
-
构建高可用的Kubernetes集群。
- 定义一种通用并且可扩展的多个控制面实例部署的流程。
kubeadm join --control-plane
。 - 为明确的用户用例提供一种更好的解决方案。
- 定义一种通用并且可扩展的多个控制面实例部署的流程。
-
高级工具集成
因为要提供给更高级的工具(ansible、saltstack)使用kubeadm来部署集群,因此,
kubeadm join --control-plane
需要为其提供更好的易操作性:-
并发部署节点
高级工具可以并行的创建节点(包括:控制面节点和工作节点),以减少集群的启动时间。
kubeadm join --control-plane
应该提供一种更好的实践方式而不是依赖于高级工具进行同步。
-
-
支持动态和静态两种形态的部署流程
-
在用户执行
kubeadm init
的时候,可能并不清楚集群最终的形态是什么样子,例如, 用户可能只启动了一个控制面节点和n个工作节点,然后在未来可能需要添加更多的控制面节点和工作节点。用户不能提前知道控制面节点的最终状态,这种流程叫做“动态部署”。 -
kubeadm同时也应该支持另外一种“静态部署”流程,即用户在事先就已经规划并知道控制面节点的数量、IP等信息。
-
-
支持不同的etcd部署场景,具体来说就是,在相同的节点上部署控制面组件和etcd,或者是在专有机器上运行etcd。
非核心目标
- 在一个工作节点上安装控制面组件。该节点在最开始就要决定是作为控制面还是工作节点,并且在后续整个生命周期的过程中,都要保持不变。
- 该设计提案不包括etcd集群部署的管理。
- 该设计提案不包括api-server的load balancing。但是不能该提案的任何设计都不能阻止用户使用自己的负载均衡方案
- 该设计提案不涉及kubeadm的self-hosting方案。但是设计不能阻止未来重新考虑该部分。
- 该提案不提供对于跨主机传输CA和其他必要证书。
- 该提案不能阻塞当前已经存在的设计。
实现细节
初始化 Kubernetes 集群
在第一个节点上运行kubeadm init
初始化集群,该节点被称为自举控制节点。
为支持kubeadm join --control-plane
,新的Kubernetes集群必须要满足下面条件:
- 集群必须设置一个controlPlaneEndpoint
- 集群必须使用外部etcd
执行join之前的准备
在调用kubeadm join --control-plane
之前,需要用户或者使用高级工具拷贝自举控制节点的证书到新的节点。
证书包括:ca, front-proxy-ca certificate 和 service account key pair
执行join流程
kubeadm join --control-plane
复用 kubeadm join
的流程。
接受一个额外的参数,--apiserver-advertise-address
表示添加的节点apiserver监听地址。