在运维工作中,k8s组件有哪些?分别有什么作用?
在Kubernetes(k8s)集群中,组件按功能可分为控制平面组件(Control Plane)、节点组件(Node) 和附加组件(Add-ons)。这些组件协同工作,实现集群的资源调度、容器编排、状态管理等核心功能。
一、控制平面组件(Control Plane)
控制平面组件负责集群的全局决策(如调度、集群状态维护、故障检测等),通常运行在master节点上(生产环境中一般部署多个master节点实现高可用)。
-
kube-apiserver
- 所有操作的统一入口,提供RESTful API接口,是控制平面与其他组件、用户、kubectl等交互的唯一通道。
- 负责认证、授权、数据校验,并将集群状态持久化到etcd。
- 特点:无状态设计,可水平扩展(多实例部署)。
-
etcd
- 集群的分布式数据库,存储集群的所有状态(如Pod、Service、Deployment等资源的配置和状态)。
- 提供强一致性和高可用性,是集群的“数据源”,其他组件通过API Server读取或修改etcd中的数据。
-
kube-scheduler
- 负责Pod的调度:当新的Pod需要创建且未指定节点时,scheduler会根据预设策略(如资源需求、节点亲和性、污点/容忍、负载均衡等)选择最合适的节点运行Pod。
- 仅负责“决策”,不直接执行调度(实际创建Pod由kubelet完成)。
-
kube-controller-manager
- 运行一系列控制器进程的组件,确保集群状态与用户期望一致(“声明式API”的核心实现)。
- 主要控制器包括:
- Deployment控制器:维护Deployment期望的Pod数量。
- Node控制器:监控节点健康状态,移除故障节点。
- Service控制器:维护Service与Pod的关联(如Endpoint对象)。
- StatefulSet控制器:管理有状态应用的Pod(如固定网络标识、存储)。
- Namespace控制器:管理命名空间的生命周期。
-
cloud-controller-manager(可选)
- 仅在云厂商环境(如AWS、GCP、阿里云)中使用,负责与云服务提供商的API交互。
- 功能:管理云厂商的负载均衡器(如Service的LoadBalancer类型)、节点生命周期(如自动创建/删除云服务器节点)、存储卷等。
二、节点组件(Node)
节点组件运行在worker节点上,负责维护Pod的运行,并与控制平面通信。每个worker节点都必须部署这些组件。
-
kubelet
- 运行在每个节点上的“代理”,负责管理本节点的Pod:
- 接收API Server的指令,根据Pod规范(PodSpec)创建、启动、停止容器。
- 定期向控制平面汇报节点和Pod的状态(如资源使用情况、健康状态)。
- 确保容器运行在符合规范的环境中(如挂载存储卷、配置网络)。
- 运行在每个节点上的“代理”,负责管理本节点的Pod:
-
kube-proxy
- 运行在每个节点上的网络代理,负责实现Service的网络功能:
- 维护节点上的网络规则(如iptables/IPVS规则),实现Pod到Service的访问、Service的负载均衡(四层转发)。
- 解决Pod动态IP带来的访问问题:通过Service的固定IP/端口,将流量转发到后端的Pod。
- 运行在每个节点上的网络代理,负责实现Service的网络功能:
-
容器运行时(Container Runtime)
- 负责运行容器的软件,是k8s的基础依赖。
- 支持的运行时:containerd(最常用)、CRI-O、Docker(需通过cri-dockerd适配)等。
- 功能:拉取镜像、创建容器、管理容器生命周期等,通过容器运行时接口(CRI)与kubelet通信。
三、附加组件(Add-ons)
附加组件是增强集群功能的可选组件,通常通过Deployment或DaemonSet部署。
-
CoreDNS
- 提供集群内部的DNS服务,让Pod可以通过Service名称(而非IP)访问其他服务。
- 例如:Pod可以通过
web-service.default.svc.cluster.local
访问default命名空间下的web-service。
-
Ingress Controller
- 实现Ingress资源的功能,管理外部HTTP/HTTPS流量到集群内Service的路由(如基于域名、URL路径的转发)。
- 常见实现:Nginx Ingress Controller、Traefik、HAProxy等。
-
Dashboard
- 提供Web UI界面,方便用户可视化管理集群(查看资源状态、创建/删除资源等)。
-
Metrics Server
- 收集集群中节点和Pod的资源指标(CPU、内存使用率等),为HPA(Horizontal Pod Autoscaler)提供数据支持,也供kubectl top命令查询。
-
Cluster Autoscaler(可选)
- 在云环境中自动扩缩容节点数量:当集群资源不足时增加节点,资源过剩时减少节点。
总结
- 控制平面是集群的“大脑”,负责决策和管理集群状态;
- 节点组件是集群的“手脚”,负责执行具体任务(运行容器、维护网络);
- 附加组件是“工具集”,增强集群的可操作性和功能性。
这些组件协同工作,使k8s能够实现容器的自动化部署、扩缩容、负载均衡、自愈等核心能力。