Kubernetes的发展历程:从Google内部项目到云原生计算的基石
目录
一、起源与背景
1.1 Google的内部项目
1.2 Omega的出现
二、Kubernetes的诞生
2.1 开源的决策
2.2 初期发布
三、Kubernetes的发展历程
3.1 社区的成长
3.2 生态系统的壮大
3.3 重大版本和功能
3.4 多云和混合云的支持
四、Kubernetes的核心概念
4.1 Pod
4.2 节点和集群
4.3 控制器
4.4 服务和负载均衡
4.5 存储和持久化
五、Kubernetes的应用场景
5.1 微服务架构
5.2 DevOps和CI/CD
5.3 大数据和AI应用
5.4 边缘计算
六、Kubernetes的未来
6.1 社区的持续发展
6.2 与其他技术的集成
6.3 性能和安全的提升
七、Kubernetes的关键技术和工具
7.1 网络插件和CNI
7.2 存储插件和CSI
7.3 Helm
7.4 Istio和服务网格
7.5 Operator框架
7.6 Prometheus和监控
7.7 Jaeger和分布式追踪
八、Kubernetes的最佳实践
8.1 资源请求和限制
8.2 配置管理
8.3 滚动更新和回滚
8.4 健康检查和自动重启
8.5 自动扩展
九、Kubernetes的挑战和未来方向
9.1 性能优化
9.2 安全性
9.3 多集群管理
9.4 边缘计算和物联网
9.5 无服务器架构
结语
容器化技术的发展为现代软件开发和部署带来了革命性的改变。而在容器编排领域,Kubernetes(简称K8s)无疑是其中的佼佼者。Kubernetes自诞生以来,已经成为云原生应用的核心支柱。本文将详细介绍Kubernetes的发展历史,从其起源到成为当前行业标准的整个历程。
一、起源与背景
1.1 Google的内部项目
Kubernetes的起源可以追溯到Google的内部项目。2003年,Google开始开发一个名为Borg的集群管理系统。Borg的主要目的是在大规模集群环境中管理和调度海量的计算任务。Borg的成功为Google的基础设施提供了强大的支持,使其能够高效地运行数以千万计的容器。
1.2 Omega的出现
在Borg之后,Google又开发了另一个名为Omega的集群管理系统。Omega的设计更加灵活,采用了一个基于事务的调度系统。尽管Omega并没有完全取代Borg,但它为Google在集群管理方面提供了更多的经验和教训。
二、Kubernetes的诞生
2.1 开源的决策
2014年,Google决定将其在容器管理方面的经验分享给社区,并启动了一个名为Kubernetes的开源项目。Kubernetes的设计理念深受Borg和Omega的影响,但它是一个全新的系统,专为开源社区和多云环境设计。
2.2 初期发布
Kubernetes的首个版本(v1.0)于2015年7月正式发布。这个版本标志着Kubernetes从一个内部项目转变为一个公开的开源项目。Kubernetes v1.0的发布伴随着Cloud Native Computing Foundation(CNCF)的成立。CNCF的目标是促进云原生技术的发展,而Kubernetes则成为其第一个托管项目。
三、Kubernetes的发展历程
3.1 社区的成长
Kubernetes的成功离不开其强大的社区支持。从一开始,Kubernetes项目就吸引了大量的开发者和企业的关注。社区的快速成长使得Kubernetes能够快速迭代和改进。每年,Kubernetes都会发布多个新版本,每个版本都带来新的特性和改进。
3.2 生态系统的壮大
随着Kubernetes的普及,一个庞大的生态系统也随之形成。许多公司开始开发与Kubernetes兼容的工具和平台,例如容器网络插件(CNI)、容器存储接口(CSI)等。这些工具和平台极大地扩展了Kubernetes的功能,使其能够适应各种复杂的应用场景。
3.3 重大版本和功能
- v1.2(2016年3月):引入了Horizontal Pod Autoscaler(HPA),使得Kubernetes能够根据资源使用情况自动扩展Pod的数量。
- v1.5(2016年12月):增加了StatefulSet,用于管理有状态应用。
- v1.6(2017年3月):引入了RBAC(Role-Based Access Control),增强了安全性。
- v1.9(2017年12月):引入了Device Plugin框架,使得Kubernetes能够支持更多类型的硬件资源。
- v1.12(2018年9月):增加了对容器运行时接口(CRI)的支持,使得Kubernetes能够与多种容器运行时兼容。
- v1.14(2019年3月):引入了Topology Manager,优化了多节点集群中的资源分配。
- v1.16(2019年9月):引入了Custom Resource Definition(CRD)的新版本,使得用户能够更灵活地扩展Kubernetes API。
- v1.18(2020年3月):增加了对Windows节点的支持,扩大了Kubernetes的适用范围。
3.4 多云和混合云的支持
Kubernetes的设计初衷就是为了支持多云环境。随着时间的推移,越来越多的云服务提供商开始提供托管的Kubernetes服务,例如Google Kubernetes Engine(GKE)、Amazon Elastic Kubernetes Service(EKS)和Azure Kubernetes Service(AKS)。这些服务使得用户能够更加方便地在不同的云环境中部署和管理Kubernetes集群。
四、Kubernetes的核心概念
4.1 Pod
Pod是Kubernetes中最小的部署单元。一个Pod可以包含一个或多个容器,这些容器共享网络和存储资源。Pod的设计使得应用能够更加灵活地部署和扩展。
4.2 节点和集群
一个Kubernetes集群由多个节点组成,每个节点都是一个运行着容器的物理机或虚拟机。集群中的每个节点都由一个主节点(Master Node)进行管理,主节点负责调度和管理所有的Pod。
4.3 控制器
控制器是Kubernetes中实现自我修复和自动化管理的核心组件。常见的控制器包括Replication Controller、Deployment、StatefulSet和DaemonSet等。这些控制器负责确保应用的状态符合预期。
4.4 服务和负载均衡
Kubernetes中的服务(Service)用于将一组Pod暴露为一个网络服务。服务提供了负载均衡和服务发现的功能,使得应用能够在集群内部或外部访问。
4.5 存储和持久化
Kubernetes支持多种存储卷类型(Volume),包括本地存储、网络存储和云存储。持久化存储使得有状态应用能够在Pod重启或迁移时保留数据。
五、Kubernetes的应用场景
5.1 微服务架构
Kubernetes非常适合部署和管理微服务架构。其自动化的部署、扩展和管理能力使得开发者能够更加专注于业务逻辑,而不必担心底层基础设施。
5.2 DevOps和CI/CD
Kubernetes与DevOps和CI/CD流程天然契合。通过Kubernetes,开发团队可以实现持续集成和持续部署,快速迭代和发布新版本。
5.3 大数据和AI应用
Kubernetes也被广泛应用于大数据和AI领域。通过Kubernetes,用户可以轻松部署和管理大数据处理框架(如Apache Spark)和机器学习平台(如TensorFlow)。
5.4 边缘计算
随着物联网(IoT)和边缘计算的兴起,Kubernetes也开始在边缘计算场景中发挥作用。通过在边缘设备上运行Kubernetes,用户可以实现边缘计算资源的统一管理和调度。
六、Kubernetes的未来
6.1 社区的持续发展
Kubernetes社区的持续发展将继续推动其技术进步。随着更多企业和开发者的加入,Kubernetes将不断扩展其功能和应用场景。
6.2 与其他技术的集成
Kubernetes将继续与其他云原生技术进行深度集成,如服务网格(Service Mesh)、无服务器计算(Serverless)和边缘计算等。这些技术的结合将进一步增强Kubernetes的能力,使其能够应对更加复杂的应用需求。
6.3 性能和安全的提升
Kubernetes的性能和安全性将继续得到提升。通过优化调度算法、改进网络性能和增强安全机制,Kubernetes将能够更加高效和安全地运行大规模应用。
七、Kubernetes的关键技术和工具
7.1 网络插件和CNI
Kubernetes的网络模型允许Pod之间的通信,同时也需要与外部世界进行交互。为了实现这一点,Kubernetes采用了容器网络接口(CNI)标准。CNI插件允许Kubernetes与多种网络方案集成,如Calico、Flannel、Weave和Cilium等。这些插件各有特点,可以根据具体需求选择适合的方案。
7.2 存储插件和CSI
Kubernetes的容器存储接口(CSI)标准化了存储系统与Kubernetes的集成方式。CSI插件使得Kubernetes能够支持多种存储后端,包括本地存储、网络存储(如NFS和iSCSI)以及云存储(如AWS EBS、GCE PD和Azure Disk)。通过CSI,用户可以灵活地选择和配置存储解决方案,满足不同应用的持久化需求。
7.3 Helm
Helm被称为Kubernetes的包管理器,它简化了应用的部署和管理。通过Helm Chart,用户可以定义、安装和升级复杂的Kubernetes应用。Helm提供了模板化的配置文件,使得应用的部署更加灵活和可重复。Helm的出现极大地降低了Kubernetes应用部署的复杂性,受到了广泛的欢迎。
7.4 Istio和服务网格
Istio是一个开源的服务网格(Service Mesh)项目,它为Kubernetes提供了强大的流量管理和安全功能。通过Istio,用户可以轻松实现服务间的负载均衡、流量控制、安全认证和监控。Istio的引入使得微服务架构的管理变得更加高效和安全。
7.5 Operator框架
Operator是一种扩展Kubernetes原生能力的方法。通过Operator,用户可以将复杂应用的管理和操作逻辑封装成Kubernetes原生的API对象。Operator极大地简化了有状态应用(如数据库、中间件等)的部署和管理。Operator Framework提供了一系列工具和库,帮助开发者快速创建和管理Operator。
7.6 Prometheus和监控
Prometheus是一个开源的监控系统,它与Kubernetes紧密集成。通过Prometheus,用户可以收集和存储Kubernetes集群的各种指标数据,并通过Grafana等工具进行可视化展示。Prometheus的强大查询语言(PromQL)使得用户可以灵活地分析和报警,确保集群的健康运行。
7.7 Jaeger和分布式追踪
Jaeger是一个开源的分布式追踪系统,用于监控和排查微服务架构中的性能问题。通过Jaeger,用户可以追踪请求的整个生命周期,识别和定位性能瓶颈。Jaeger与Kubernetes结合,使得微服务的调试和优化更加直观和高效。
八、Kubernetes的最佳实践
8.1 资源请求和限制
在Kubernetes中,为Pod设置适当的资源请求和限制(CPU和内存)是确保集群稳定性和性能的关键。资源请求定义了Pod运行所需的最小资源量,而资源限制则定义了Pod能够使用的最大资源量。通过合理配置资源请求和限制,可以避免资源争用和过度消耗,确保集群内的所有应用都能平稳运行。
8.2 配置管理
Kubernetes提供了ConfigMap和Secret来管理应用的配置和敏感信息。ConfigMap用于存储非敏感的配置数据,而Secret则用于存储敏感信息(如密码、密钥等)。通过将配置和代码分离,用户可以更加灵活地管理和更新应用配置,提高应用的安全性和可维护性。
8.3 滚动更新和回滚
Kubernetes的Deployment控制器支持滚动更新和回滚功能。滚动更新允许用户在不中断服务的情况下逐步更新应用,确保新版本稳定后再完全替换旧版本。如果新版本出现问题,回滚功能可以快速恢复到上一个稳定版本,减少服务中断时间。
8.4 健康检查和自动重启
Kubernetes支持两种类型的健康检查:Liveness Probe和Readiness Probe。Liveness Probe用于检测Pod是否处于健康状态,如果检查失败,Kubernetes会自动重启该Pod。Readiness Probe用于检测Pod是否已经准备好接受流量,只有通过该检查的Pod才会被加入到负载均衡中。通过健康检查和自动重启机制,Kubernetes能够自动恢复故障,提高应用的可用性。
8.5 自动扩展
Kubernetes的自动扩展功能包括Horizontal Pod Autoscaler(HPA)和Cluster Autoscaler。HPA根据Pod的资源使用情况(如CPU和内存)自动调整Pod的副本数量,而Cluster Autoscaler则根据集群的资源需求自动调整节点的数量。通过自动扩展功能,用户可以灵活应对流量波动,确保应用的性能和可用性。
九、Kubernetes的挑战和未来方向
9.1 性能优化
随着应用规模的不断扩大,Kubernetes的性能优化变得越来越重要。如何在大规模集群中高效调度和管理Pod,如何优化网络和存储性能,都是Kubernetes面临的重要挑战。未来,Kubernetes将继续在性能优化方面进行探索和改进,确保其能够支持更大规模的应用和集群。
9.2 安全性
Kubernetes的安全性一直是社区关注的重点。如何保护集群和应用免受攻击,如何确保数据的安全传输和存储,都是Kubernetes需要解决的问题。未来,Kubernetes将继续加强安全机制,包括身份认证、访问控制、加密等,确保集群和应用的安全性。
9.3 多集群管理
随着Kubernetes的普及,越来越多的企业开始部署多集群环境。如何高效地管理和协调多个Kubernetes集群,是一个新的挑战。未来,Kubernetes将继续在多集群管理方面进行探索,提供更加完善的解决方案,帮助用户简化多集群环境的管理和运维。
9.4 边缘计算和物联网
边缘计算和物联网的兴起,为Kubernetes带来了新的应用场景和挑战。如何在资源受限的边缘设备上高效运行Kubernetes,如何实现边缘设备与中心集群的协同工作,都是需要解决的问题。未来,Kubernetes将继续在边缘计算和物联网领域进行创新,扩展其应用范围。
9.5 无服务器架构
无服务器架构(Serverless)是一种新的计算模式,用户只需关注业务逻辑,而无需管理底层基础设施。Kubernetes与无服务器架构的结合,将为用户提供更加灵活和高效的计算平台。未来,Kubernetes将继续探索与无服务器架构的深度集成,推动这一计算模式的发展。
结语
Kubernetes作为云原生时代的核心技术,已经成为现代应用开发和部署的标准。其强大的功能和灵活的架构,使得开发者能够更加专注于业务逻辑,而不必担心底层基础设施。Kubernetes的发展历程充满了创新和变革,从Google的内部项目到全球开源社区的明星项目,Kubernetes在短短几年内取得了巨大的成功。
未来,随着技术的不断进步和社区的持续努力,Kubernetes必将继续引领云原生应用的发展方向。无论是在性能优化、安全性、多集群管理,还是在边缘计算、物联网和无服务器架构等新兴领域,Kubernetes都有着广阔的前景。让我们共同期待Kubernetes在未来的发展和创新,为现代应用开发和部署带来更多的可能性。
相关文章:

Kubernetes的发展历程:从Google内部项目到云原生计算的基石
目录 一、起源与背景 1.1 Google的内部项目 1.2 Omega的出现 二、Kubernetes的诞生 2.1 开源的决策 2.2 初期发布 三、Kubernetes的发展历程 3.1 社区的成长 3.2 生态系统的壮大 3.3 重大版本和功能 3.4 多云和混合云的支持 四、Kubernetes的核心概念 4.1 Pod 4.…...
/proc/config.gz
前言 有时候,我们想知道一个运行着的内核都打开了哪些编译选项,当然,查看编译环境的 .config 文件是一个不错的选择,除此之外,还有没有别的办法呢?当然有,那就是 /proc/config.gz。 一睹风采 …...

论坛万能粘贴手(可将任意文件转为文本)
该软件可将任意文件转为文本。 还原为原文件的方法:将得到的文本粘贴到记事本,另存为UUE格式,再用压缩软件如winrar解压即可得到原文件。建议用于小软件。 下载地址:https://download.csdn.net/download/wgxds/89505015 使用演示…...

学习笔记——动态路由——OSPF(OSPF协议的工作原理)
八、OSPF协议的工作原理 1、原理概要 (1)相邻路由器之间周期性发送HELLO报文,以便建立和维护邻居关系 (2)建立邻居关系后,给邻居路由器发送数据库描述报文(DBD),也就是将自己链路状态数据库中的所有链路状态项目的摘要信息发送给邻居路由器…...

Mybatis1(JDBC编程和ORM模型 MyBatis简介 实现增删改查 MyBatis生命周期)
目录 一、JDBC编程和ORM模型 1. JDBC回顾 2. JDBC的弊端 3. ORM模型 Mybatis和hibernate 区别: 4. mybatis 解决了jdbc 的问题 二、MyBatis简介 1. MyBatis快速开始 1.1 导入jar包 1.2 引入 mybatis-config.xml 配置文件 1.3 引入 Mapper 映射文件 1.3 测试 …...

论文阅读YOLO-World: Real-Time Open-Vocabulary Object Detection
核心: 开放词汇的实时的yolo检测器。重参数化的视觉语言聚合路径模块Re-parameterizable VisionLanguage Path Aggregation Network (RepVL-PAN)实时核心:轻量化的检测器离线词汇推理过程重参数化 方法 预训练方案:将实例注释重新定义为区域…...
SM2的签名值byte数组与ASN.1互转
ASN.1抽象语言标记(Abstract Syntax Notation One) ASN.1是一种 ISO/ITU-T 标准,描述了一种对数据进行表示、编码、传输和解码的数据格式,它提供了一整套正规的格式用于描述对象的结构。 一、该结构的应用场景 例如在做待签名的数字信封时,数字信封使用ASN.1封装,这个时…...

云计算与生成式AI的技术盛宴!亚马逊云科技深圳 Community Day 社区活动流程抢先知道!
小李哥最近要给大家分享7月7日在深圳的即将举办的亚马逊云科技生成式AI社区活动Community Day ,干货很多内容非常硬核,不仅有技术分享学习前沿AI技术,大家在现场还可以动手实践沉浸式体验大模型,另外参与现场活动还可以领取诸多精…...

【鸿蒙学习笔记】基础组件Progress:进度条组件
官方文档:Progress 目录标题 作用最全属性迭代追加进度赋值风格样式 作用 进度条组件 最全属性迭代追加 Progress({ value: 20, total: 100, type: ProgressType.Linear }).color(Color.Green)// 颜色.width(200)// 大小.height(50)// 高度.value(50)// 进度可更…...

前程无忧滑块
声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 前言(lianxi …...

一站式uniapp优质源码项目模版交易平台的崛起与影响
一、引言 随着信息技术的飞速发展,软件源码已成为推动行业进步的重要力量。源码的获取、交易和流通,对于开发者、企业以及项目团队而言,具有极其重要的意义。为满足市场对高质量源码资源的迫切需求,一站式uniapp优质源码项目模版…...
Python中vars用法
在 Python 中,vars() 函数返回对象的 __dict__ 属性的字典。这个字典包含了对象的所有属性和它们的值。vars() 函数可以用于模块、类、实例,或者拥有 __dict__ 属性的任何其它对象。这里有几个使用 vars() 的例子: 一.模块 如果对一个模块使…...

【机器学习】基于Transformer的迁移学习:理论与实践
引言 在机器学习领域,迁移学习已成为提升模型训练效率和性能的重要策略,特别是在标注数据稀缺的场景下。Transformer模型自2017年由Google提出以来,在自然语言处理(NLP)领域取得了突破性进展,并逐渐扩展到…...
如何应对情绪和培养理性的书
以下是几本关于如何应对情绪和培养理性的书籍推荐: 《情绪智商》(Emotional Intelligence) - 丹尼尔戈尔曼(Daniel Goleman) 这本书探讨了情绪智商(EQ)的重要性以及如何通过提高EQ来改善个人和职…...

[数据集][目标检测]电缆钢丝绳线缆缺陷检测数据集VOC+YOLO格式1800张3类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1800 标注数量(xml文件个数):1800 标注数量(txt文件个数):1800 标注…...

【Git 学习笔记】Ch1.1 Git 简介 + Ch1.2 Git 对象
还是绪个言吧 今天整理 GitHub 仓库,无意间翻到了几年前自学 Git 的笔记。要论知识的稳定性,Git 应该能挤进前三——只要仓库还在,理论上当时的所有开发细节都可以追溯出来。正好过段时间会用到 Git,现在整理出来就当温故知新了。…...
Python 中别再用 ‘+‘ 拼接字符串了!
目录 引言 为什么不推荐使用 "" 示例代码 更高效的替代方法 使用 join 方法 示例代码 使用格式化字符串(f-strings) 示例代码 引言 大家好,在 Python 编程中,我们常常需要对字符串进行拼接。你可能会自然地想到…...

六西格玛绿带培训的证书有什么用处?
近年来,六西格玛作为一套严谨而系统的质量管理方法,被广泛运用于各行各业。而六西格玛绿带培训证书,作为这一方法论中基础且重要的认证,对于个人和企业而言,都具有不可忽视的价值。本文将从多个角度深入探讨六西格玛绿…...
《妃梦千年》第二十章:风雨欲来
第二十章:风雨欲来 战斗的胜利让林清婉和皇上的关系更加亲密,但宫中的阴谋却并未因此而停止。一天,林清婉正在寝宫中思考未来的对策,忽然接到一个紧急消息。小翠匆匆跑来,神色紧张:“娘娘,太后…...
深入理解二分法
前言 二分法(Binary Search)是一种高效的查找算法,广泛应用于计算机科学和工程领域。它用于在有序数组中查找特定元素,其时间复杂度为 O(log n),显著优于线性搜索的 O(n)。本文将深入介绍二分法的原理、实现及其应用场…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...