写点什么

架构新纪元(五):云原生生态的基石 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:352830
用户头像

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

关注

评论

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

嘉为蓝鲸DevOps流水线工具如何为企业研发赋能?

嘉为蓝鲸

DevOps 流水线 蓝鲸

软件测试丨SeleniumIDE 自动化用例录制、测试用例结构分析

测试人

软件测试 自动化测试 测试开发 测试用例 selenium

【云计算】谷歌云是国外的吗?是公有云还是私有云?

行云管家

公有云 私有云 谷歌云

ChatGPT聊天系统开发基于GPT-3.5架构

Congge420

现代应用开发模式:PWA vs 小程序

Onegun

小程序 PWA

实例解读华为云数字工厂平台的逻辑模型编排器

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

嘉为蓝鲸CMP多云管理平台解决方案成功入选!

嘉为蓝鲸

多云管理 IT运维 蓝鲸

AntDB数据库参加开源数据库技术沙龙,分享全栈业务能力

亚信AntDB数据库

AntDB AntDB数据库 企业号 5 月 PK 榜

阿里SpringBoot实战手册横空出世!从此不再是易学难精

做梦都在改BUG

Java spring 微服务 Spring Boot 框架

背完这套Java面试八股文,自动解锁面试牛逼症被动技能

Java你猿哥

MySQL redis java面试 java基础 分布式微服务

理解JVM工作机制(二) 对象的创建

Geek漫游指南

Java JVM Java web

浅谈NFT盲盒游戏系统开发原理

Congge420

Python从0到1丨了解图像形态学运算中腐蚀和膨胀

华为云开发者联盟

Python 人工智能 华为云 华为云开发者联盟 企业号 5 月 PK 榜

GitHub上13个高赞Java项目推荐,会一个就能跟面试官谈笑风生

Java你猿哥

Java 微服务 秒杀系统 网约车项目 java项目

开源赋能 普惠未来|XuperCore诚邀您参与2023开放原子全球开源峰会

开放原子开源基金会

开源

发挥数据价值!数据驱动的日志解析与异常检测方法介绍!

嘉为蓝鲸

日志分析 管理日志 日志统计

实力上榜!ONES 荣获深圳市「专精特新」企业认定

万事ONES

使用 PAI-Blade 优化 Stable Diffusion 推理流程(二)

阿里云大数据AI技术

人工智能 优化 推理 Stable Diffusion 企业号 5 月 PK 榜

理解JVM工作机制(三)对象的内存布局

Geek漫游指南

Java JVM

【技术】多端能力服务统一是一种关键的技术和架构

没有用户名丶

火山引擎多云安全平台,破解多云异构场景下的安全挑战

科技热闻

开源赋能 普惠未来|铜锁/Tongsuo诚邀您参与2023开放原子全球开源峰会

开放原子开源基金会

开源

JMeter笔记7 | JMeter脚本回放

测试 Jmeter 性能测试 自动化测试 接口测试

JMeter笔记8 | JMeter关联

测试 Jmeter 性能测试 自动化测试 接口测试

面试官:怎么保证Kafka的消息不丢失

做梦都在改BUG

Java kafka 面试 消息队列 消息中间件

等保和网络安全法的关系是什么?怎么理解?

行云管家

网络安全 等保 等级保护

40亿个QQ号,限制1G内存,如何去重?

Java你猿哥

Java ssm 布隆过滤器 BitMap 过滤器

又爆神作!阿里首发并发编程神仙笔记,差距不止一点点

做梦都在改BUG

Java 并发编程

SpringBoot 中实现定时任务的几种方式

做梦都在改BUG

Java Spring Boot

分解GameFi链游游戏软件系统如何开发?

Congge420

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