k8s集群架构是什么☆

148 阅读4分钟

Kubernetes (K8s) 集群架构由多个组件组成,主要分为控制平面(Control Plane)和工作节点(Worker Node)。控制平面负责集群的管理与调度,而工作节点则运行实际的应用程序和服务。下面是 K8s 集群架构的主要组件:

1. 控制平面(Control Plane)

控制平面是集群的大脑,负责管理整个集群的状态。它处理所有的任务调度、资源分配和集群状态维护。控制平面通常由多个组件组成,以下是控制平面的核心组件:

  • API Server (kube-apiserver)

    • 作为 K8s 集群的入口点,所有的操作请求(如部署、修改、删除资源)都会通过 API Server 进行。它提供了集群资源的 RESTful API 接口,所有的组件和用户与 K8s 的交互都是通过它来实现的。
    • 它是集群中的唯一管理接口,并且与其他控制平面组件(如 etcd、controller manager)进行通信。
  • etcd

    • 一个高可用的键值存储数据库,K8s 使用它来存储集群的所有数据和状态,包括节点信息、Pod 状态、配置等。所有的集群状态都保存在 etcd 中,是集群的 "源数据"。
    • etcd 通常是一个分布式系统,可以保证数据的一致性和高可用性。
  • Controller Manager (kube-controller-manager)

    • 控制器是 K8s 的守护进程,负责维护集群状态并根据需要进行调整。它监控 K8s 集群的状态,并执行相应的操作。例如,ReplicaSet 控制器会确保指定数量的副本 Pods 始终处于运行状态。
    • Controller Manager 会通过 API Server 与 etcd 进行交互,以便同步集群的状态。
  • Scheduler (kube-scheduler)

    • 调度器负责将待运行的 Pod 调度到合适的工作节点上。它根据节点的资源利用情况、优先级、调度策略等因素来选择最适合的节点。
    • 调度器还会考虑 Pod 的 Affinity、Taints 和 Tolerations 等设置,确保 Pod 能够在合适的环境中运行。

2. 工作节点(Worker Node)

工作节点是实际承载应用程序和服务的地方。每个工作节点上都运行着一组 K8s 组件,主要包括:

  • Kubelet (kubelet)

    • Kubelet 是每个工作节点上的主要代理,负责确保容器在节点上按照 Pod 定义的规范运行。它监控容器的生命周期,并与 API Server 通信,确保节点上的资源与集群状态保持一致。
    • 它会定期向 API Server 报告节点和 Pod 的状态,确保集群中的状态与期望的一致。
  • Kube Proxy (kube-proxy)

    • Kube Proxy 是工作节点上的网络代理,负责维护网络规则,确保 Pod 能够通过正确的网络路由进行通信。
    • 它通常会在每个节点上运行,并提供服务发现、负载均衡等功能。它根据 Service 的定义配置网络规则,使得流量能够正确地路由到相应的 Pod。
  • Container Runtime

    • 容器运行时是负责容器生命周期管理的组件,K8s 支持多种容器运行时,包括 Docker、containerd、CRI-O 等。容器运行时负责拉取镜像、创建和销毁容器等操作。
    • 在大多数 K8s 集群中,Docker 是默认的容器运行时,但现在 Kubernetes 推荐使用 containerd 或 CRI-O 等作为容器运行时。

3. K8s 集群架构示意图

                +--------------------------------------+
                |            Control Plane            |
                |                                      |
                |  +------------+  +----------------+  |
                |  |  API Server|  |   Controller   |  |
                |  +------------+  |    Manager     |  |
                |  +------------+  +----------------+  |
                |  |    etcd    |                      |
                |  +------------+  +----------------+  |
                |  | Scheduler  |                      |
                |  +------------+                      |
                +--------------------------------------+
                           |              |
             +-------------+--------------+-------------+
             |                                             |
  +-----------------+                         +-----------------+
  |    Worker Node 1|                         |    Worker Node 2|
  |                 |                         |                 |
  |  +----------+   |                         |  +----------+   |
  |  |  Kubelet |   |                         |  |  Kubelet |   |
  |  +----------+   |                         |  +----------+   |
  |  +----------+   |                         |  +----------+   |
  |  | Kube Proxy|   |                         |  | Kube Proxy|   |
  |  +----------+   |                         |  +----------+   |
  |  +------------+  |                         |  +------------+  |
  |  | Container  |   |                         |  | Container  |   |
  |  | Runtime    |   |                         |  | Runtime    |   |
  |  +------------+  |                         |  +------------+  |
  +-----------------+                         +-----------------+

4. 其他重要组件

  • Ingress Controller:

    • Ingress 是 Kubernetes 中的一个 API 对象,用于管理外部流量的访问控制。Ingress Controller 是实现 Ingress 规则的组件,它负责将 HTTP/HTTPS 请求路由到集群内的服务。
  • Metrics Server:

    • Metrics Server 是 K8s 集群的监控组件,它收集每个节点和 Pod 的资源使用情况(如 CPU、内存等)。它为自动扩缩容(如 Horizontal Pod Autoscaler)和其他资源管理提供数据支持。

5. 高可用性与冗余

  • K8s 支持控制平面的高可用部署,可以通过在多个主机上部署多个控制平面组件(如 API Server、Controller Manager、Scheduler 和 etcd)来确保系统的容错能力。
  • 工作节点也可以通过水平扩展进行增加,确保集群的弹性和负载分担。

总结

Kubernetes 集群架构采用了控制平面和工作节点的设计,将集群管理与应用运行分开,使得集群的维护、扩展和管理更加灵活和高效。控制平面负责集群的整体管理,而工作节点则专注于运行容器化的应用程序。通过这些组件的协作,K8s 能够实现容器化应用的自动化部署、扩展、故障恢复等关键功能。