Kubernetes组件

139 阅读3分钟

组件位置

一个kubernetes集群主要是由控制节点(master)、工作节点(node)构成,每个节点上都会安装不同的组件。

控制平面组件

  • API Server(在集群中表现为名称是 kubernetes 的 service)
    提供 HTTP Rest 接口,负责接收所有请求(来自 Dashboard 的 UI 界面或者 kubectl 命令行工具),是所有资源增删改查和集群控制的唯一入口,提供认证、授权、API注册和发现等机制。然后,API Server 根据用户的具体请求,去通知其他组件干活。
  • Scheduler
    负责 Pod 调度,按照预定的调度策略将Pod调度到相应的node节点上。
  • ControllerManager
    负责监视和维护集群的状态。当故障时转移资源对象,自动修复集群到期望状态。比如程序部署安排、故障检测、自动扩展、滚动更新等 。比如用户要求 A 服务部署 2 个副本,那么当其中一个服务挂了的时候,Controller 会马上调整,让 Scheduler 再选择一个 Worker Node 重新部署服务。
  • Etcd集群
    负责存储集群中各种资源对象的配置信息。仅 API Server 才具备读写权限,其他组件必须通过 API Server 的接口才能读写数据

数据平面组件(其中 Kubelet、KubeProxy、Logging Layer 比较重要)

  • Kubelet
    负责维护容器的生命周期,即通过控制docker,来创建、更新、销毁容器,并与 Master 密切协作实现集群管理(注册自己,汇报 Node 状态)。
  • KubeProxy
    负责kubernetes 集群内部的 service 的服务发现和负载均衡。
  • Container Runtime 运行环境,即安装了容器化所需的软件环境确保容器化程序能够跑起来。比如 Docker Engine :负责本机容器的创建和管理。
  • Logging Layer
    K8S 的监控状态收集器,负责采集 Node 上所有服务的 CPU、内存、磁盘、网络等监控项信息。
  • Add-Ons
    K8S 管理运维 Worker Node 的插件组件。

image.png

调用关系

下面,以部署一个nginx服务来说明kubernetes系统各个组件调用关系:

  1. 首先要明确,一旦kubernetes环境启动之后,master和node都会将自身的信息存储到etcd数据库中。
  2. 一个nginx服务的安装请求会首先被发送到master节点的apiServer组件。
  3. apiServer组件会调用scheduler组件来决定到底应该把这个服务安装到哪个node节点上。
  4. 在此时,它会从etcd中读取各个node节点的信息,然后按照一定的算法进行选择,并将结果告知apiServer。
  5. apiServer调用controller-manager去调度Node节点安装nginx服务。
  6. kubelet接收到指令后,会通知 Docker Engine ,然后由 Docker Engine 来启动一个nginx的pod,pod是kubernetes的最小操作单元,容器必须跑在pod中。
  7. 至此,一个nginx服务就运行了,如果需要访问nginx,就需要通过kube-proxy来对pod产生访问的代理。

这样,外界用户就可以访问集群中的nginx服务了。