K8s 核心组件介绍

目录

    • 前言
    • 一、控制平面组件
      • 1.1 kube-apiserver
      • 1.2 etcd
      • 1.3 kube-scheduler
      • 1.4 kube-controller-manager
      • 1.5 cloud-controller-manager
    • 二、Node 组件
      • 2.1 kubelet
      • 2.2 kube-proxy
      • 2.3 Container Runtime


前言

一个完整的 K8s 集群由一组节点(node)服务器组成,这些服务器节点运行着 K8s 所管理的容器化应用,且每个集群至少有一个工作节点(work node)。工作节点会托管所有的 Pods,而 Pod 就是作为应用负载的组件。

控制平面管理集群中的工作节点和 Pods,为集群提供故障转移和高可用性。

K8s 核心组件介绍_第1张图片

基础架构:
K8s 核心组件介绍_第2张图片

一、控制平面组件

控制平面组件会为集群做出全局决策(如:集群资源调度、检测和响应等),控制节点可以在集群中的任何节点上运行,接下来看看控制平面组件都有哪些。

1.1 kube-apiserver

该组件负责公开 K8s API,负责 API 请求处理,提供了资源操作的唯一入口(如认证、授权、访问控制、API 注册等),是 K8s 的前端控制平面组件。

kube-apiserver 可进行水平扩/缩容(通过部署多个 kube-apiserver 实例来实现),实现多 kube-apiserver 实例的流量平衡。

1.2 etcd

etcd 是兼顾一致性与高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库,它保存了整个 K8s 集群的状态。

通常,我们也要对 ETCD 集群做相关备份工作,更多 ETCD 相关内容可阅读其官方文档

1.3 kube-scheduler

该组件负责资源调度,如监视新创建的、未指定运行节点(node) 的 Pods, 并选择节点来让 Pod 在上面运行。

调度决策考虑的因素包括单个 Pod 及 Pods 集合的资源需求、软硬件及策略约束、 亲和性及反亲和性规范、数据位置、工作负载间的干扰等。

1.4 kube-controller-manager

该组件负责运行控制器进程,从逻辑上讲,每个控制器都是单独的一个进程,但是为了降低复杂性,这些控制器都被编译到同一个可执行文件,并在同一个进程中运行。负责维护集群状态,如故障检测、自动扩展、滚动更新等。

控制器主要包括:

  • 节点控制器(Node Controller):负责在节点出现故障时进行通知和响应;
  • 任务控制器(Job Controller):负责检测一次性任务的 Job 对象,然后创建 Pods 来运行这些任务直至完成;
  • 端点控制器(Endpoints Controller):填充端点(Endpoints)对象,即加入 Service 与 Pod;
  • 服务账户和令牌控制器(Service Account & Token Controllers):为新的命名空间创建默认帐户和 API 访问令牌。

1.5 cloud-controller-manager

该组件是指嵌入特定云的控制逻辑控制平面组件,允许你将 K8s 集群连接到云提供商的 API 上,并将与该云平台交互的组件同与你的集群交互的组件分离开来。

二、Node 组件

2.1 kubelet

该组件运行在 K8s 集群中的每个 work 节点上,保证容器都运行在 Pod 中。

kubelet 接收一组通过各类机制提供给它的 PodSpecs, 确保这些 PodSpecs 中描述的容器处于运行状态且健康。kubelet 不会管理不是由 Kubernetes 创建的容器。

2.2 kube-proxy

该组件运行在 K8s 集群中的每个 work 节点上,是集群中每个 work 节点上运行的网络代理,负责维护节点上的一些网络规则, 这些网络规则会允许从集群内部或外部的网络会话与 Pod 进行网络通信。

如果操作系统提供了可用的数据包过滤层,则 kube-proxy 会通过它来实现网络规则。 否则,kube-proxy 仅做流量转发。

2.3 Container Runtime

该组件是容器运行时,是负责运行容器的软件。

Kubernetes 支持许多容器运行环境,例如 Docker、Containerd、CRI-O 等。

你可能感兴趣的:(DevOps,kubernetes,云原生)