Kubernetes的组件分为三大类:核心组件、CLI客户端和附加组件
核心组件
Etcd服务(集群)-配置存储中心
键值对数据库,存储K8S集群所有重要信息(需要持久化的数据)
主控节点(Master)节点
- apiserver服务
所有服务访问的统一入口
提攻集群管理的RESTAPI接口(包括鉴权、数据校验及集群状态变更);
负责其他模块之间的数据交互,承担通信枢纽功能
是资源配额控制的入口
提供完备的集群安全机制
- controller-manager(控制器管理器)服务
控制器管理器管理各个类型的控制器。
每个控制器是一个单独的进程。
控制器管理器由一系列控制器组成,通过apiserver监控整个集群的状态,并确保集群处于预期的工作状态。这些控制器包括:
节点控制器(Node Controller):负责在节点出现故障时进行通知和响应
任务控制器(Job Controller):执行任务或在任务出现问题时重新执行任务的控制
端点分片控制器(EndPointSlice Controller):填充端点分片对象(以提供Service和Pod之间的链接)
服务账号控制器(ServiceAccount Controller):为新的命名空间创建默认的服务账号
- controller-manager服务
负责接受任务,选择合适的节点进行分配任务
主要功能是接收调度pod到适合的运算节点上,scheduler用预算策略(predict)和优选策略(priortities)方法帮你在最适合运行pod的地方,通知内部节点的kubelet把pod拉起
运算(Node)节点
1.kubelet服务
直接跟容器引擎交互实现容器的生命周期和存储管理
主要功能是定时从某个地方获取节点上pod的期望状态(运行什么容器、运行的副本数量、网络或者存储如何配置等等),并调用对应的容器平台接口(如docker接口)达到这个状态
定时汇报当前节点的状态给apiserver,以供调度的时候使用
镜像和容器的清理工作,保证节点上镜像不会占满磁盘空间,退出的容器不会占用太多资源
2.kube-proxy服务
网络代理、负责Service的服务发现以及对应的负载均衡(写入规则至IPTABLES或IPVS实现服务的映射访问)
如:svc进行负载操作,负载的组件通过kube-proxy完成
是Kubernetes在每个节点上运行网络代理、service资源的载体
建立了pod网络(pod与pod的访问)和集群网络的关系(把clusterip和podip关联起来了)
常用三种流量调度模式Userspace【废弃】、Iptables【濒临废弃-默认操作防火墙进行Pod映射】、Ipvs【推荐-LVS组件】
负责建立和删除包括更新调度规则、通知apiserver自己的更新,或者从apiserver那里获取其他kube-proxy的调度规则变化来更新自己的(若干运算节点都起kube-proxy,通过apiserver找etcd同步状态)
3.container-runtime容器运行时环境
可以为Docker、contiainerd或CRI-O【K8S并不是非得用Docker来做运行时环境】,如kubectl与Docker进行交互,操作Docker去创建对应的容器
CLI客户端
- kubectl命令行工具
附加组件
- CNI网络组件:Fannel/Calico
- 服务发现用插件:CoreDNS
可以为集群中的SVC创建一个域名IP的对应关系解析 - 服务暴露用插件:Traefik
- GUI管理插件:Dashboard
给K8S集群提供一个B/S结构的访问体系 - 代理:Ingress Controller
- 跨集群中心多K8S统一管理功能:Federation
- 集群监控能力:Prometheus
- 日志统一分析接入平台:Prometheus
Kubernetes有三套网络:Service(集群)网络,Node(节点)网络,Pod(容器)网络
节点网络:运算节点宿主机网络
Pod网络:所有的Pod都是从宿主机上NAT出来的
Service网络:虚的网络、Server网络和Pod网络通过kube-proxy连接起来