Kubernetes是如何工作的?


文档摘要

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

Kubernetes是如何工作的?

  • 主节点或主组件是什么?

    • 什么是Kube-ApiServers
    • etcd
    • kube调度器
    • kube控制器管理器
    • 云控制器管理器
  • 节点组件是什么?

    • kubelet
    • kube代理
  • 附加组件

    • DNS
    • 网页UI
    • 容器资源监控

描述文字

Q) 主组件是什么?

  • 主组件提供集群的控制平面。主组件做出关于集群的全局决策(例如,调度),并检测和响应集群事件(例如,当部署的副本字段未满足时启动一个新的pod)。

  • 主组件可以在集群中的任何机器上运行。然而,为了简化,设置脚本通常在同一台机器上启动所有主组件,并且不在该机器上运行用户容器。

  • Kubernetes主节点运行调度器、控制器管理器、API服务器和etcd组件,并负责管理整个Kubernetes集群。简而言之,它是集群的大脑!现在,让我们深入了解每个主组件。

kube-apiserver

  • 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服务器交互。

etcd

  • 用于存储所有集群数据的高可用键值存储系统。

  • 如果你的Kubernetes集群使用etcd作为其后端存储,请确保你有这些数据的备份计划。

  • 对于Kubernetes来说,etcd可靠地存储Kubernetes集群的配置数据,表示集群在任何给定时间点的状态(集群中存在哪些节点,应该运行哪些pod,它们运行在哪些节点上,等等)。

  • Kubernetes使用etcd作为其数据库。

  • Etcd是用Go语言编写的,并使用Raft一致性算法管理一个高可用复制日志。Raft是一种设计为Paxos替代方案的一致性算法。一致性问题涉及多个服务器就值达成一致;这是分布式状态机上下文中常见的一个问题。Raft定义了三种角色(Leader、Follower和Candidate),并通过选举领导者实现一致性。更多信息请阅读Raft论文。

  • Raft一致性算法

  • Etcdctl是用Go语言编写的一个命令行接口工具,允许操作etcd集群。它可以执行各种操作,例如:

    • 设置、更新和删除键。
    • 验证集群健康状况。
    • 添加或移除etcd节点。
    • 生成数据库快照。
  • 你可以在http://play.etcd.io上在线操作一个5节点的etcd集群。

  • Etcd还实现了监视功能,为异步监控键的变化提供了基于事件的接口。一旦键被更改,“观察者”就会收到通知。这是Kubernetes上下文中的一个关键特性,因为API服务器组件严重依赖于此来接收通知并调用适当的业务逻辑组件,使当前状态向期望状态移动。

  • etcd是一个可靠的集群范围协调和状态管理系统。它是基于Raft构建的。

  • Raft为etcd系统中的分布式etcd节点提供了一个事件的总顺序。这有很多优点和缺点:

  • 优点包括:

    • 任何节点都可以像主节点一样对待
    • 最小化停机时间(如果一个节点没有响应,客户端可以尝试另一个节点)
    • 避免分裂脑问题
    • 是一种可靠的分布式锁构建方法
    • 例如:你会使用etcd来协调自动选举新的Postgres主节点,以确保集群中只有一个主节点。
  • 缺点包括:

    • 为了安全起见,需要集群的大多数节点提交写入——通常是到磁盘——然后再回复客户端
    • 相比单一主节点系统,需要更多的网络通信

kube-controller-manager

  • 运行控制器的主组件。

  • 从逻辑上讲,每个控制器都是一个独立的进程,但为了减少复杂性,它们都被编译成一个二进制文件并在一个进程中运行。

  • 这些控制器包括:

    • 节点控制器:负责发现和响应节点下线的情况。
    • 复制控制器:负责维护系统中每个复制控制器对象所需的正确数量的pod。
    • 端点控制器:填充端点对象(即,将服务和服务端点关联起来)。
    • 服务账户和令牌控制器:为新命名空间创建默认账户和API访问令牌。
  • Kube-controller-manager运行控制器,这些控制器是后台线程,负责集群中的例行任务。从逻辑上讲,每个控制器都是一个独立的进程,但为了减少复杂性,它们都被编译成一个二进制文件并在一个进程中运行。

  • Kubernetes控制器管理器是一个守护进程,嵌入了Kubernetes随附的核心控制循环(也称为“控制器”)。基本上,一个控制器通过API服务器的监视功能观察集群的状态,当得到通知时,它会试图通过必要的变更将当前状态推向期望状态。随Kubernetes提供的控制器示例包括复制控制器、端点控制器和命名空间控制器。

  • 此外,控制器管理器执行生命周期功能,如命名空间的创建和生命周期、事件垃圾回收、终止pod垃圾回收、级联删除垃圾回收、节点垃圾回收等。

kube-scheduler

  • 在主节点上运行的组件,监视尚未分配节点的新创建pod,并选择一个节点让它们运行。

  • 调度决策考虑的因素包括单个和集体资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据局部性、工作负载之间的干扰以及截止日期。

  • Kube-scheduler监视尚未分配节点的新创建pod,并选择一个节点让它们运行。

  • 调度器监视未调度的pod,并根据请求资源的可用性、服务质量要求、亲和性和反亲和性规范以及其他约束,通过/binding pod子资源API将它们绑定到节点。一旦pod被分配了节点,Kubelet的常规行为就会被触发,pod及其容器会被创建。

节点组件

  • 节点组件运行在每个节点上,保持正在运行的pod并提供Kubernetes运行环境。

kubelet

  • 在集群中的每个节点上运行的代理。它确保pod中的容器正在运行。

  • Kubelet通过各种机制提供的PodSpec集确保正在运行并健康的容器。Kubelet不会管理由Kubernetes创建之外的容器。

  • Kubelet是主要的节点代理。它监视分配给其节点的pod(无论是通过apiserver还是本地配置文件)并:

    • 挂载pod所需的卷。
    • 下载pod的秘密。
    • 通过docker(或实验性地,通过rkt)运行pod的容器。
    • 定期执行任何请求的容器存活探针。
    • 通过必要时创建镜像pod来向系统其余部分报告pod的状态。
    • 向系统其余部分报告节点的状态。

kube-proxy

  • kube-proxy是在集群中每个节点上运行的网络代理,实现了Kubernetes服务概念的一部分。

  • kube-proxy在节点上维护网络规则。这些网络规则允许来自集群内外的网络会话与你的Pod进行网络通信。

  • 如果操作系统包过滤层可用,kube-proxy会使用它。否则,kube-proxy自己转发流量。

容器运行时

  • 容器运行时是负责运行容器的软件

参考资料:

Kubernetes主组件:etcd、API服务器、控制器管理器和调度器

理解etcd一致性及故障恢复

《Raft一致性算法》

声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。


发布者: 作者: 转发
评论区 (0)
U