Kubernetes是如何工作的? 主节点或主组件是什么? 什么是Kube-ApiServers etcd kube调度器 kube控制器管理器 云控制器管理器 节点组件是什么? kubelet kube代理 附加组件 DNS 网页UI 容器资源监控 描述文字 Q) 主组件是什么? 主组件提供集群的控制平面。主组件做出关于集群的全局决策(例如,调度),并检测和响应集群事件(例如,当部署的副本字段未满足时启动一个新的pod)。 主组件可以在集群中的任何机器上运行。然而,为了简化,设置脚本通常在同一台机器上启动所有主组件,并且不在该机器上运行用户容器。 Kubernetes主节点运行调度器、控制器管理器、API服务器和etcd组件,并负责管理整个Kubernetes集群。
主节点或主组件是什么?
节点组件是什么?
附加组件

主组件提供集群的控制平面。主组件做出关于集群的全局决策(例如,调度),并检测和响应集群事件(例如,当部署的副本字段未满足时启动一个新的pod)。
主组件可以在集群中的任何机器上运行。然而,为了简化,设置脚本通常在同一台机器上启动所有主组件,并且不在该机器上运行用户容器。
Kubernetes主节点运行调度器、控制器管理器、API服务器和etcd组件,并负责管理整个Kubernetes集群。简而言之,它是集群的大脑!现在,让我们深入了解每个主组件。
API服务器是Kubernetes控制平面的一个组件,它暴露了Kubernetes API。API服务器是Kubernetes控制平面的前端。
Kubernetes API服务器的主要实现是kube-apiserver。kube-apiserver设计为水平扩展——也就是说,它通过部署更多实例来扩展。你可以运行多个kube-apiserver实例并将流量在这些实例之间进行负载均衡。
当你使用kubectl命令行界面与你的Kubernetes集群交互时,实际上是在与主API服务器组件通信。
API服务器是整个集群的主要管理点。简而言之,它处理REST操作,验证它们,并在etcd中更新相应的对象。API服务器提供Kubernetes API,并旨在成为一个相对简单的服务器,大多数业务逻辑实现在单独的组件或插件中。
API服务器还负责身份验证和授权机制。所有API客户端都应经过身份验证才能与API服务器交互。
API服务器还实现了监视机制(类似于etcd),供客户端异步监控变化。这使得调度器和控制器管理器等组件能够以松耦合的方式与API服务器交互。
用于存储所有集群数据的高可用键值存储系统。
如果你的Kubernetes集群使用etcd作为其后端存储,请确保你有这些数据的备份计划。
对于Kubernetes来说,etcd可靠地存储Kubernetes集群的配置数据,表示集群在任何给定时间点的状态(集群中存在哪些节点,应该运行哪些pod,它们运行在哪些节点上,等等)。
Kubernetes使用etcd作为其数据库。
Etcd是用Go语言编写的,并使用Raft一致性算法管理一个高可用复制日志。Raft是一种设计为Paxos替代方案的一致性算法。一致性问题涉及多个服务器就值达成一致;这是分布式状态机上下文中常见的一个问题。Raft定义了三种角色(Leader、Follower和Candidate),并通过选举领导者实现一致性。更多信息请阅读Raft论文。
Etcdctl是用Go语言编写的一个命令行接口工具,允许操作etcd集群。它可以执行各种操作,例如:
你可以在http://play.etcd.io上在线操作一个5节点的etcd集群。
Etcd还实现了监视功能,为异步监控键的变化提供了基于事件的接口。一旦键被更改,“观察者”就会收到通知。这是Kubernetes上下文中的一个关键特性,因为API服务器组件严重依赖于此来接收通知并调用适当的业务逻辑组件,使当前状态向期望状态移动。
etcd是一个可靠的集群范围协调和状态管理系统。它是基于Raft构建的。
Raft为etcd系统中的分布式etcd节点提供了一个事件的总顺序。这有很多优点和缺点:
优点包括:
缺点包括:
运行控制器的主组件。
从逻辑上讲,每个控制器都是一个独立的进程,但为了减少复杂性,它们都被编译成一个二进制文件并在一个进程中运行。
这些控制器包括:
Kube-controller-manager运行控制器,这些控制器是后台线程,负责集群中的例行任务。从逻辑上讲,每个控制器都是一个独立的进程,但为了减少复杂性,它们都被编译成一个二进制文件并在一个进程中运行。
Kubernetes控制器管理器是一个守护进程,嵌入了Kubernetes随附的核心控制循环(也称为“控制器”)。基本上,一个控制器通过API服务器的监视功能观察集群的状态,当得到通知时,它会试图通过必要的变更将当前状态推向期望状态。随Kubernetes提供的控制器示例包括复制控制器、端点控制器和命名空间控制器。
此外,控制器管理器执行生命周期功能,如命名空间的创建和生命周期、事件垃圾回收、终止pod垃圾回收、级联删除垃圾回收、节点垃圾回收等。
在主节点上运行的组件,监视尚未分配节点的新创建pod,并选择一个节点让它们运行。
调度决策考虑的因素包括单个和集体资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据局部性、工作负载之间的干扰以及截止日期。
Kube-scheduler监视尚未分配节点的新创建pod,并选择一个节点让它们运行。
调度器监视未调度的pod,并根据请求资源的可用性、服务质量要求、亲和性和反亲和性规范以及其他约束,通过/binding pod子资源API将它们绑定到节点。一旦pod被分配了节点,Kubelet的常规行为就会被触发,pod及其容器会被创建。
在集群中的每个节点上运行的代理。它确保pod中的容器正在运行。
Kubelet通过各种机制提供的PodSpec集确保正在运行并健康的容器。Kubelet不会管理由Kubernetes创建之外的容器。
Kubelet是主要的节点代理。它监视分配给其节点的pod(无论是通过apiserver还是本地配置文件)并:
kube-proxy是在集群中每个节点上运行的网络代理,实现了Kubernetes服务概念的一部分。
kube-proxy在节点上维护网络规则。这些网络规则允许来自集群内外的网络会话与你的Pod进行网络通信。
如果操作系统包过滤层可用,kube-proxy会使用它。否则,kube-proxy自己转发流量。
Kubernetes主组件:etcd、API服务器、控制器管理器和调度器
声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。