文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

运维入坑必看:Kubernetes平台架构解读

2024-12-02 00:43

关注

Kubernetes是一个开源容器编排平台,管理大规模分布式容器化软件应用, 是云计算发展演进的一次彻底革命性的突破。Kubernetes是谷歌的第三代容器管理系统,是Borg独特的控制器和Omega灵活的调度器的组合。Kubernetes中的应用被打包成与环境完全分离的容器镜像,并且自动配置应用并维护跟踪资源分配。

Kubernetes是以 应用为中心 的技术架构与思想理念, 向下 屏蔽基础设施差异,实现底层基础资源统一调度及编排; 向上 通过容器镜像标准化应用,实现应用负载自动化部署; 中间 通过Kubernetes通用的编排能力,开放API以及自定义CRD扩展能力,打造云原生操作系统能力,形成云计算新界面;助力研发团队 快速构建标准化、弹性高可靠、松耦合、易管理维护的应用系统,提升交付效率,降低运维复杂度。 Kubernetes在技术架构方面具备三个能力:

一、Kubernetes整体架构

Kubernetes是典型的 主从分布式架构,  集中式管理节点(Master Node),分布式的工作节点(Worker Node) 以及 辅助工具 组成。

1、集中式管理节点

集中式管理节点,对集群进行调度管理,有 四大核心组件:

2、分布式的工作节点

分布式的工作节点,工作节点运行业务应用容器;默认会运行 三大核心组件 

3、辅助工具

辅助工具,主要是辅助集群管理及网络扩展:

二、Kubernetes核心理念

1、POD容器组,Kubernetes最小调度单元

Pod是Kubernetes的 最小调度及资源分配单元, Pod之间相互隔离,通常情况一个Pod只建议运行一个容器,当某些容器之间关系非常紧密(Tightly coupled),可以运行在同一Pod运行多个容器方便一起调度管理。一个Pod就是一个应用运行实例,通过同时运行多个Pod来实现应用 横向扩展 能力。Pod本身没有自恢复能力,当调度或运行失败时,需要管理节点的Controller根绝配置触发实现Pod重启、重建或迁移等操作。

从Pod启动过程来看, Pod容器主要是 Pause Container,Init Container 以及 App Container 三种类型容器组成:

从POD的资源隔离来看, Pod容器主要由Linux提供的Namespace和Cgroup能力实现的,Namespace实现进程间隔离,Cgroup实现进程资源控制;其中Namespace由ipc 、uts 、net 、mnt 、pid 各种资源空间联合组成。

CRI 是Kubernetes v1.5引入的,将Kubelet与容器运行时解耦;CRI中定义了 容器  镜像 的服务的接口,因为容器运行时与镜像的生命周期是彼此隔离的,所以定义了 RuntimeService  ImageService 两个服务,其中RuntimeService主要包含Sandbox和Container两种容器的管理gRPC接口,Sandbox就是上面Pod启动过程中提到的 Pause容器 。目前支持CRI的后端有cri-o,cri-containerd,rkt,frakti,docker等,cri-o是由redhat发起并开源且由社区驱动的container-runtime, 轻量化专为kubernetes而生, 主要目的就是替代docker作为kubernetes集群的容器运行时。

2、Volume存储卷,Kubernetes复杂的存储架构

存储非常重要关键,同时也是生态与技术都比较复杂的领域,就linux、window两个生态支持的文件系统就多达20+。 对于Kubernete存储架构设计一直在持续演进完善,为了尽可能多地兼容各种存储平台,Kubernetes以in-tree plugin的形式默认对接很多不同类型的存储系统; 同时也支持基于FlexVolume和CSI插件以out-of-tree plugin来实现自定义存储服务。

对Kubernetes存储,主要有 应用的基本配置文件读取、密码密钥管理;应用的存储状态、数据存取,不同应用间数据共享 等三大使用场景。目前Kubernetes支持的Volume Plugins如下表:

Empty Dir: 生命周期与Pod保持一致,当Pod删除后emptyDir中的数据也会被自动清除。当前 emptyDir支持的类型有内存、大页内存、Node节点上Pod所在的文件系统。

引入 PV、PVC、StorageClass 之后,资源管控更加灵活,团队职责更加明确,研发人员只需考虑存储需求(IO、容量、访问模式等),不需要关注底层存储细节;底层复杂的细节都由专业的集群管理与存储管理员来完成。

CSI 是Kubernetes 1.9版本开始引入,建立一套标准的存储管理接口,通过该接口为容器提供存储服务。从而实现Kubernetes平台与存储服务驱动完全解耦。CSI主要包含 CSI Controller Server  CSI Node Server 两个部分, Controller Server 主要实现创建、删除、挂载、卸载等控制功能; Node Server 主要实现的是Node节点上的 mount、unmount的操作。

CSI Controller Server和External CSI SideCar是通过 Unix Socket 来进行通信的,CSI Node Server和Kubelet也是通过 Unix Socket 来通信。CSI实现类也日趋完善,比如ExpandCSIVolumes可以实现文件系统扩容;VolumeSnapshotDataSource可以实现数据卷的快照;VolumePVCDataSource实现自定义定PVC数据源;CSIInlineVolume在Volume中定义一些CSI的驱动。阿里云也开源了 阿里云盘、NAS、CPFS、OSS、LVM 等CSI存储插件。

3、Ingress与Service,百花齐放的Kubernetes网络

Kubernetes 容器网络非常复杂,涉及的概念也比较多,比如Pod网络,Service网络,Cluster IP,NodePort,LoadBalancer和Ingress等,为此将Kubernetes 的网络参考TCP/IP协议栈抽象为四层:

第0层: Node节点网络比较简单,就是保证Kubernetes 节点(物理或虚拟机)之间能够正常IP寻址和互通的网络,一般由底层(公有云或数据中心)网络基础设施支持。

第1层: Pod是Kubernetes的最小调度单元,Pod网络就是确保Kubernetes集群中所有Pod(包括同一节点及不同节点上的Pod),逻辑上在同一个平面网络内,能够相互IP寻址和通信的网络。是容器网络最复杂部分,通过各种容器网络插件满足不同网络需求,通过CNI标准化及开放网络自定义能力。

第3层: 虽然单个Pod都有IP,但是与Pod生命周期一致,为了解决一组相同Pod统一稳定的访问地址,并且将请求均衡的分发到后端Pod应用服务中。Kubernetes引入了Service网络,以此实现服务发现(Service Discovery)和负载均衡(Load Balancing)能力,底层是通过Kube-Proxy+iptables转发实现,对应用无侵入且不穿透代理,没有额外性能损耗。

第4层: Kubernetes Service网络是集群内部网络,集群外部是无法访问,需要将内部服务暴露外部才能访问。Kubernetes通过NodePort,LoadBalancer和Ingress多个方式构建外部网络接入能力。

CNI 最早是由CoreOS发起的容器网络规范,是Kubernetes网络插件的基础。Container Runtime在创建容器时,先创建好network namespace,再调用CNI插件为network namespace配置网络,最后启动容器内进程。CNI插件包括CNI Plugin与IPAM Plugin两部分:

容器网络技术也在持续演进发展,社区开源的网络组件众多,比如Flannel、Calico、Cilium、OVN等,每个组件都有各自的优点及适应的场景,难以形成大一统的组件及解决方案。

4、Workload工作负载,Kubernetes应用中心理念

Kubernetes通过 工作负载Workload 实现应用管理部署与发布,践行Kubernetes以应用为中心的理念。Kubernetes支持多种类型的工作负载,包含Deployment、StatefulSet、ReplicaSet、Job、CronJob、DaemonSet,以满足不同场景的需求。

在Kubernetes生态中,还有一些提供额外操作的第三方工作负载,同时也可以通过使用CRD自定义工作负载,还有就是Device Plugin驱动的硬件工作负载。

5、Controller控制器,Kubernetes集控管理中心

Controller Manager 作为Kubernetes集控管理中心,负责集群的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的资源管理,并通过API Server接口实时监控集群的每个资源对象的状态,一旦发生故障导致系统状态发生变化,就会立即尝试修复到“期望状态”。

另外,在Kubernetes v1.6引入了 云控制管理器Cloud Controller Manager(CCM), 提供与阿里公有云基础产品对接的支持。

三、总结

总结一下,Kubernetes不仅是一个强大的容器编排系统本身,而且促进了一个庞大的工具和服务的生态系统, 云原生时代的操作系统,形成云计算新界面。    

从设计理念方面, Kubernetes是以 应用为中心 的构理念, 向下 屏蔽基础设施差异,实现底层基础资源统一调度及编排; 向上 通过容器镜像标准化应用,实现应用负载自动化部署; 中间 通过Kubernetes通用的编排能力,开放API以及自定义CRD扩展能力;

从技术架构方面, Kubernetes是典型的分布式主从架构,由Master控制节点与可以水平扩展的Worker工作节点组成,Master实现集中式控制管理,Worker实现分布式运行;与Openstack的架构还有基于SpringCloud研发的分微服业务应用没有太大区别。

从设计模式方面, Kubernetes通过定义大量的模型(原语、资源对象、配置、常用的 CRD),通过配置管理模型实现集群资源的控制;虽然模型多切复杂,可以分层(核心层,隔离与服务访问层,调度层,资源层)逐步理解。

从平台扩展方面, Kubernetes是一个开放可扩展平台,不仅有开发的API,开放标准(CNI,CSI,CRI等)以及CRD,不仅是一个单纯运行时平台,同时面向运维的开发平台。

来源:dbaplus社群内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯