【云原生-00】生态解读
- 云计算简介
- 三大变革
- 云原生的生态系统
- 学习路径
- 概念
-
- 什么是云原生
- [Kubernetes 简介](#Kubernetes 简介)
- [为什么需要 Kubernetes,它能做什么?](#为什么需要 Kubernetes,它能做什么?)
- [Kubernetes 不是什么](#Kubernetes 不是什么)
- [Kubernetes 的历史背景](#Kubernetes 的历史背景)
- 参考
云计算简介
云计算到底是什么
云计算不是新技术,是一种新的互联网模式,通过使用公有云或者私有云资源,便捷、快速的为我们提供服务
"云"中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。这种特性经常被称为像水电一样的使用IT基础设施。
云计算发展历程

名词

云原生的定义
htps:/github.com/cnf/toc/blob/master/DEFINTION.md
• 云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API(配置文件、请求、可视化操作...)。云上配置文件
• 这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
• 云原生计算基金会(CNF)致力于培育和维护一个厂商中立的开源生态系统,来推
广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。
云上的挑战
云机器资源编排
云存储方案
云负载均衡方案
云缓存方案
云持久化
云运维
云监控
云容器技术
云DevOps
云安全防护
...
云平台的优缺点
优势:
• 稳定性:云平台大量资源,分布式集群部署,保障服务永不宕机,几个9;0.99,1
• 弹性扩展:按需索取,一键秒级开通需要的资源
• 安全性:云上平台生产级可用的完善权限系统
• 成本:初期计算资源成本极低,后期更是大量降低运维成本
• 易用性:各大云商都有Web管理控制台,可视化,智能化便捷操作
缺点
• 公有云,服务资源被第三方管理,不符合特殊级别的安全场景
• 私有云,搭建、维护、升级成本大
三大变革
体系变革

架构变革





技术变革


云原生的生态系统


学习路径
CNCF
https://landscape.cncf.io/?group=projects-and-products

容器化
常用 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开启了云原生的序幕,提供了容器编排的标准服务网格(如 Istio) 引领了后 Kubernetes 时代的微服务治理Serverless技术使云原生从基础设施层向应用架构层深入发展
核心技术包括:
-
容器:应用打包和运行的标准单元;以 Docker 为代表。容器将应用程序及其所有依赖项(库、配置文件等)打包成一个标准化的、轻量级的、可移植的单元。这解决了"在我机器上能跑"的环境一致性问题,是云原生的基础交付物。
-
服务网格:微服务间通信的基础设施层;服务网格:以 Istio、Linkerd 为代表。当微服务数量激增时,服务间的通信(如服务发现、负载均衡、熔断、认证、监控等)变得极其复杂。服务网格是一个专用的基础设施层,以透明的方式处理这些通信问题,让开发者可以更专注于业务逻辑。
-
微服务:应用架构的设计模式;微服务架构:将单一的巨型应用拆分为一组小型、独立、松耦合的服务。每个服务专注于一个特定的业务功能,可以独立开发、部署、扩展和替换。这极大地提升了敏捷性和可维护性。
-
不可变基础设施:基础设施的管理理念;任何部署都是构建全新的镜像/容器来替换旧的,而不是在原有的运行环境中进行修改。这保证了环境的一致性和可追溯性。
-
声明式 API:系统配置和管理的方式;你只需要告诉系统你"期望的状态"(例如,运行3个应用实例),而不需要一步步命令它如何去做。系统会自主地驱动实际状态向期望状态收敛。
总结:云原生 = 微服务架构 + 容器化封装 + 自动化编排(Kubernetes) + 敏捷基础设施 + 面向API的通信 + 支持服务网格、无服务器等高级模式。
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/