Master 组件
官网链接
1、kube-apiserver :
Kubernetes API 集群的统一入口,各组件的协调者,以 RESTful API 提供接口方式,所有的对象资源的增删改查和监听操作都交给 APIServer 处理后再提交。它是发往集群的所有rest操作命令的接入点,并负责接收、校验并响应所有的rest请求,结果状态被持久存储于etcd中,因此,apiserver是整个集群的网关。
2、kube-controller-manager
处理集群中常规后台任务,一个资源对应一个控制器,而 controllerManager 就是负责处理这些控制器的。集群级别的大多数功能都是由几个被称为控制器的进程执行实现的,这几个进程被集成于kube-controller-manager守护进程中。由控制器完成的功能主要包括生命周期功能和api业务逻辑,具体如下:
生命周期功能:包括namespace创建和生命周期、event垃圾回收、pod终止相关的垃圾回收、级联垃圾回收及node垃圾回收等
api业务逻辑:例如,由replicaset执行的pod扩展等
3、kube-scheduler
根据调度算法为新创建的 pod 选择一个 Node 节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。由scheduler根据集群内各节点的可用资源状态,以及要运行的容器的资源需求做出调度决策。
4、cluster state store(etcd)
kubernetes集群的所有状态信息都需要持久存储于存储系统etcd中,不过,etcd是由coreos基于raft协议开发的分布式键值存储,可用于服务发现、共享配置以及一致性保障(如数据库主节点选择、分布式锁等)。因此,etcd是独立的服务组件,并不隶属于kubernetes集群自身。生产环境中应该以etcd集群的方式运行以确保其服务可用性。
etcd不仅能够提供键值数据存储,而且还为其提供了监听(watch)机制,用于监听和推送变更。k8s集群系统中,etcd中的键值发生变化时会通知到apiserver,并由其通过watch api向客户端输出。基于watch机制**,k8s集群的个组件实现了高效协同。**
Node 组件
1、kubelet:
kubelet 是 Master 在 Node 节点上的 Agent,管理本机运行容器的生命周期,比如创建容器,Pod 挂载数据卷,下载 secret,获取容器和节点状态等工作,kubelet 将每个 Pod 转换成一组容器。它从apiserver接收关于pod对象的配置信息并确保它们处于期望的状态(desired state,也是目标状态)。kubelet会在apiserver上注册当前工作节点,定期向master汇报节点资源使用情况,并通过cadvisor监控容器和节点的资源占用状况。
2、kube-proxy:
在 Node 节点上实现 Pod 网络代理,维护网络规则和四层负载均衡工作。
它能够按需为service资源对象生成iptables或ipvs规则,从而捕获访问当前service的clusterip的流量并将其转发至正确的后端pod对象,实现让 Pod 节点(一个或者多个容器)对外提供服务 docker 或 rocket。
3、container runtime
每个node都要提供一个容器运行时环境,它负责下载镜像并运行容器。kubelet并未固定链接至某容器运行时环境,而是以插件的方式载入配置的容器环境,这种方式清晰地定义了各组件的边界。目前k8s支持的容器运行环境包括docker、rkt、cri-o、fraki等。
核心组件
k8s集群还依赖于一组成为“组件”(add-ons)的组件以提供完整的功能,它们通常是由第三方提供的特定应用程序,并且托管运行于k8s集群之上。
kubedns:负责为整个集群提供 DNS 服务。在k8s集群中调度运行提供dns服务的pod,同一集群中的其他pod可使用此dns服务器解决主机名。k8s自1.11版本开始默认使用coredns项目为集群提供服务注册和服务发现的动态名称解析服务,之前的版本中用到的是kube-dns和skydns项目。
dashboard:提供 GUI图形化界面。kubernetes集群的全部功能都要基于web的UI来管理集群中的应用甚至是集群自身。
heapster:提供资源监控。容器和节点的性能监控与分析系统,它手机并解析多种指标数据,如资源利用率、生命周期事件等。新版本的k8s中,其功能会逐渐由prometheus结合其他组件所取代。
ingress controller:为服务提供外网入口。service是一种工作于传统层的负载均衡器,而ingress是在应用层实现的http(s)负载均衡机制。不过,ingress资源自身并不能进行“流量穿透”,它仅是一组路由规则的集合,这些规则需要通过ingress控制器(ingress controller)发挥作用。目前,此类的可用项目有nginx、traefik、envoy及haproxy等。
Fluentd-elasticsearch :提供集群日志采集、存储与查询