【云原生-00】生态解读
云计算是一种新型互联网服务模式,通过公有云或私有云资源提供按需使用、弹性扩展的IT基础设施服务。云原生技术基于容器、微服务、服务网格等核心组件,构建松耦合、易管理的分布式系统。其关键技术包括Kubernetes容器编排、不可变基础设施和声明式API等,实现了从传统单体架构向微服务架构的转型。云平台具有稳定性高、弹性扩展等优势,但也面临安全管控等挑战。云原生生态涵盖CI/CD、可观测性、服务网格等完
【云原生-00】生态解读
- 云计算简介
- 三大变革
- 云原生的生态系统
- 云原生词汇表—应用的12要素
- 云原生词汇表—其他
-
- 蓝绿部署(Blue/Green Deployment)
- 构建包(Buildpacks)
- 云应用平台 (Cloud Application Platform)
- 云原生(Cloud-native)
- 云提供商界面(Cloud Provider Interface)
- 容器(Containers)
- 持续集成和持续部署(Continuous Integration/Continuous Delivery(Cl/CD))
- DevOps : 开发、运维均需考虑
- 数字化转型(Digital Transformation)
- 静态文件(Staticfile)
- Stemcell
- 多云架构(Multi-Cloud)
- 无服务(Serverless)
- 学习路径
- Kubernetes 简介
- 参考
云计算简介
云计算不是新技术,是一种新的互联网模式,通过使用公有云或者私有云资源,便捷、快速的为我们提供服务
“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。这种特性经常被称为像水电一样的使用IT基础设施。
云计算发展历程

名词——XaaS:

laaS (lnfrastructure-as-a-Service):提供基础设施,如计算资源、存储、网络等。用户无需维护基础计算资源。
PaaS (Platform-as-a-Service):提供好平台,用户无需自行搭建相关平台环境,直接使用即可。比如,阿里云的日志服务、高可用数据库服务
SaaS (Software-as-a-Service):用户通常要支付许可费而不是购买价。
CaaS (Containers-as-a-Service): 容器即服务
FaaS (Function-as-a-Service):函数即服务【无状态】
云原生的定义
htps:/github.com/cnf/toc/blob/master/DEFINTION.md
• 云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API(配置文件、请求、可视化操作…)。
• 这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
• 云原生计算基金会(CNF)致力于培育和维护一个厂商中立的开源生态系统,来推
广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。
Kubernetes开启了云原生的序幕,提供了容器编排的标准服务网格(如 Istio) 引领了后 Kubernetes 时代的微服务治理Serverless技术使云原生从基础设施层向应用架构层深入发展
核心技术包括:
-
容器:应用打包和运行的标准单元;以 Docker 为代表。容器将应用程序及其所有依赖项(库、配置文件等)打包成一个标准化的、轻量级的、可移植的单元。这解决了“在我机器上能跑”的环境一致性问题,是云原生的基础交付物。
-
服务网格:微服务间通信的基础设施层;服务网格:以 Istio、Linkerd 为代表。当微服务数量激增时,服务间的通信(如服务发现、负载均衡、熔断、认证、监控等)变得极其复杂。服务网格是一个专用的基础设施层,以透明的方式处理这些通信问题,让开发者可以更专注于业务逻辑。
-
微服务:应用架构的设计模式;微服务架构:将单一的巨型应用拆分为一组小型、独立、松耦合的服务。每个服务专注于一个特定的业务功能,可以独立开发、部署、扩展和替换。这极大地提升了敏捷性和可维护性。
-
不可变基础设施:基础设施的管理理念;任何部署都是构建全新的镜像/容器来替换旧的,而不是在原有的运行环境中进行修改。这保证了环境的一致性和可追溯性。
-
声明式 API:系统配置和管理的方式;你只需要告诉系统你“期望的状态”(例如,运行3个应用实例),而不需要一步步命令它如何去做。系统会自主地驱动实际状态向期望状态收敛。
总结:云原生 = 微服务架构 + 容器化封装 + 自动化编排(Kubernetes) + 敏捷基础设施 + 面向API的通信 + 支持服务网格、无服务器等高级模式。
云上的挑战
云机器资源编排
云存储方案
云负载均衡方案
云缓存方案
云持久化
云运维
云监控
云容器技术
云DevOps
云安全防护
…
云平台的优缺点
优势:
• 稳定性:云平台大量资源,分布式集群部署,保障服务永不宕机,几个9;0.99,1
• 弹性扩展:按需索取,一键秒级开通需要的资源
• 安全性:云上平台生产级可用的完善权限系统
• 成本:初期计算资源成本极低,后期更是大量降低运维成本
• 易用性:各大云商都有Web管理控制台,可视化,智能化便捷操作
缺点
• 公有云,服务资源被第三方管理,不符合特殊级别的安全场景
• 私有云,搭建、维护、升级成本大
三大变革
体系变革

架构变革





技术变革


云原生的生态系统


云原生词汇表—应用的12要素
https://12factor.net/

https://gitlab.wise-paas.com/Eric.Liang/Documentation/-/blob/wb_update_ota_doc/documents/CloudFoundryCLI/APP_12_factors__zh-CN.md
链接:https://12factor.net/zh_cn/ , https://12factor.net/
如今,软件通常会作为一种服务来交付,它们被称为网络应用程序,或软件即服务(SaaS)。12-Factor 为构建如下的 SaaS 应用提供了方法论:
使用标准化流程自动配置,从而使新的开发者花费最少的学习成本加入这个项目。
和操作系统之间尽可能的划清界限,在各个系统中提供最大的可移植性。
适合部署在现代的云计算平台,从而在服务器和系统管理方面节省资源。
将开发环境和生产环境的差异降至最低,并使用持续交付实施敏捷开发。
可以在工具、架构和开发流程不发生明显变化的前提下实现扩展。
这套理论适用于任意语言和后端服务(数据库、消息队列、缓存等)开发的应用程序。
1、基准代码 - 一份基准代码,多份部署
链接:https://12factor.net/zh_cn/codebase
12-Factor应用通常会使用版本控制系统加以管理,如Git, Mercurial, Subversion。一份用来跟踪代码所有修订版本的数据库被称作代码库(code repository, code repo, repo)。
每个应用只对应一份基准代码,但可以同时存在多份部署,比如部署到不同的环境,开发环境、测试环境、预发布环境、生产环境等。
所有部署的基准代码相同,但每份部署可以使用其不同的版本,比如开发人员可能有一些提交还没有同步至预发布环境;预发布环境也有一些提交没有同步至生产环境。但它们都共享一份基准代码,我们就认为它们只是相同应用的不同部署而已。
WISE-PaaS平台的app使用git+branch进行版本控制,一个app不能对应多个仓库。
2、依赖 - 显式声明依赖关系
链接:https://12factor.net/zh_cn/dependencies
Pom,gradle,gemfile,通过仓库要管理二进制文件。
App使用gradle等工具来管理lib的各种依赖关系。
3、配置 - 在环境中存储配置
链接:https://12factor.net/zh_cn/config
SpringCloud:环境变量的使用,并且把环境的配置放到Version Control中(如git,svn)
通常,应用的配置在不同部署 (预发布、生产环境、开发环境等等)间会有很大差异。
12-Factor推荐将应用的配置存储于环境变量中( env vars, env )。环境变量可以非常方便地在不同的部署间做修改,却不动一行代码;与配置文件不同,不小心把它们签入代码库的概率微乎其微;与一些传统的解决配置问题的机制(比如 Java 的属性配置文件)相比,环境变量与语言和系统无关。
WISE-PaaS平台的APP会把不同环境的配置信息存储在环境变量中,比如sso,在测试环境和生产环境使用的db是不同的,所以会把db的信息配置在环境变量中,在不同的环境只需要更改环境变量的值即可,app的code不需要做任何改变。
4、后端服务 - 把后端服务当做附加资源
链接:https://12factor.net/zh_cn/backing-services
PCF: service broker,给应用绑定后端资源和服务
后端服务是指程序运行所需要的通过网络调用的各种服务,如数据库(MySQL,CouchDB),消息/队列系统(RabbitMQ,Beanstalkd),SMTP 邮件发送服务(Postfix),以及缓存系统(Memcached)。
12-Factor 应用不会区别对待本地或第三方服务。 对应用程序而言,两种都是附加资源,通过一个url或是其他存储在配置中的服务定位/服务证书来获取数据。12-Factor应用的任意部署 ,都应该可以在不进行任何代码改动的情况下,将本地 MySQL数据库换成第三方服务。
CloudFoundry提供了ServiceBroker的机制,给应用绑定后端资源和服务。我们也制定了app读取credential的规则,允许app通过配置环境变量或者user-provided服务的方式来使用本地或者第三方的服务。
5、构建,发布,运行 - 严格分离构建和运行
链接:https://12factor.net/zh_cn/build-release-run
WISE-PaaS平台的app通过持续交付流程,发布一个版本后,先将sourcecode编译,并将编译后的产物存储,之后每一次部署都是用同一份编译产物去部署,然后运行,将构建和运行过程分开。
6、进程 - 以一个或多个无状态进程运行应用
链接:https://12factor.net/zh_cn/processes
WISE-PaaS平台的app要求设计成无状态的,不应该存放任何状态在内存中,将中间状态存储在数据库等存储中,当有多个实例运行时,无论访问哪一个,结果都是一致的。
7、端口绑定 - 通过端口绑定提供服务
链接:https://12factor.net/zh_cn/port-binding
App push到Cloud Foundry后,通过domain+router绑定服务端口,生成一个url提供给其他应用或者客户使用。
8、并发 - 通过进程模型进行扩展
链接:https://12factor.net/zh_cn/concurrency
Cloud Foundry提供了scale的功能来对app进行扩展。
9、易处理 - 快速启动和优雅终止可最大化健壮性
链接:https://12factor.net/zh_cn/disposability
App在接收到关闭信号的时候,应该处理完内存中的数据再退出,而不是让数据丢失。
10、开发环境与线上环境等价 - 尽可能的保持开发,预发布,线上环境相同
链接:https://12factor.net/zh_cn/dev-prod-parity
近年来,持续部署已经变得越来越流行。对许多公司来说,开发人员可以几小时,甚至几分钟就部署代码。为了实现快速部署,以及避免在进入生产环境出现某些问题的风险,尽量保证开发环境以及线上环境的一致性。
WISE-PaaS平台的app通过持续交付流程保证每一次部署都是用同一份源码编译出来的package,加快交付时间,避免环境不一致导致的问题。
11、日志 - 把日志当做事件流
链接:https://12factor.net/zh_cn/logs
日志使得应用程序运行的动作变得透明。在基于服务器的环境中,日志通常被写在硬盘的一个文件里,但这只是一种输出格式。
日志应该是事件流的汇总,将所有运行中进程和后端服务的输出流按照时间顺序收集起来。尽管在回溯问题时可能需要看很多行,日志最原始的格式确实是一个事件一行。日志没有确定开始和结束,但随着应用在运行会持续的增加。12-factor应用本身从不考虑存储自己的输出流。 不应该试图去写或者管理日志文件。相反,每一个运行的进程都会直接的标准输出(stdout)事件流。开发环境中,开发人员可以通过这些数据流,实时在终端看到应用的活动。
App push到CloudFoundry后,可以在console页面看到输出的log信息,也可以通过绑定服务,将log输出到ELK等系统对log进行管理和分析。
WISE-PaaS平台要求App设置不同的日志等级,比如在开发环境,会设置为debug级别,输出比较多的log,在生产环境只输出error级别的log,避免过多的log造成系统的负担。
12、管理进程 - 后台管理任务当作一次性进程运行
链接:https://12factor.net/zh_cn/admin-processes
CF App检查项
根据以上SaaS应用12要素,开发者在push app到Cloud Foundry的时候,检查有没有做到以下内容,会让app有更好的体验。
运行多个应用程序实例
您是否部署了不止一个应用程序实例?当CF容器被升级时,运行在它上面的应用程序会被优雅地关闭,然后在一个新的CF容器上重新启动这些应用程序。为了避免在CF升级过程中应用程序不可用的风险,您应该运行不止一个应用程序实例。例如使用cf push my-app -i 3命令,部署3个应用程序实例。
无状态 - 将该应用程序作为一个或多个无状态过程执行
您可能会让您的应用程序运行在多个服务器上,因为这使得它更加容错,并且可以支持更多的流量。一般来说,您希望运行代码的每一个实例都是无状态的。换句话说,您的系统的状态完全由数据库和共享存储定义,而不是由每个单独运行的应用程序实例定义。
假设您有一个注册的工作流程,用户必须输入3个信息屏幕来创建他们的简介。一个(错误的)模型将是在运行的代码中存储每个中间状态,并将用户引导回同一台服务器,直到注册过程完成为止。正确的方法是将中间数据存储在数据库或持久化的键值存储中,因此即使web服务器在用户注册时宕机,另一个web服务器也可以处理流量,而系统是不需要记录状态的。
WISE-PaaS平台的app要求设计成无状态的,不应该存放任何状态在内存中,将中间状态存储在数据库等存储中,当有多个实例运行时,无论访问哪一个,结果都是一致的。
断线重连
您是否尝试重新连接到后台服务(例如RabbitMQ)?您所依赖的服务可能会因为更新重启,或者可能会暂时关闭。不要让你的应用程序因为后台服务不可用而崩溃。使用像Spring的RetryTemplate这样的库重新尝试连接。
WISE-PaaS平台的app在连接RabbitMQ或者DB服务的时候都要增加断线重连的机制,服务出现短暂不可用时,app不能crash,服务恢复后,app需要自动连接到服务并正常工作。
单元测试
你有为你的应用程序做单元测试吗?
监控
您会监控您的应用程序吗?
WISE-PaaS平台有使用promethus+grafana对平台的VM和Service进行监控,并自开发了healthcheck监控程序,对平台的Operation app和service进行监控。
蓝绿部署
蓝绿部署可以使应用程序在更新过程中0宕机。
WISE-PaaS平台的app都是通过蓝绿部署的方式进行部署的。
密钥和密码
您是否安全地将密钥存储在管理服务中?在代码中硬编码密码和密钥会让你很难控制谁看到这些信息,或者在被盗用的时候刷新密码和密钥。
WISE-PaaS平台的app将密码存储在环境变量中,并进行加密处理。
云原生词汇表—其他
https://glossary.cncf.io/zh-cn/blue-green-deployment/
蓝绿部署(Blue/Green Deployment)

构建包(Buildpacks)

云应用平台 (Cloud Application Platform)
云平台:阿里云、华为云、青云、…
云原生(Cloud-native)
https://learn.microsoft.com/en-us/dotnet/architecture/cloud-native/definition
云提供商界面(Cloud Provider Interface)
容器(Containers)
持续集成和持续部署(Continuous Integration/Continuous Delivery(Cl/CD))
DevOps : 开发、运维均需考虑
数字化转型(Digital Transformation)

静态文件(Staticfile)
除网络服务器外,不需要后端代码的应用或内容。静态文件应用程序的示例包括前端JavaScrip应用程序,静态HTML内容和HTML/JavaScript表单
Stemcell
指的是Cloud Foundry中的映像,该映像包装有针对基础结构的特定包装。它通常包含一个基本的最低操作系统"框架",以及一些常用的预安装实用程序。
多云架构(Multi-Cloud)
一个基础架构,它包含多个云,无论是私有云,公共云还是混合云。多云策略可能涉及使用本地或托管的私有云基础架构以及Amazon Web Services (AWs),Google Compute Engine(GCE).Microsoft Aure或其他公共云。没有严格的定义可循,因为每个公司都在确定最佳的云技术组合。多云策略可以减轻供应商锁定的可能性,同时还可以微调企业在预算和成本,性能指标,计算和存储的角色以及地理要求之间取得平衡的需求。
无服务(Serverless)
学习路径
CNCF
https://landscape.cncf.io/?group=projects-and-products
https://github.com/WBloveLP/FLUTTER_DEMO/blob/main/CNCF_TrailMap_latest_1.jpg

容器化
常用 Docker 容器
任何规模的应用及依赖均可容器化(甚至包括运行在模拟器上的 PDP-11 代码)
逐步将适合的应用拆分为微服务,未来功能也以微服务方式编写
CI/CD
建立持续集成/持续部署流程,实现代码变更自动构建、测试、部署到预发布环境,最终可能到生产环境
设置自动发布、回滚和测试
Argo 是一组基于 GitOps 范式的 Kubernetes 原生工具,支持持续与渐进式交付、MLOps
编排与应用定义
Kubernetes 是市场领先的编排解决方案
应选择“认证 Kubernetes 发行版、托管平台或安装工具”
Helm Chart 可帮助定义、安装和升级复杂的 Kubernetes 应用
可观测性与分析
选择监控、日志、追踪方案
可考虑 CNCF 项目:Prometheus(监控)、Fluentd(日志)、Jaeger(追踪)
追踪应选择兼容 OpenTracing 的实现,如 Jaeger
服务代理、发现与网格
CoreDNS 是快速灵活的服务发现工具
Envoy 和 Linkerd 支持服务网格架构
提供健康检查、路由和负载均衡
网络、策略与安全
使用 CNI 兼容的网络插件(如 Calico、Flannel、Weave Net)以实现灵活网络
Open Policy Agent(OPA)是通用策略引擎,用于授权、准入控制、数据过滤等
Falco 是云原生异常检测引擎
分布式数据库与存储
若需更高弹性和可扩展性,Vitess 可用于大规模分片运行 MySQL
Rook 是存储编排器,将多种存储方案集成到 Kubernetes
etcd 作为 Kubernetes 的“大脑”,提供可靠的集群数据存储
TiKV 是用 Rust 编写的高性能分布式事务键值存储
流式处理与消息传递
若需比 JSON/REST 更高性能,可考虑 gRPC 或 NATS
gRPC 是通用 RPC 框架
NATS 是多模式消息系统,支持请求/响应、发布/订阅、负载均衡队列
CloudEvents 是描述事件数据的通用规范
容器镜像仓库与运行时
Harbor 是支持存储、签名、扫描的镜像仓库
可使用符合 OCI 标准的容器运行时,如 containerd 或 CRI-O
软件分发
若需安全软件分发,可评估 Notary(The Update Framework 的实现)
Kubernetes 简介
Kubernetes 架构奠定了云原生时代的技术基石,引领分布式系统创新。
Kubernetes是Google基于Borg开源的容器编排调度引擎,作为CNCF(Cloud Native Computing Foundation)最重要的组件之一,它的目标不仅仅是一个编排系统,而是提供一个规范,可以让你来描述集群的架构,定义服务的最终状态,Kubernetes 可以帮你将系统自动地达到和维持在这个状态。Kubernetes 作为云原生应用的基石,相当于一个云操作系统。
Kubernetes 的目标不仅仅是一个编排系统,而是:
- 提供规范来描述集群架构
- 定义服务的最终状态
- 使系统自动达到并维持该状态
- 作为云原生应用的操作系统
Kubernetes 是 Google 基于十多年的生产环境运维经验,开发出的一个生产级别的容器编排系统。在 Kunernetes 文档中,这样描述 Kubernetes:
“an open-source system for automating deployment, scaling, and management of containerized applications”.
“一个自动化部署、可拓展和管理容器应用的开源系统”
Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,方便进行声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统,其服务、支持和工具的使用范围广泛。
此页面是 Kubernetes 的概述。
Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。K8s 这个缩写是因为 K 和 s 之间有 8 个字符的关系。 Google 在 2014 年开源了 Kubernetes 项目。 Kubernetes 建立在 Google 大规模运行生产工作负载十几年经验的基础上, 结合了社区中最优秀的想法和实践。
为什么需要 Kubernetes,它能做什么?
容器是打包和运行应用程序的好方式。在生产环境中, 你需要管理运行着应用程序的容器,并确保服务不会下线。 例如,如果一个容器发生故障,则你需要启动另一个容器。 如果此行为交由给系统处理,是不是会更容易一些?
这就是 Kubernetes 要来做的事情! Kubernetes 为你提供了一个可弹性运行分布式系统的框架。 Kubernetes 会满足你的扩展要求、故障转移你的应用、提供部署模式等。 例如,Kubernetes 可以轻松管理系统的 Canary (金丝雀) 部署。
Kubernetes 为你提供:
-
服务发现和负载均衡
Kubernetes 可以使用 DNS 名称或自己的 IP 地址来暴露容器。 如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。 -
存储编排
Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。 -
自动部署和回滚
你可以使用 Kubernetes 描述已部署容器的所需状态, 它可以以受控的速率将实际状态更改为期望状态。 例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。 -
自动完成装箱计算
你为 Kubernetes 提供许多节点组成的集群,在这个集群上运行容器化的任务。 你告诉 Kubernetes 每个容器需要多少 CPU 和内存 (RAM)。 Kubernetes 可以将这些容器按实际情况调度到你的节点上,以最佳方式利用你的资源。 -
自我修复
Kubernetes 将重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器, 并且在准备好服务之前不将其通告给客户端。 -
密钥与配置管理
Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 SSH 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。 -
批处理执行 除了服务外,Kubernetes 还可以管理你的批处理和 CI(持续集成)工作负载,如有需要,可以替换失败的容器。
-
水平扩缩 使用简单的命令、用户界面或根据 CPU 使用率自动对你的应用进行扩缩。
-
IPv4/IPv6 双栈 为 Pod(容器组)和 Service(服务)分配 IPv4 和 IPv6 地址。
-
为可扩展性设计 在不改变上游源代码的情况下为你的 Kubernetes 集群添加功能。
Kubernetes 不是什么
Kubernetes 不是传统的、包罗万象的 PaaS(平台即服务)系统。 由于 Kubernetes 是在容器级别运行,而非在硬件级别,它提供了 PaaS 产品共有的一些普遍适用的功能, 例如部署、扩展、负载均衡,允许用户集成他们的日志记录、监控和警报方案。 但是,Kubernetes 不是单体式(monolithic)系统,那些默认解决方案都是可选、可插拔的。 Kubernetes 为构建开发人员平台提供了基础,但是在重要的地方保留了用户选择权,能有更高的灵活性。
Kubernetes:
不限制支持的应用程序类型。 Kubernetes 旨在支持极其多种多样的工作负载,包括无状态、有状态和数据处理工作负载。 如果应用程序可以在容器中运行,那么它应该可以在 Kubernetes 上很好地运行。
不部署源代码,也不构建你的应用程序。 持续集成(CI)、交付和部署(CI/CD)工作流取决于组织的文化和偏好以及技术要求。
不提供应用程序级别的服务作为内置服务,例如中间件(例如消息中间件)、 数据处理框架(例如 Spark)、数据库(例如 MySQL)、缓存、集群存储系统 (例如 Ceph)。这样的组件可以在 Kubernetes 上运行,并且/或者可以由运行在 Kubernetes 上的应用程序通过可移植机制(例如开放服务代理)来访问。
不是日志记录、监视或警报的解决方案。 它集成了一些功能作为概念证明,并提供了收集和导出指标的机制。
不提供也不要求配置用的语言、系统(例如 jsonnet),它提供了声明性 API, 该声明性 API 可以由任意形式的声明性规范所构成。
不提供也不采用任何全面的机器配置、维护、管理或自我修复系统。
此外,Kubernetes 不仅仅是一个编排系统,实际上它消除了编排的需要。 编排的技术定义是执行已定义的工作流程:首先执行 A,然后执行 B,再执行 C。 而 Kubernetes 包含了一组独立可组合的控制过程,可以持续地将当前状态驱动到所提供的预期状态。 你不需要在乎如何从 A 移动到 C,也不需要集中控制,这使得系统更易于使用且功能更强大、 系统更健壮,更为弹性和可扩展。
Kubernetes 的历史背景

传统部署时代:
早期,各个组织是在物理服务器上运行应用程序。 由于无法限制在物理服务器中运行的应用程序资源使用,因此会导致资源分配问题。 例如,如果在同一台物理服务器上运行多个应用程序, 则可能会出现一个应用程序占用大部分资源的情况,而导致其他应用程序的性能下降。 一种解决方案是将每个应用程序都运行在不同的物理服务器上, 但是当某个应用程序资源利用率不高时,剩余资源无法被分配给其他应用程序, 而且维护许多物理服务器的成本很高。
虚拟化部署时代:
因此,虚拟化技术被引入了。虚拟化技术允许你在单个物理服务器的 CPU 上运行多台虚拟机(VM)。 虚拟化能使应用程序在不同 VM 之间被彼此隔离,且能提供一定程度的安全性, 因为一个应用程序的信息不能被另一应用程序随意访问。
虚拟化技术能够更好地利用物理服务器的资源,并且因为可轻松地添加或更新应用程序, 而因此可以具有更高的可扩缩性,以及降低硬件成本等等的好处。 通过虚拟化,你可以将一组物理资源呈现为可丢弃的虚拟机集群。
每个 VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。
容器部署时代:
容器类似于 VM,但是更宽松的隔离特性,使容器之间可以共享操作系统(OS)。 因此,容器比起 VM 被认为是更轻量级的。且与 VM 类似,每个容器都具有自己的文件系统、CPU、内存、进程空间等。 由于它们与基础架构分离,因此可以跨云和 OS 发行版本进行移植。
容器因具有许多优势而变得流行起来,例如:
- 敏捷应用程序的创建和部署:与使用 VM 镜像相比,提高了容器镜像创建的简便性和效率。
- 持续开发、集成和部署:通过快速简单的回滚(由于镜像不可变性), 提供可靠且频繁的容器镜像构建和部署。
- 关注开发与运维的分离:在构建、发布时创建应用程序容器镜像,而不是在部署时, 从而将应用程序与基础架构分离。
- 可观察性:不仅可以显示 OS 级别的信息和指标,还可以显示应用程序的运行状况和其他指标信号。
- 跨开发、测试和生产的环境一致性:在笔记本计算机上也可以和在云中运行一样的应用程序。
- 跨云和操作系统发行版本的可移植性:可在 Ubuntu、RHEL、CoreOS、本地、 Google Kubernetes Engine 和其他任何地方运行。
- 以应用程序为中心的管理:提高抽象级别,从在虚拟硬件上运行 OS 到使用逻辑资源在 OS 上运行应用程序。
- 松散耦合、分布式、弹性、解放的微服务:应用程序被分解成较小的独立部分, 并且可以动态部署和管理 - 而不是在一台大型单机上整体运行。
- 资源隔离:可预测的应用程序性能。
- 资源利用:高效率和高密度。
参考
链接: Kubernetes 架构与生态:从云原生到 AI 原生基础设施的构建指南
雷丰阳:大厂学苑:云原生视频
https://kubernetes.io/zh-cn/docs/concepts/overview/
https://k8s.whuanle.cn/1.basic/5.k8s.html
https://github.com/cnych/kubernetes-learning
更多推荐
所有评论(0)