【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

架构新纪元(五):云原生生态的基石 Kubernetes

  • 2019-09-26
  • 本文字数:3157 字

    阅读完需:约 10 分钟

架构新纪元(五):云原生生态的基石Kubernetes

谈到 Kubernetes 就不得不谈到容器。几年前容器技术大热,现在基本归于平淡,之前大家提到的容器通常是指 Docker 容器,甚至很多人认为容器就等同于 Docker,还有很多人像操作虚拟机一样使用容器。


Kubernetes 是 Google 基于其内部使用的 Borg 改造而成的一个通用容器编排调度器,于 2014 年被发布到开源社区,并于 2015 年被捐赠给 Linux 基金会下属的云原生计算基金会(CNCF),Kubernetes 也是 GIFEE(Google Infrastructure For Everyone Else)中的一员,GIFEE 中的其他成员还有 HDFS、HBase、ZooKeeper 等。


CNCF 中托管的项目一般会遵循一套完善的成长流程,毕竟经过沙盒、孵化和毕业这三个阶段。Kubernetes 是 CNCF 托管的所有项目中第一个成功毕业的项目,整个 CNCF 技术栈都是围绕它而建立的。Kubernetes 是云原生项目中最重要的组件,其目标不仅仅是成为一个编排系统,更是为用户提供一个规范,让用户可以描述集群的架构,定义服务的最终状态,并让系统自动维持在这个状态。


现如今,云服务已经可以为我们提供非常稳定的基础设施了,但是业务上云却成了一个难题。Kubernetes 的出现与其说是为了提供最初的容器编排解决方案,倒不如说是为了解决应用上云(即实现云原生应用)这个难题。CNCF 中托管的一系列项目致力于对云原生应用的整个生命周期进行管理,通过开源软件为用户提供部署平台、日志收集、Service Mesh(服务网格)、服务发现、分布式追踪、监控、安全等各个领域的解决方案。

1. Kubernetes 架构

谈到云计算就必然谈到分布式,Kubernetes 作为云原生计算的基础组件,本身也采用了分布式架构。图 7-1 展示了 Kubernetes 的架构。



图 7-1 Kubernetes 的架构


Kubernetes 主要由以下几个核心组件构成。


  • etcd:协同存储,负责保存整个集群的状态,通常会部署奇数个节点以保证高可用性。

  • API:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制。

  • controller manager:负责维护集群的状态,执行故障检测、自动扩展、滚动更新等操作。

  • Scheduler:负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上。

  • Kubelet:作为工作节点负责维护容器的生命周期,同时也负责对容器存储接口(CSI)和容器网络接口(CNI)进行管理。

  • 容器运行时(对应图 7-1 中的 Docker):负责镜像管理,实现 Pod 和容器的真正运行。

  • Proxy:负责提供集群内部的服务发现和负载均衡。

  • 除了核心组件,Kubernetes 中还有一些推荐使用的插件,其中有的已经成为 CNCF 中的托管项目,具体如下。

  • CoreDNS:负责为整个集群提供 DNS 服务。

  • Ingress Controller:负责为服务提供外网入口。

  • Prometheus:负责资源监控。

  • Dashboard:负责提供 GUI。

  • Federation:负责提供跨可用区的集群。

2.分层设计理念及架构模型

Kubernetes 的架构设计理念与 Linux 的分层架构设计理念类似,图 7-2 展示了 Kubernetes 分层架构模型。


如图 7-2 所示,Kubernetes 分层架构中包含以下几部分。


  • 核心层:Kubernetes 的核心,负责对外提供 API 构建高层应用,对内提供插件式应用执行环境。

  • 应用层:负责部署和路由,可部署的应用包括无状态应用、有状态应用、批处理任务、集群应用等,路由的类型主要有服务发现、DNS 解析等。

  • 管理层:负责自动化(如自动扩展、动态部署等),以及策略(RBAC、ResourceQuota、NetworkPolicy 等)管理。



图 7-2 Kubernetes 分层架构模型


  • 接口层:主要包括 kubectl 命令行工具、客户端 SDK 等用于客户端操作的库,以及集群联邦等实用工具。

  • 云原生生态系统:接口层之上的负责容器集群管理调度的生态系统,该系统可以划分为两个范畴。

  • Kubernetes 内部:包括 CRI(容器运行时接口)、CNI(容器网络接口)、CSI(容器存储接口)、镜像仓库、云供应商、身份供应商等。


整个云原生的生态都是以 Kubernetes 为基石构建的,Kubernetes 自诞生以来便迅速发展,正在向原有的非云原生领域扩张。

3.设计哲学

Kubernetes 之所以能够如此快速地发展,不仅是因为其背后有 Google 公司的大力支持和繁荣社区的全力协助,更是因为它本身蕴含着优秀的设计哲学。Kubernetes 并未采用常见的命令式设计模式,而是采用了声明式设计模式。


由于云原生应用程序是面向在云环境中运行的应用程序而设计的,因此,云原生应用及其基础设施,与传统应用的交互方式并不相同。在云原生应用程序中,与任何事物进行通信都是通过网络实现的,用户编写 YAML 格式的应用程序编排文件,然后 Kubernetes 将其转换为 JSON 格式,并通过 RESTful HTTP 的方式与 API Server 进行通信。Kubernetes 组件本身则通过 gRPC 进行通信。


传统的应用程序通常通过消息队列、共享存储或触发 shell 命令的本地脚本来自动执行任务,通过对发生的事件做出响应(例如,用户点击【提交】按钮或是运行部署脚本)来完成交互。


Kubernetes 的控制器一直监听 API Server。一旦发现有应用状态变更,就会声明一个新的状态,并相信 API Server 和 kubelet 会进行必要的操作来调整应用状态,直至与声明的状态一致为止。


声明式通信规范了通信模型,一系列 API 声明规范了应用程序的部署原语,并且将功能实现从应用程序中转移到了远程 API 或服务端点上,从而让应用程序达到预期状态。这样有助于简化应用程序,并使它们的行为更具可预测性。


运行云原生应用程序的基础设施与传统应用程序的基础设施不同。基础设施不仅仅提供了应用运行所需的资源,还承担了许多对应用程序进行生命周期管理时的责任。


Kubernetes 优秀的分布式架构设计,给用户提供了众多可扩展的接口,可以让用户很方便地扩展自己的运行时、网络和存储插件,同时还可以让用户通过 CRD 管理自己的分布式应用。采用 CRD 声明式配置方式时,用户可以利用 Kubernetes 的原语快速编排出一个云原生应用。


云原生应用程序通过将应用分解为更小的服务来降低代码复杂性,并且可以借助统一的日志、监控、审计平台加强应用程序的可观察性,Kubernetes 仅实现了应用程序的部署和资源调度,因此还需要一些新的工具来自动管理激增的服务和应用生命周期中的其他阶段,例如,使用 Ballerina、Pulumi 这样的云原生编程语言便可以简化基于 Kubernetes 平台的微服务应用的集成。


相关文章


架构新纪元(一):从分布式架构到云原生架构


架构新纪元(二):什么是云原生?


架构新纪元(三):云原生的生态圈


架构新纪元(四):观察分布式服务


本文节选自图书《未来架构:从服务化到云原生》。本书对快速演进中的云原生数据架构、典型分布式数据库中间件进行了剖析,重点介绍 Service Mesh 等新兴概念,创新性地提出了 Database Mesh 的理念,深度揭秘 Apache 项目——ShardingSphere。


购买链接https://u.jd.com/sbmG4Y


作者简介


张亮


京东数科数据研发负责人,Apache ShardingSphere 发起人兼 PPMC 成员。热爱分享,拥抱开源,主张代码优雅化,擅长以 Java 为主的分布式架构以及以 Kubernetes 和 Mesos 为主的云平台的构建。ShardingSphere 已进入 Apache 软件基金会,是京东集团首个进入 Apache 的开源项目,也是 Apache 首个分布式数据库中间件。


吴晟


Apache SkyWalking 创始人及 PPMC 成员,Apache ShardingSphere 原型作者及 PPMC 成员,Apache Zipkin 贡献者,Apache 孵化器导师,CNCF 基金会 OpenTracing 标准化委员会成员,W3C Trace Context 规范贡献者。擅长分布式架构、性能监控与诊断、分布式追踪、云原生监控等领域。


敖小剑


具有十七年软件开发经验,资深码农,微服务专家,Cloud Native 拥护者,敏捷实践者,Service Mesh 布道师,ServiceMesher 中文社区联合创始人。专注于基础架构建设,对微服务、云计算等相关技术有着深入研究和独到见解。


宋净超


蚂蚁金服云原生布道师,ServiceMesher 中文社区联合创始人,Kubernetes 社区成员,Istio 社区成员,《Cloud Native Go》《Python 云原生》《云原生 Java》等图书译者。


2019-09-26 21:352750
用户头像

发布了 25 篇内容, 共 25.4 次阅读, 收获喜欢 118 次。

关注

评论

发布
暂无评论
发现更多内容

python变量:引用和可变性

AIWeker

Python python小知识 7月月更

体验Python剪辑视频以及相关问题解决,一劳永逸!

迷彩

Python Moviepy视频剪辑处理 7月月更

🚩🚩🚩建议收藏!!Flutter状态管理插件哪家强?请看岛上码农的排行榜!

岛上码农

flutter ios 安卓 移动端开发 7月月更

安全保护能力是什么意思?等保不同级别保护能力分别是怎样?

行云管家

等保 等级保护 安全保护能力

NFTScan 开发者平台推出多链 NFT 数据 Pro API 服务

NFT Research

NFT 研发团队

室内LED显示屏应该怎么选择?这5点注意事项必须考虑在内

Dylan

LED显示屏 户内led显示屏

让我们,从头到尾,通透网络I/O模型

C++后台开发

网络编程 IO多路复用 C++后台开发 网络io模型 C++开发

gRPC三种Java客户端性能测试实践

FunTester

【Unity】升级版·Excel数据解析,自动创建对应C#类,自动创建ScriptableObject生成类,自动序列化Asset文件

萧然🐳

游戏开发 Unity 7月月更 Excel工具

(1)长安链学习笔记-启动长安链

TiFlash 源码阅读(四)TiFlash DDL 模块设计及实现分析

PingCAP

COSCon'22 社区召集令来啦!Open the World,邀请所有社区一起拥抱开源,打开新世界~

开源社

开源

同构+跨端,懂得小程序+kbone+finclip就够了!

Speedoooo

小程序 跨端开发 小程序容器 kbone web同构

案例推荐丨安擎携手伙伴,保障“智慧法院”更加高效

科技热闻

MetaForce原力元宇宙开发搭建丨佛萨奇2.0系统开发

开发微hkkf5566

代理和反向代理

沃德

程序员 7月月更

Python 入门指南之深入 Python 流程控制

海拥(haiyong.site)

7月月更

深度解读 RocketMQ 存储机制

阿里巴巴中间件

阿里云 RocketMQ 云原生 中间件 消息队列

长安链学习笔记-证书研究之证书模式

长安链

TDengine 社区问题双周精选 | 第二期

TDengine

数据库 tdengine 时序数据库

Redis 持久化机制

知识浅谈

redis 面试题

存币生息理财dapp系统开发案例演示

开发微hkkf5566

低代码平台中的数据连接方式(上)

Baidu AICLOUD

前端 低代码 数据格式 数据通信 爱速搭

Spring Cloud源码分析之Eureka篇第三章:EnableDiscoveryClient与EnableEurekaClient的区别(Edgware版本)

程序员欣宸

Java SpringCloud 7月月更

spark调优(二):UDF减少JOIN和判断

怀瑾握瑜的嘉与嘉

spark 7月月更

Efficient ETL Testing

Bright

数据开发 ETL 大数据开发 EasySQL

面试题:AOF重写机制,redis面试必问!!!

知识浅谈

redis 底层原理

让 Rust 库更优美的几个建议!你学会了吗?

非凸科技

rust API

前置机是什么意思?主要作用是什么?与堡垒机有什么区别?

行云管家

堡垒机 前置机

浅谈网络安全之文件上传

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

「小程序容器技术」,是噱头还是新风口?

ToB行业头条

架构新纪元(五):云原生生态的基石Kubernetes_架构_张亮_InfoQ精选文章