【Kubernetes】Kubernetes 集群的组件介绍

  • 基本概念
  • 控制平面组件(Control Plane Components)
    • kube-apiserver
    • etcd
    • kube-scheduler
    • kube-controller-manager
    • cloud-controller-manager(可选)
    • kube-apiserver的重要性 ❗
  • Node 组件
    • kubelet
    • kube-proxy
    • 容器运行时(Container Runtime)
  • 感谢
  • 参考

基本概念

当你部署完 Kubernetes,便拥有了一个完整的集群。

下面先介绍一些基本概念:

节点Node):即一组工作机器, 会运行容器化应用程序。每个集群至少有一个工作节点。

Pod:工作节点会托管 Pod,而 Pod 就是作为应用负载的组件。Pod里面至少会运行一个容器。

控制平面(Control Plane) :管理集群中的工作节点和 Pod。 在生产环境中,控制平面通常跨多台计算机运行, 一个集群通常运行多个节点,提供容错性和高可用性。

在K8s集群中,我们通常会有一个master节点和多个worker节点。master节点上起的启动所有控制平面组件。而worker节点会运行容器化应用程序。

下面这张图展现了一个正常运行的 Kubernetes 集群所需的各种组件。
【Kubernetes】Kubernetes 集群的组件介绍_第1张图片

控制平面组件(Control Plane Components)

控制平面组件会为集群做出全局决策,比如资源的调度。
控制平面组件可以在集群中的任何节点上运行。 然而,为了简单起见,设置脚本通常会在同一个计算机上启动所有控制平面组件, 并且不会在此计算机上运行用户容器。这个机器通常叫做master机器。

kube-apiserver

kube-apiserver是 Kubernetes 控制平面中的一个核心组件,它是整个集群的 API 入口点,被认为是控制平面的"前端"。它提供了与集群交互的方式,让用户、开发人员和其他组件可以通过 API 请求来管理和操作集群中的资源。

Kube-apiserver 的关键特性包括:

  • API 暴露: Kube-apiserver 暴露了 Kubernetes API,允许用户和外部组件通过 HTTP请求进行交互。这些请求可以用于创建、更新、删除和查询各Kubernetes 资源,如 Pod、Service、Deployment等。
  • 授权和认证: Kube-apiserver 管理集群中的用户和身份验证,确保只有经过授权的用户能够访问API。它支持多种认证方式,如基本身份验证、令牌、客户端证书等。
  • 资源管理: Kube-apiserver 处理对集群资源的请求,通过 API 请求来创建和管理资源,如Pod、ReplicaSet、Namespace 等。它确保资源的合理分配和正确状态。
  • 扩展性: Kube-apiserver 支持水平扩展,可以通过部署多个实例来平衡流量和提高可用性。多个 kube-apiserver实例可以通过负载均衡器来分担请求。
  • 版本控制: Kubernetes API 支持多个版本,允许不同版本的客户端与不同版本的服务器进行交互。Kube-apiserver管理这些不同的 API 版本,并确保向后兼容性。

etcd

etcd是一个一致性且高可用的键值存储数据库

etcd 的关键特性包括:

  • 数据存储: Kubernetes 集群中的所有数据,包括集群状态、配置信息、资源定义等,都存储在 etcd 中。这使得集群的状态和配置可以在整个集群中保持一致。
  • 一致性: etcd 使用 Raft 算法来确保数据的一致性和可用性。这意味着它可以在各个节点之间实现数据的同步和复制,从而避免数据丢失或不一致。
  • 高可用性: etcd 支持多节点部署,可以配置为高可用集群。这确保了即使某个节点出现故障,集群仍然可以继续正常运行。

由于 etcd 承载了 Kubernetes 集群的关键数据,确保定期备份 etcd 数据非常重要。在数据损坏、故障或其他紧急情况下,备份可以帮助恢复集群状态。

kube-scheduler

kube-scheduler 负责监视新创建且未指定运行节点(node)的 Pods,并根据一系列规则和策略,选择合适的节点来让 Pod 在上面运行。kube-scheduler 的目标是在集群中实现高效的资源利用、负载均衡和高可用性。

kube-scheduler 的关键特性包括:

  • 节点选择: 当用户创建一个新的 Pod 时,Pod 通常不会直接指定运行在哪个节点上。kube-scheduler 通过考虑各种因素,为每个 Pod 选择一个适合的节点。
  • 负载均衡: kube-scheduler 的目标之一是实现负载均衡。它会考虑节点的当前负载情况,避免将过多的 Pod 放置在某个节点上。

kube-controller-manager

kube-controller-manager 是 Kubernetes 控制平面中的一个重要组件,它负责运行多个控制器进程,这些控制器进程用于监视和管理集群的状态。尽管从逻辑上看,每个控制器都是一个独立的进程,但出于简化和管理方便的考虑,它们被编译到同一个可执行文件中,并在同一个进程中运行。

控制器的作用是确保集群的期望状态与实际状态一致。它们监视集群资源和事件,然后采取相应的操作来维护资源的状态。无论是故障恢复、自动伸缩、任务管理还是网络配置,控制器在 Kubernetes 中起着关键作用,使集群能够自动适应变化和需求。

Kubernetes 中有许多不同类型的控制器,每个控制器负责特定类型的任务和功能。以下是一些示例:

  • 节点控制器(Node Controller):负责在节点出现故障时进行通知和响应
  • 副本控制器(Replication Controller): 负责维护 Pod 副本数量的稳定性。如果副本数量不足或过多,副本控制器将自动进行扩容或缩减。
  • 任务控制器(Job Controller): 监测代表一次性任务的 Job 对象。当任务需要运行时,Job 控制器创建 Pods 来运行任务,确保任务完成后进行清理。
  • 端点分片控制器(EndpointSlice Controller): 填充 EndpointSlice 对象,以提供 Service 和 Pod 之间的连接。它与 Service 控制器一起确保网络流量正确路由到服务后端。
  • 服务账号控制器(ServiceAccount Controller): 为新的命名空间创建默认的服务账号。这有助于确保新命名空间中的应用程序可以使用适当的服务账号。

cloud-controller-manager(可选)

cloud-controller-manager这个组件是可选的,云控制器管理器的主要目标是将与特定云平台的交互逻辑从核心 Kubernetes 控制器中分离出来,使集群可以更轻松地连接到云提供商的 API,并根据需要与云平台进行交互。

kube-apiserver的重要性 ❗

Kubernetes 控制平面中的 kube-apiserver 与其他组件之间的关系非常密切,它被认为是控制平面的"前端",负责公开 Kubernetes API 并处理来自用户、应用程序和其他组件的请求。

它为什么这么重要?因为它:

  • 与用户和应用程序交互: kube-apiserver 是控制平面的入口点,允许用户和应用程序通过 API 请求与 Kubernetes 集群交互。它接收并处理创建、修改、删除资源(如 Pod、Service、Deployment 等)的请求。
  • 与其他控制平面组件交互: 其他控制平面组件,如 kube-controller-manager、kube-scheduler 和 cloud-controller-manager,也通过 kube-apiserver 进行交互。它们通过 API 请求查询和修改集群状态、配置和资源。
  • 与节点组件交互: 节点组件,如 Kubelet 和 Kube Proxy,也通过 kube-apiserver 与控制平面交互。例如,Kubelet 会定期向 kube-apiserver 报告节点状态和资源使用情况。

Node 组件

节点组件会在每个节点上运行,负责维护运行的 Pod 并提供 Kubernetes 运行环境。

kubelet

kubelet 会在集群中每个节点(node)上运行。它会监控 Pod 中的容器状态。如果容器失败或停止,kubelet 会尝试重新启动容器,保持 Pod 中所有容器的健康状态。它还会提供健康检查、资源管理和网络设置等功能。

kube-proxy

kube-proxy 是集群中每个节点(node)上所运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。kube-proxy 维护节点上的一些网络规则, 这些网络规则会允许从集群内部或外部的网络会话与 Pod 进行网络通信。

容器运行时(Container Runtime)

节点的底层由一个叫做容器运行时的软件进行支撑,它负责比如启停容器这样的事情。最广为人知的容器运行时当属Docker,但它不是唯一的。事实上,我们使用K8s插件API:容器运行时接口(Container Runtime Interface, CRI)。例如 containerdCRI-Ocri-docker

感谢

好啦,这次的分享就到这里,感谢大家看到这里

参考

Kubernetes官方文档

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