Scheduler
Kubernetes Scheduler负责接收Controller Manager创建的新Pod,为其安排Node,之后由kubelet服务进程接管Pod的后续工作。
Kubernetes Scheduler将待调度的Pod按调度算法和调度策略绑定到Node上。
预选策略:
NoDiskConflict避免磁盘冲突、
PodFitsResources内存和cpu资源满足Pod需求、
PodSelectorMatches标签选择、
PodFitsHost节点名称选择、
CheckNodeLabelPresence节点的标签列表选择、
CheckServiceAffinity、
PodFitsPorts。
优选策略:LeastRequestedPriority资源消耗最小、CalculateNodeLabelPriority、BalancedResourceAllocation各项资源使用率最均衡。
Kubelet
每个node上都会启动一个kublet服务进程,处理master下发到本节点的任务,管理Pod和Pod里的容器。kublet在API server上注册节点信息,定期向master汇报节点资源使用情况,并通过cAdvisor监控容器和节点资源。
Kublet是联系master和各Node之间的桥梁。
LivenessProbe探针判断容器状态是否健康并反馈给kubelet,ReadinessProbe探针判断容器是否启动成功。
cAdvisor是一个开源的分析容器资源使用率和性能特性的代理工具。cAdvisor查找并采集Node上的CPU、内存、文件系统、网络使用的统计信息。UI端口4194。1.10开始弃用。
新的Kubernetes中,Metrics Server用于提供Core Metrics(核心指标),包括Node和Pod的CPU和内存使用数据。其他Custom Metrics(自定义指标)由第三方组件(如Prometheus)采集存储。
kube-proxy
每个Node都会运行一个kube-proxy服务进程,是service的透明代理和负载均衡器,将对service的请求转发到后段的多个pod实例上。kube-proxy在运行过程中动态创建与Service相关的iptables规则,从而将访问service(Cluster Ip或NodePort)的请求负载分发到后端pod。
通过API Server的Watch接口实时跟踪Service与Endpoint的变更信息,并更新对应的iptables规则,Client的请求流量则通过iptables的NAT机制直接路由到目标Pod。
1.8以后使用IPVS(IP Virtual Server)模式。iptables模式为防火墙设计,IPVS专门用于高性能负载均衡,并使用更高效的数据结构(Hash表),允许几乎无限的规模扩张。
ipset使用带索引的数据结构,当规则很多时,也可以高效地查找和匹配。