一.master node组件(主控节点)
- apiserver:集群同一入口,负责接受整个集群的所有内部请求.这里的请求并不是外界访问我们部署的应用的请求,以restful方式,交给etcd存储
- scheduler:节点调度,负责将新创建的
pod调度到合适的node上,它会考虑多种因素,以确保最后部署的Node是最佳选择
Node资源可用性,当前Node的资源情况,剩下多少CPU、Memory、GPU资源等等
Pod和Node都可以设置亲和性和反亲和性规则,通过pod或者Node的Affinity字段实现,以便实现在调度的时候实现来偏好或者规避Node或pod
结点和容忍性,可以给结点设置污点Taints,表明它们不希望接受特定类型的pod,同时也可以设置容忍Tolerations规则,以接受具有特定污点的pod,它们分别通过Node.Spec.taints和Pod.spec.tolerations字段来声明
其他因素:比如,节点的负载均衡,kube-scheduler会尽量保证各个节点的负载均衡,以确保不会过度分配负载到某些节点。以及数据的本地性,如果多个节点上有具有所需数据的pod,kube-scheduler会优先选择哪些本地数据更好的结点,以减少网络传输的需求等策略。
- controller-manager:处理集群中常规后台任务,一个资源对应一个控制器
- etcd:是一个分布式的
Key-Value系统,它并不直接参与编排,而是负责维护集群的配置信息和状态,包括配置、各种对象的状态、服务定义等等
二.worker node(工作节点)
- kubelet:的作用主要有两个,即确保容器在节点上正确运行和与Master节点进行通信
- kube-proxy: 是集群每个
Node上运行的网络代理,以确保Pod之间的通信,以及Pod和集群外部的通信是正常的,以及根据不同的负载均衡策略将请求分发给对应的后端Pod - container-Runtime:组件使得K8S拥有容器运行的环境和条件,从而能够有效运行容器。它负责管理K8S环境中容器的执行和生命周期。