K8s组件介绍(面试常问)
当你部署完 Kubernetes,便拥有了一个完整的集群。K8s集群中的每台机器称为一个节点,运行容器化应用程序。每个集群至少有一个工作节点。
节点会托管Pod(一组容器) 控制平面管理集群中的节点和 Pod。 在生产环境中,控制平面通常跨多台计算机运行, 一个集群通常运行多个节点,提供容错性和高可用性。
K8s集群由以下组件构成:
-
控制平面组件(Control Plane Components) 相当于服务端
控制平面组件会为集群做出全局决策,比如资源的调度。 以及检测和响应集群事件。控制平面组件可以在集群中的任何节点上运行。不过为了简单起见,我们一般会只运行在Master上,并且不会在此服务器上运行用户容器。
-
APIserver:所有组件的入口。所有的组件都要经过APIserver(司令部)
APIserver是k8s最重要的核心组件之一,它是k8s集群管理的统一访问入口,提供了RESTful API接口,实现了认证、授权和准入控制等安全功能;APIserver还是其他组件之间的数据交互和通信的枢纽,其他组件彼此之间并不会直接通信,其他组件对资源对象的增、删、改、查和监听操作都是交由api-server处理后,api-server再提交给etcd数据库做持久化存储,只有api-server才能直接操作etcd数据库,其他组件都不能直接操作etcd数据库,其他组件都是通过api-server间接的读取,写入数据到etcd。
-
etcd:k8s所有集群数据的后台数据库
-
scheduler:调度器,负责调度和计算,计算哪些节点(node)上资源够创建新的pod
-
controller-manager:根据scheduler计算结果,控制客户端上的kubelet创建pod
-
-
node 客户端
-
kubelet:创建pod(相当于docker run)
kubelet 会在集群中每个节点(node)上运行。 它保证容器(containers)都运行在 Pod 中。kubelet 接收一组通过各类机制提供给它的 PodSpec,确保这些 PodSpec 中描述的容器处于运行状态且健康。 kubelet 不会管理不是由 Kubernetes 创建的容器。
-
kube-proxy:提供网络
kube-proxy 是集群中每个节点(node)上所运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。简单理解此进程是Service的透明代理兼负载均衡器,其核心功能是将到某个Service的访问请求转发到后端的多个Pod实例上。
-
container runtime:容器运行时,K8s支持多种容器运行环境,如docker 、 containerd 、CRI-O 等
-