【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

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

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

关注

评论

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

混合编程:如何用pybind11调用C++

华为云开发者联盟

c++ Python API 混合编程 pybind11

ModStartCMS模块化建站系统 v3.3.0 组件功能升级,事件触发增强

ModStart开源

云效发布策略指南|滚动、分批、灰度怎么选?

阿里云云效

云计算 阿里云 云原生 持续交付 发布策略

理论+实践,带你掌握动态规划法

华为云开发者联盟

AI 算法 动态规划法 子问题

郑州轻工业大学——HarmonyOS宠物健康系统的开发分享

HarmonyOS开发者

HarmonyOS 健康检查

2022年中国智慧医疗行业洞察

易观分析

智慧医疗

边缘计算场景下Service Mesh的延伸和扩展

华为云原生团队

开源 边缘计算 边缘技术 边缘 边缘云

Go 语言入门很简单:读写锁

宇宙之一粟

读写锁 Go 语言 2月月更

模块八作业

黄秀明

「架构实战营」

基于 Kafka 的实时数仓在搜索的实践应用

vivo互联网技术

kafka 服务器 搜索 数据舱

Android技术分享| 【你画我猜】Android 快速实现

anyRTC开发者

音视频 移动开发 互动白板 Andriod 你画我猜

移动开发er,10万奖金等你来战!

Speedoooo

活动 前端开发 移动开发 黑客马拉松 黑客松

乘冬奥之风:北京2022年冬奥会用户信息获取偏好专题分析

易观分析

冬奥会用户分析

【重磅发布】蚂蚁动态卡片,让 App 首页实现敏捷更新

蚂蚁集团移动开发平台 mPaaS

ios android 前端 mPaaS

互联网人的命运,就是活到30岁都难?

码农参上

人生 互联网人 打工人

java培训:Java类加载机制的理解

@零度

JAVA开发 类加载机制

web前端培训:vue3源码中细节知多少

@零度

Vue 前端开发

Hudi Bucket Index 在字节跳动的设计与实践

字节跳动数据平台

数据库 字节跳动 数据湖 Hudi

优化| 手把手教你学会杉数求解器(COPT)的安装、配置与测试

杉数科技

线性规划 求解器 优化求解器 混合整数规划 杉数科技

混合云管平台哪家强?采购时候需要注意什么?

行云管家

混合云 云管平台

2022重磅:增长法则-巧用数字营销 突破企业困局

博文视点Broadview

80 行代码实现简易 RxJS

CRMEB

一个关于 += 的谜题

AlwaysBeta

Python 编程语言

极致用云,数智护航

阿里云云效

阿里云 DevOps 运维 云原生 运维安全

前所未有的 Milvus 源码架构解析

Zilliz

产品经理:「点这里,我要跳到任何我想跳的页面」—— 解耦提效神器「统跳路由」

百瓶技术

ios 前端 客户端 路由

鉴机识变,面向未来|RocketMQ Summit 2022 即将来袭

阿里巴巴云原生

阿里云 开源 RocketMQ 云原生 开源消息队列

如何通过 draftjs 设计留言框

全象云低代码

前端 低代码 留言 draftjs 留言框

“pip不是内部或外部命令,也不是可运行的程序或批处理文件” 到底有多么神秘

华为云开发者联盟

Python pip 批处理 scripts pip install

oracle数据库审计用什么数据库审计软件好?可以用什么方式部署?

行云管家

数据库 IT运维 数据库审计

Deep dive #2:API 与 Python SDKs 详解

Zilliz

Python 数据库

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