暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kubernetes架构和组件

研发生产率生态 2021-03-21
634

     Kubernetes遵循客户端-服务器架构。可以进行多主服务器设置(以实现高可用性),但是默认情况下,只有一台主服务器充当控制节点和联系点。主服务器由各种组件组成,包括一个kube-api服务器,一个etcd存储,一个kube-controller-manager,一个云控制器-manager,一个kube-scheduler以及一个用于Kubernetes服

                                 

        Kubernetes高层架构图,如下图,显示了一个带有一个主节点和两个工作节点的集群   

Master Components

etcd cluster –一个简单的分布式键值存储,用于存储Kubernetes集群数据(例如Pod的数量,其状态,名称空间等),API对象和服务发现详细信息。出于安全原因,只能从API服务器进行访问。etcd可以在观察者的帮助下向集群发出有关配置更改的通知。通知是每个etcd群集节点上的API请求,用于触发该节点存储中信息的更新。

kube-apiserver – Kubernetes API服务器是中央管理实体,它接收所有REST修改请求(对Pod,服务,复制集/控制器等),作为集群的前端。而且,这是与etcd集群通信的唯一组件,确保数据存储在etcd中并与部署的pod的服务详细信息一致。

kube-controller-manager 在后台运行许多不同的控制器进程(例如,复制控制器控制pod中的副本数量,端点控制器填充服务和pod等端点对象),以调节集群的共享状态并执行例行任务。当服务配置发生更改时(例如,替换运行pods的映像,或更改配置yaml文件中的参数),控制器会发现更改并开始朝着新的期望状态工作。

cloud-controller-manager –负责管理依赖于基础云提供商的控制器进程(如果适用)。例如,当控制器需要检查节点是否已终止或在云基础架构中设置路由,负载平衡器或卷时,所有这些都由云控制器管理器处理。

kube-scheduler –根据资源利用率帮助在各个节点上调度Pod(运行我们的应用程序的容器在同一位置的一组容器)。它会读取服务的运行要求,并将其安排在最合适的节点上。例如,如果应用程序需要1GB内存和2个CPU内核,则将在至少具有那些资源的节点上调度该应用程序的Pod。调度程序在每次需要调度Pod时运行。调度程序必须知道可用的总资源以及分配给每个节点上现有工作负载的资源。


Node (worker) components

kubelet –节点上的主要服务,定期接收新的或修改的Pod规范(主要通过kube-apiserver),并确保Pod及其容器健康并在所需状态下运行。该组件还向主机报告运行主机的运行状况

kube-proxy –在每个工作程序节点上运行的代理服务,用于处理各个主机子网,并将服务公开给外部世界。它执行跨集群中各个隔离网络的请求转发到正确的容器/容器

Kubectl

  kubectl命令是一个与kube-apiserver交互并向主节点发送命令的行工具。每个命令都被转换成一个API调用。

Kubernetes Concepts

    可以参考我的上篇: Kubernetes 基础

Kubernetes 设计原则

    Kubernetes旨在支持高可用性分布式系统所需的特性,例如(自动)可伸缩性、高可用性、安全性和可移植。

     Scalability   Kubernetes根据CPU利用率提供Pod的水平扩展。CPU使用率的阈值是可配置的,如果达到阈值,Kubernetes将自动启动新的Pod。例如,如果CPU的阈值是70%,但应用程序实际上增长到220%,则最终将再部署3个Pod,以使平均CPU利用率恢复到70%以下。当特定应用程序有多个Pod时,Kubernetes将在它们之间提供负载平衡能力。Kubernetes还支持通过状态集对有状态Pod进行水平扩展,包括NoSQL和RDBMS数据库。有状态集与部署相似,但是即使存储组被移除,也可以确保存储的持久性和稳定性。

    High Availability     Kubernetes解决了应用程序和基础架构级别的高可用性。副本集可确保运行给定应用程序所需的(最少)数量的无状态Pod。有状态集对有状态Pod的作用相同。在基础架构级别,Kubernetes支持各种分布式存储后端,例如AWS EBS,Azure Disk,Google Persistent Disk,NFS等。向Kubernetes添加可靠的可用存储层可确保有状态工作负载的高可用性。此外,每个主组件都可以配置为多节点复制(多主),以确保更高的可用性。

     Security  Kubernetes在多个级别处理安全性:群集,应用程序和网络。API端点通过传输层安全性(TLS)进行保护。只有经过身份验证的用户(服务帐户或常规用户)才能在群集上执行操作(通过API请求)。在应用程序级别,Kubernetes机密可以为每个集群(如果使用名称空间则为虚拟集群,否则为物理集群)存储敏感信息(例如密码或令牌)。请注意,可以从同一集群中的任何Pod访问机密。可以在部署中定义用于访问Pod的网络策略。网络策略指定如何允许Pod与彼此以及与其他网络端点进行通信。

    Portability   Kubernetes的可移植性体现在以下方面:操作系统选择(集群可以在任何主流Linux发行版上运行),处理器体系结构(虚拟机或裸机),云提供商(AWS,Azure或Google Cloud Platform)以及新的容器运行时 也可以添加Docker。通过联合概念,它还可以支持跨混合(私有云和公共云)或多云环境的工作负载。这也支持单个云提供商中的可用区容错能力。


文章转载自研发生产率生态,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论