Kubernetes 集群主要分为两个平面,分别是控制组件、计算组件、扩展组件。 ![image.png](https://cdn.nlark.com/yuque/0/2023/png/35086385/1691491505977-53133197-2297-4524-87c0-c39be34ca65d.png#averageHue=%23efefef&clientId=u17cf3253-f6c0-4&from=paste&height=651&id=u2903635a&originHeight=1360&originWidth=1576&originalType=binary&ratio=2.5&rotation=0&showTitle=false&size=147562&status=done&style=none&taskId=u0125885e-cdf6-483f-9e77-12ec1864534&title=&width=754.4000244140625) ## 控制面组件 | **组件** | **说明** | | --- | --- | | kube-apiserver(其他模块通过API Server查询或者修改数据,只有API Server才能直接操作etcd) | 对外提供RESTful API接口、集群管理事件的统一入口,负责集群的监听、认证、授权、准入控制。对内负责协调kube-controller-manager、kube-scheduler、kubelet、kube-proxy,所有的对象资源的增删改查都交给APIServer处理后再提交给etcd做持久化存储。 | | kube-controller-manager(渊博的学者,功能类都由它实现,可以自动补全yaml文件) | 从逻辑上讲,每个控制器都是一个单独的进程,但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。负责管理集群各种资源,保证资源处于预期的状态。ControllerManager由多种controller组成,包括Node Controller、Job controller、Endpoints Controller、Service Account & Token Controllers等。 | | kube-scheduler | kube-scheduler,在预选阶段首先过滤掉不满足当前Pod请求的Nodes。在优选阶段,根据一系列函数对剩余可承接本次调度的Nodes评分,选出其中得分最高的 Node,并将调度决定告知kube-apiserver,这个过程叫做绑定(Binding)。 | | etcd | etcd是一个高可用的分布式键值数据库,可用于服务发现。etcd采用raft一致性算法,基于Go语言实现。Eted作为一个高可用键值存储系统,天生就是为集群化而设计的。用于保存Kubernetes资源状态数据。 | ## 计算面组件 | **组件** | **作用** | | --- | --- | | kubelet | 每个Nodes都以systemd 服务的形式运行着软件包安装的kubelet。kubelet是kube-apiserver在node上的容器运行时代理,当Scheduler确定在某个Node上运行Pod后,会将Pod的具体配置信息(image、volume等)发送给该节点的 kubelet,kubelet会根据这些信息调用该节点上的容器运行时创建和维护容器的生命周期,并默认每隔10s向kube-apiserver 报告当前节点的运行状态。 | | kube-proxy | 集群出厂使用DaemonSet控制器在每个Nodes上运行kube-proxy Pod,kube-proxy配合service做服务发现,负责维护每个Nodes上iptables NAT表的自定义链或LvS的路由规则表。将访问的service的TCP/UDP数据流转发到后端Pod的真实私有IP地址。 | | container Runtime | 容器运行时是负责运行容器的软件。Kubernetes支持多个容器运行环境: Docker (+ cri-dockerd)、 Containerd、CRI-O以及任何其它实现Kubernetes CRI(容器运行环境接口)。 | ## 扩展组件 | 组件 | 作用 | | --- | --- | | CroeDNS | 为集群提供DNS解析能力 | | Dashborad | 提供web管理界面 | | Metrics-Server | 集群监控指标服务 | | Calico | 网络插件,提供集群内网络能力 | | Ingress | 提供七层访问能力 |