Kubernetes(k8s)是一个容器编排平台,其核心架构由多个组件组成,分为控制平面(Control Plane)工作节点(Worker Node)两部分。以下是基础组成及其作用:


1. 控制平面(Control Plane,也叫做master节点)

负责集群的全局决策和调度,是集群的“大脑”:

  • kube-apiserver

  • 集群的唯一入口,提供 RESTful API,所有组件间的通信都通过它。

  • 验证请求合法性,并将数据持久化到etcd

  • etcd

  • 分布式键值存储数据库,保存集群的所有状态数据(如Pod、Service、ConfigMap等)。

  • 支持watch机制,当服务注册信息发生变化的时候,可以实时的更新并且获取最新的服务,不用像传统一样重启服务

  • 使用了Raft算法,在分布式环境下保证了强制一致性

  • kube-scheduler

  • 负责将Pod调度到合适的Node上,根据资源需求、亲和性等策略选择节点。

  • kube-controller-manager

  • 运行多个控制器,确保集群状态与预期一致,例如:

  • Node Controller监控节点状态,当节点出现故障、添加或移除时,采取相应措施,如标记故障节点,将该节点上的 Pod 重新调度到其他健康节点

  • Deployment Controller管理 Deployment 资源,确保实际运行的 Pod 副本数量与 Deployment 中定义的副本数一致。当有 Pod 崩溃或者用户修改了 Deployment 的副本数时,它会自动创建或删除 Pod,以实现自愈和弹性伸缩

  • Service Controller负责处理 Service 和 Endpoint 的关系,当 Endpoint(Pod 的 IP 和端口)发生变化时,更新 Service 的负载均衡配置,保证服务访问的连续性

  • cloud-controller-manager(可选)

  • 与云厂商(AWS、GCP等)交互,管理负载均衡、存储卷等云资源。


2. 工作节点(Worker Node,也叫计算节点)

运行容器化应用的机器,每个节点包含以下组件:

  • kubelet

  • 节点上的“代理”,负责与控制平面通信,管理Pod的生命周期(创建、销毁、监控)。

  • 确保Pod中的容器处于运行状态。

  • kube-proxy

  • 维护节点上的网络规则(如iptables/IPVS),实现Service的负载均衡和网络代理。

  • 容器运行时(Container Runtime)

  • 负责运行容器(如Docker、containerd、CRI-O等),支持OCI标准。


3. 附加组件(Addons)

非核心但常用的扩展功能:

  • CNI插件(如Calico、Flannel)

  • 实现Pod间的网络通信和IP分配。

  • CoreDNS

  • 为集群提供DNS解析服务,使Service可通过域名访问。

  • Ingress Controller(如Nginx、Traefik)

  • 管理外部访问集群的入口(HTTP/HTTPS路由)。

  • Metrics Server

  • 收集资源监控数据,供kubectl top和HPA(自动扩缩容)使用。

  • Dashboard

  • Web可视化界面,用于管理集群。


4. 核心抽象对象(API Resources)

用户通过操作这些对象定义应用:

  • Pod:最小的部署单元,包含一个或多个容器。

  • Deployment:管理Pod的无状态应用,支持滚动更新。

  • Service:定义一组Pod的访问策略(如负载均衡)。

  • Volume/PersistentVolume:存储卷声明。

  • Namespace:逻辑隔离集群资源(如开发、生产环境)。

5.Deployment与Service的作用

交互流程示例

  1. 用户通过kubectlkube-apiserver提交一个Deployment请求。

  2. kube-scheduler选择合适节点,kubelet在该节点创建Pod。

  3. kube-proxy为Pod配置网络规则,etcd记录集群状态。