Kubernetes in Action笔记 - (2) k8s集群架构

分享到:

文章目录

集群架构

k8s集群由很多节点组成,被分成两种类型:Master节点与Node节点。

Master节点

承载着控制和管理整个集群系统的 Control Panel。包含下面组件:

  • API Server
    • 一个api服务器,所有外部与k8s集群的交互都需要经过它
    • 可水平扩展
  • Scheduler
    • 将pod调度到具体的Node节点上
    • 一个master集群中只会有一个节点处于激活状态,由etcd选举产生
  • Control Manager
    • 执行集群级别的功能,通过apiserver监控集群状态做出相应的处理,如复制组件、持续跟踪工作节点 、处理节点失败等
    • 一个master集群中只会有一个节点处于激活状态,由etcd选举产生
  • etcd
    • 一个可靠的分布式数据存储,它能持久化存储集群配置。使用RAFT算法

k8s依赖etcd所以不存在数据一致性的问题(把数据一致性压到了etcd上),所以k8s master不需要采取投票的机制来进行选举,而只需节点健康就可以成为leader。所以这边master并不要求奇数,偶数也是可以的。那么master高可用至少需要2个节点,失败容忍度是(n/0)+1,也就是只要有一个是健康的k8s master集群就属于可用状态。(这边需要注意的是master依赖etcd,如果etcd不可用那么master也将不可用)

etcd的失败容忍度:最小可用节点数:(n/2)+1。通常是奇数节点,防止脑裂

Node 节点

无高可用一说。

主要的几个组件:

  • Container Runtime
    • 每个节点都需要一个容器运行时来执行容器,比如Docker。非pod启动。
  • kubelet
    • 用于执行API server下达的命令,也可以重启启动失败的pod。
  • kube-proxy (Kubernetes Service Proxy)
    • 通过修改iptables来达到网络代理、负载均衡的效果

组件之间的通讯

系统组件间只能通过API服务器通信,它们之间不会直接通信。

唯一能直接和etcd通信的是 k8s 的API服务器。所有其他组件通过API服务器间接地读取、写入数据到etcd。这带来一些好处,其中之一就是增强乐观锁系统、验证系统的健壮性;并且,通过把实际存储机制从其他组件抽离,未来替换起来也更容易

使用Kubernetes的好处

简化应用程序部署

由于k8s将其所有工作节点公开为一个部署平台, 因此应用程序开发人员可以直接部署应用程序,不需要了解组成集群的服务器。

开发人员通常不关心应用程序运行在哪个服务器上,只要服务器能够为应用程序提供足够的系统资源即可。

有时开发人员需要指定应用程序应该运行在哪种硬件上,比如SSD,那只需要告诉k8s只在具有 SSD 的节点中进行选择即可。

更好地利用硬件

将应用程序与基础设施分离开来, k8s根据资源需求描述和每个节点上的可用资源选择最合适的节点

通过使用容器,不再用把这个应用绑定到一个特定的集群节点,而允许应用程序在任何时候都在集群中自由迁移。让节点的硬件资源得到尽可能好的利用。

健康检查和自修复

k8s 监控应用程序组件和它们运行的节点,并在节点出现故障时自动将它们重新调度到其他节点。这使运维团队不必手动迁移应用程序组件,并允许团队立即专注于修复节点本身, 并将其修好送回到可用的硬件资源池中, 而不是将重点放在重新定位应用程序上。

自动扩容

可以让k8s监视每个应用程序使用的资源, 自动调整每个应用程序的运行实例数量。这意味着运维团队不需要不断地监控单个应用程序的负载


图书资料:

参考: