架构图
Kubernetes (K8s) 集群架构主要由以下组件组成:
1. Master 节点(控制平面 / Control Plane)
负责管理整个集群的状态和调度,主要组件包括:
- API Server: 集群的核心,负责处理外部请求(如 kubectl 命令)以及集群内部组件之间的通信。所有操作都需要通过 API Server 进行。
- Scheduler: 负责根据调度策略将容器分配到集群中的节点上。
- Controller Manager: 负责集群中的控制循环(Control Loop),如节点故障检测、Pod 副本控制等。
- etcd: 分布式键值存储,用于保存集群的所有配置信息和状态数据。
2. Node 节点(工作节点 / Worker Nodes)
负责运行应用容器,主要组件包括:
- Kubelet: 每个节点上的核心代理,负责与 API Server 通信,并根据调度命令在本地启动和停止容器。
- Kube-proxy: 负责维护网络规则,实现 Kubernetes 服务的负载均衡和服务发现功能。
- 容器运行时(Container Runtime) : 用于运行容器的组件,常见的容器运行时包括 Docker、containerd 等。
3. Pod
- Kubernetes 中的最小可调度单位,每个 Pod 中可以包含一个或多个容器,通常运行一个业务容器。Pod 在节点上调度和管理。
4. 集群网络
- Kubernetes 依赖于一个平面网络,各 Pod 和服务可以在集群中互相通信。常见的网络插件有 Flannel、Calico、Weave 等。
5. Storage(存储)
- Kubernetes 支持不同类型的存储,如本地存储、NFS、云存储(如 AWS EBS、GCP Persistent Disk)等,通过 PersistentVolume(PV)和 PersistentVolumeClaim(PVC)进行存储管理。
6. 监控与日志系统
- 监控集群健康状态的工具(如 Prometheus、Grafana)。
- 日志系统(如 Elasticsearch、Fluentd、Kibana,简称 EFK)。
7. 其他核心概念
- Namespace: 用于将集群中的资源进行逻辑隔离。
- Service: 提供一组 Pod 的统一访问入口,实现负载均衡和服务发现。
- Ingress: 提供外部访问集群内部服务的入口。
- ConfigMap 和 Secret: 用于管理非机密和机密的配置信息。
8. 集群拓扑结构
K8s 集群通常采用 主从架构,即一个或多个 Master 节点管理集群中的多个 Worker 节点。集群的可靠性和可扩展性可以通过增加 Master 和 Worker 节点来提高。一般情况下,生产环境中 Master 节点会进行高可用部署,以避免单点故障。
集群内部通信依赖于 Service 和 Pod IP,此外集群也可以配置外部负载均衡器和存储等资源来满足不同的业务需求。