Skip to content

模块介绍

Kubernetes 组件介绍

Kubernetes 借鉴了谷歌的 borg 的设计理念,整体架构与 brog 十分相似。其核心组建包含 kube-apiserver ,kube-controller-manager,kube-schedule,kubelet 以及 kube-proxy 。

  • kube-apiserver 提供了资源操作的唯一入口,命令都是从它与 kube 进行交互
  • kube-controller-manager 负责维护集群的状态
  • kube-scheduler 负责资源的调度
  • kubelet 负责维持容器的生命周期
  • kube-proxy 负责提供集群内部的服务发现和负载均衡

此外 kube 还借助 etcd 保存了整个集群的状态

API Server

kube-apiserver 是 Kubernetes 最重要的核心组件之一,所有的操做都是经过 apiserver 实现的。它提供了集群管理接口,以及模块之间的通信。具体来说:

  • 提供集群管理的 REST API 接口,包括认证授权,数据校验以及集群状态变更等
  • 提供其他模块之间的数据交互和通信枢纽,其他模块通过 apiserver 查询或修改数据,同时只有 apiserver 才能直接操作 etcd

apiserver 支持同时提供 http 和 https 接口,其中 http 是非安全接口,不做任何认证授权机制。
实际使用中,使用命令 kubectl 来访问 apiserver 。当然也可以使用 kubernetes 各个语言的 SDK 来访问。

Controller Manager

kube-controller-manager 是 kube 集群的大脑,它通过 apiserver 监控整个集群状态,并确保集群的工作状态处于预期状态。
controller-manager 是由一系列控制器组成,每一个控制器都用于控制 kube 中的某一项特定资源。例如 DeploymentController 用于监控 Deployment ,HPAController 监控 HPA 等等。基本上每个资源都有一个对应的控制器。
kube-controller-manager 提供了控制器内部的逻辑的性能度量,如 go 语言运行时的度量,etcd 请求延时等。它同时原生有普罗米修斯的性能度量数据,默认在 10252 端口。

Scheduler

kube-scheduler 负责分配调度pod到集群内的节点上。它监听 apiserver,查询还未分配 node 的 pod ,然后根据调度策略分配 pod ,更新 pod 的 NodeName 字段。
scheduler 中还包含 Taint 和 Toleration 特性,用于保证 pod 不被调度到不合适的 node 上,其中 taint 用于 node ,toleration 用于 pod 。
调度分为两个阶段,predicate 和 priority :

  1. predicate 是必须满足的要求,不满足的则剔除。过滤不符合条件的节点。
  2. priority 是优先级计算过程,他不剔除任何节点,仅根据策略计算优先级。对节点进行优先排序,选择优先级最高的节点。

用户还可以部署自定义的调度器,同时还可以运行多个调度器实例。

Kubelet

Kubelet 是每个节点的 kube 代理,主要负责底层的操作。每个节点中都运行一个 kubelet 进程,接收并执行 apiserver 发来的指令,管理 pod 以及 pod 中的容器。
每个 kubelet 进程会在 apiserver 上注册节点自身信息,会定期向 apiserver 汇报节点资源使用情况。
apiserver 在接收到 kubelet 的新消息后,会将信息写入 etcd 。
kubelet 监控的是节点和容器的资源使用情况,它通过 cAdvisor 实现。
kubelet 的主要功能包括:节点管理,pod 管理,容器健康检查以及 cAdvisor 资源监控。

Proxy

kubernetes 集群中每一个节点上都运行着一个 kube-proxy 服务进程,它监听 apiserver 中 Service 和 Endpoint 的变化情况,并通过 userspace ,iptables 或 ipvs 等来为服务配置负载均衡。
kube-proxy 可以直接用二进制可执行文件运行在物理机上,也可以用 pod 的方式运行。

etcd

etcd 不是 kube 里面的组件,但是它对于 kube 来说十分重要。
etcd 是 CoreOS 基于 Raft 协议开发的分布式键值存储,可用于服务发现、共享配置以及一致性保障。
etcd 的主要功能包括:基本的键值存储;监听机制 watch ;键的过期及续约机制,用于监控和服务发现;原子 CAS 和 CAD ,用于分布式锁和 Leader 选举。
Kubernetes 使用 etcd 来存储整个集群的状态,包括 Kubernetes 对象的元数据、配置与状态等等。
kubernetes 的整个设计都是基于etcd绝对可靠这个前提进行设计的,所以 etcd 对于 kubernetes 十分重要。

参考:
kubernetes官方文档
kubernetes中文文档