Kubernetes 架构
K8s是典型的Master-Worker架构。 Master Node 负责管理整个集群,Worker Node 负责运行应用程序和服务。
MasterNode (K8S控制面)
控制平面组件会为集群做出全局决策,比如资源的调度。 以及检测和响应集群事件,例如当不满足 Deployment 的 replicas
字段时,要启动新的 Pod)。
组成
kube-apiserver
所有的命令和查询都要经过这里,比如 kubectl 工具、Dashboard、甚至其他服务也都是通过 API Server 跟 K8S 交互
etcd
是一个分布式、高可用的键值数据库,用来保存整个集群的所有配置信息和状态,比如Pod、Service的信息
kube-scheduler
它会根据集群资源和调度策略,把Pod分配到合适的Worker Node上跑起来
kube-controller-manager
控制器有许多不同类型。以下是一些例子:
- Node 控制器:负责在节点出现故障时进行通知和响应
- Job 控制器:监测代表一次性任务的 Job 对象,然后创建 Pod 来运行这些任务直至完成
- EndpointSlice 控制器:填充 EndpointSlice 对象(以提供 Service 和 Pod 之间的链接)。
- ServiceAccount 控制器:为新的命名空间创建默认的 ServiceAccount
Worker Node(节点组件)
Worker Node就是K8S集群中实际运行应用和服务的机器,可能是真实服务器,也可能是虚拟机
组成
1. kubelet
kubelet的任务是不断和K8S的控制面进行沟通,告诉它POD的状态
kubelet
会在集群中每个节点(node)上运行。 它保证容器(containers)都运行在 Pod 中。
kubelet 接收一组通过各类机制提供给它的 PodSpec,确保这些 PodSpec 中描述的容器处于运行状态且健康。 kubelet 不会管理不是由 Kubernetes 创建的容器。
2.kube-proxy
kube-proxy 是集群中每个节点(node)上所运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。
kube-proxy 维护节点上的一些网络规则, 这些网络规则会允许从集群内部或外部的网络会话与 Pod 进行网络通信。
如果操作系统提供了可用的数据包过滤层,则 kube-proxy 会通过它来实现网络规则。 否则,kube-proxy 仅做流量转发。
如果你使用网络插件为 Service 实现本身的数据包转发, 并提供与 kube-proxy 等效的行为,那么你不需要在集群中的节点上运行 kube-proxy。
3.container-runtime
这个基础组件使 Kubernetes 能够有效运行容器。 它负责管理 Kubernetes 环境中容器的执行和生命周期。
Kubernetes 支持许多容器运行环境,例如 containerd、 CRI-O 以及 Kubernetes CRI (容器运行环境接口) 的其他任何实现。