k8s集群架构

    Kubernetes 主要由以下几个核心组件组成:

    • etcd :集群的大脑,存储了集群的所有关键信息,如:pod配置、状态、调度信息,service的名称、端口、选择器,ConfigMap和Secret,node节点状态、资源使用状况,namespace定义和状态,Deployment、Damonset、StatefulSet等
    • kube-apiserver 提供了资源操作的唯一入口,所有组件之间的通讯都要通过apiserver来完成,并提供认证、授权、访问控制等机制;
    • kube-controller-manager:集群中的核心组件之一,它通过运行多种控制器,确保集群的实际状态与期望状态一致。这些控制器包括节点控制器、副本控制器、资源配额控制器、命名空间控制器、服务账户和令牌控制器、端点控制器、持久卷控制器、垃圾回收控制器和证书管理控制器等。它们共同协作,管理集群中的资源生命周期、状态同步、负载均衡、资源清理等任务,确保 Kubernetes 集群的稳定运行和高效管理
    • kube-scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器 上;
    • kubelet : 负责管理节点上的 Pod 和容器的生命周期,确保节点的状态与期望状态一致。它通过与 kube-apiserver 的交互,获取配置信息并报告状态,同时管理容器的运行时环境、资源使用和安全性,同时也负责 Volume(CVI)和网络(CNI)的管理;
    • Container runtime 负责镜像管理以及 Pod 和容器的真正运行(CRI),默认的容器运行时为 Docker;
    • kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡; 服务发现:kube-proxy 通过监听 Kubernetes API Server,获取集群中所有服务(Service)和 Pod 的信息。当客户端请求某个服务时,kube-proxy 能够根据服务的定义,找到对应的后端 Pod。负载均衡:kube-proxy 为每个服务提供负载均衡功能,将客户端的请求均匀分配到后端的多个 Pod 上。它支持多种负载均衡策略,如轮询、随机等

    除了核心组件,还有一些推荐的 Add-ons:

    • kube-dns 负责为整个集群提供 DNS 服务
    • Ingress Controller 为服务提供外网入口
    • Heapster 提供资源监控
    • Dashboard 提供 GUI
    • Federation 提供跨可用区的集群
    • Fluentd-elasticsearch 提供集群日志采集、存储与查询

    Kubernetes 多组件之间的通信原理为 :

    • API Server 负责 etcd 存储的所有操作,且只有 API Server 才直接操作 etcd 集群
    • API Server 对内(集群中的其他组件)和对外(用户)提供统一的 REST API,其他组件均通过 API Server 进行通信
    • Controller Manager、Scheduler、Kube-proxy 和 Kubelet 等均通过 API Server watch API 监测资源变化情况,并对资源作相应的操作
    • 所有需要更新资源状态的操作均通过 API Server 的 REST API 进行
    • API Server 也会直接调用 Kubelet API(如 logs, exec, attach 等),默认不校验 Kubelet 证书,但可以通过 –kubelet-certificate-authority 开启(而 GKE 通过 SSH 隧道保护它们之间的通信)

    创建一个pod的流程为:

    • 用户通过 REST API 创建一个 Pod
    • API Server 将其写入 etcd
    • Scheduluer 检测到未绑定 Node 的 Pod,开始调度并更新 Pod 的 Node 绑定
    • Kubelet 检测到有新的 Pod 调度过来,通过 Container Runtime 运行该 Pod
    • Kubelet 通过 Container Runtime 取到 Pod 状态,并更新到 API Server 中

    端口号:

    Worker node

    标签