【Kubernetes】 Kubernetes 了解云原生的原理

Kubernetes 了解云原生的原理

云原生是一种软件设计、实施和部署方法,旨在充分利用基于云的服务和交付模型。云原生[1]应用程序通常也使用分布式架构运行。这意味着应用程序功能被分解为多个服务,然后分布在托管环境中,而不是整合到单个服务器上。

有点令人困惑的是,云原生应用程序不一定在云中运行。可以根据云原生原则构建应用程序,并使用Kubernetes[2]等平台将其部署在本地,该平台模仿云环境的分布式、基于服务的交付模型。

尽管如此,大多数云原生应用程序都在云中运行。任何按照云原生原则设计的应用程序都可以在云中运行。

云原生是如何工作的?
云原生是一个高级概念,而不是特定类型的应用程序架构、设计或交付过程。因此,有多种方法可以创建云原生软件以及可以帮助实现这一目标的各种工具。

然而,一般来说,云原生应用程序共享某些核心功能:

它们是使用微服务[3]架构构建的。这意味着应用程序功能分布在许多微服务中,这些微服务相互交互以运行完整的应用程序。
它们广泛依赖 API 将内部组件相互集成,以及与第三方服务进行交互。
它们使用DevOps[4]等软件开发策略迭代和持续更新。
它们部署在分布式环境中,例如服务器集群,而不是单个服务器上。
您可以总结以上所有内容,即云原生应用程序本质上是使用现代工具和方法设计和构建的应用程序。在很多方面,“云原生软件开发”简直成了“现代软件开发[5]”的简写。这两个术语都有些模棱两可,但这就是重点:正如有很多方法可以使软件设计和开发操作现代化一样,也有很多方法可以接近云原生。

云原生有什么好处?
与传统的应用程序设计和开发策略相比,云原生提供了多种优势。这意味着那些以单体架构、本地部署和单节点托管环境等技术为中心的优势:

弹性和可靠性:由于云原生应用程序通常部署在分布式环境中,因此它们在面对故障和中断时更具弹性。单个服务器故障,甚至是多个服务器的故障,通常不会导致应用程序失败,因为服务可以重新部署到集群中的其他服务器。
可扩展性:云原生通过允许将应用程序分解为离散的部分来达到可扩展性。每个部分都可以单独缩放,从而可以高效、快速地缩放。例如,如果应用程序登录次数激增,则可以扩展应用程序的身份验证服务以应对这种增加,即使应用程序的其余部分继续以正常容量运行。
效率:从成本和性能的角度来看,云原生应用程序往往是高效的。这是因为他们只能从与之交互的云服务中消耗他们需要的资源。单体应用程序和单节点应用程序通常效率不高,因为它们可能会占用整个服务器,即使它们并不总是需要服务器上的所有可用资源。
更快的创新:云原生将应用程序分解为多个组件,这些组件可以使用自己的代码库单独开发。它还鼓励通过持续集成/持续交付6 等方法进行持续的迭代开发。在这两种方式中,云原生都让创建新功能和创新变得更加容易。
可移植性:使用云原生方法设计的应用程序通常可以在任何云中运行,以及在基于服务的模型(如 Kubernetes)上管理资源的任何本地托管平台。在这方面,云原生应用程序往往与云和基础设施无关,因此可以轻松地将它们从一个环境移植到另一个环境,而无需修改应用程序本身。
自动化:云原生可以在部署和管理应用程序时轻松充分利用自动化工具。例如,云原生应用程序经常使用容器进行部署,可以使用 Docker Swarm 或 Kubernetes 等工具进行编排,这些工具可以自动处理负载平衡和工作负载放置等任务。
云原生的缺点是什么?
虽然云原生是加速应用程序开发、最大化效率和提高可靠性的好方法,但它带来了一些挑战。最常见的包括:

复杂性:简单来说,云原生的开发策略和应用架构比传统应用更复杂。与使用单个代码库开发的单体应用程序相比,云原生应用程序包含更多移动部件,并且需要更复杂的开发过程。出于这个原因,采用云原生的组织必须实施工具和流程,使他们能够管理应用程序开发过程以及应用程序部署和管理过程的复杂性。
更多工具:与此类似,云原生应用程序通常依赖于更多工具,从而导致更复杂的技术堆栈。虽然单体应用程序通常可以仅使用 VM 进行部署,但云原生应用程序可以使用容器部署,这些容器在 VM 上运行并通过 Kubernetes 进行编排。此外,CI/CD 等开发技术需要团队管理大量工具(CI 服务器、IDE、源代码管理器等)。在有关云原生应用程序的所有这些方面,团队必须学习和跟踪更多的工具和技术。
API 依赖:虽然云原生应用程序以 API 为中心的设计使得按需消耗资源变得容易,但广泛依赖 API 也存在缺陷。API 可能会引入原本不存在的安全问题。此外,API 性能或可用性问题可能会影响云原生应用程序的性能,并且由于对第三方 API(如云供应商提供的 API)的可见性有限,这些问题可能难以解决。
锁定风险:虽然可以通过使用开放 API 和技术将云原生应用程序设计为与供应商无关,但情况并非总是如此。一些云原生应用程序可能需要来自特定云供应商的 API,或者依赖于特定的编排平台,从而导致供应商或平台锁定。
云原生开发示例
如今,云原生开发在各种类型和规模的组织中得到广泛使用。考虑以下云原生示例和用例:

重构遗留应用程序
拥有设计为在本地运行的遗留应用程序的企业可能会采用云原生作为对这些应用程序进行全面检查和现代化的手段。通常,这项工作需要重构,这意味着重新设计应用程序,使其可以在分布式环境中运行并充分利用基于服务的交付模型。

容器化应用
寻求利用比虚拟机更高效且性能更好的容器的组织可能会转向云原生来实现这一点。虽然您不必使用容器来实现云原生,但容器很适合基于微服务、面向服务的开发和部署技术。

云迁移
拥抱云原生是开始向云迁移的好方法,或者是对现有云投资的双重投资。从技术上讲,您的应用程序不必是云原生的就可以在云中运行;例如,您可以在基于云的 VM 上部署单体应用程序以在云中运行它。但是为了充分利用云,并在云环境中实现成本和性能之间的最佳平衡,您需要您的应用程序是云原生的。

成本优化
由于云原生架构和开发策略倾向于更有效地利用资源,因此云原生是寻求降低 IT 运营成本的企业的常见策略。虽然采用云原生并不能自动保证成本效率,但精心设计的云原生应用程序的运行和更新成本将低于传统应用程序。

可靠性增强
如上所述,云原生应用程序往往更可靠,因为即使主机基础设施的一部分发生故障,它们仍然可用。出于这个原因,寻求使他们的应用程序更可靠,进而改善最终用户体验的组织应该考虑云原生。

概括
通过允许组织充分利用分布式、基于服务的应用程序托管环境,云原生可以为企业、开发人员和用户等带来更好的结果。并非每个应用程序都需要是云原生的,但总的来说,云原生是构建新应用程序或大修旧应用程序时要走的路。

参考资料
[1]
云原生: https://www.itprotoday.com/hybrid-cloud/how-and-when-use-cloud-native-technology

[2]
Kubernetes: https://www.itprotoday.com/hybrid-cloud/4-reasons-why-kubernetes-so-popular

[3]
微服务: https://www.itprotoday.com/microservices/what-are-microservices

[4]
DevOps: https://www.itprotoday.com/devops/what-devops

[5]
现代软件开发: https://www.geeksforgeeks.org/modern-principles-of-software-development/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/118799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

composer安装thinkphp6报错

composer安装thinkphp6报错, 查看是否安装了对应的PHP扩展,我这边使用的是宝塔的环境,全程可以可视化操作 这样就可以安装完成了

【AIGC】百度文库文档助手之 - 一键生成PPT

百度文库文档助手之 - 一键生成PPT 引言一、文档助手:体验一键生成PPT二、文档助手:进阶用法三、其它生成PPT的方法3.1 ChatGPT3.2 文心一言 引言 就在上个月百度文库升级为一站式智能文档平台,开放四大AI能力:智能PPT、智能总结、…

直方图均衡化算法

直方图均衡化是一种图像处理算法,通过调整图像的灰度级分布,增强图像的对比度和细节。下面是直方图均衡化算法的基本步骤: 统计原始图像的灰度直方图:遍历整个图像,计算每个灰度级出现的频次。 计算累积直方图&#x…

【Ansible自动化运维工具 第一部分】Ansible常用模块详解(附各模块应用实例和Ansible环境安装部署)

Ansible常用模块 一、Ansible1.1 简介1.2 工作原理1.3 Ansible的特性1.3.1 特性一:Agentless,即无Agent的存在1.3.2 特性二:幂等性 1.4 Ansible的基本组件 二、Ansible环境安装部署2.1 安装ansible2.2 查看基本信息2.3 配置远程主机清单 三、…

Flutter Android IOS 获取通讯录联系人列表

1.在pubspec.yaml 文件中添加 contacts_service 和 permission_handler 插件的依赖: dependencies:contacts_service: ^0.6.3 #获取联系人permission_handler: ^11.0.1 #权限请求2.在你的 Dart 代码中,导入 contacts_service 插件: impo…

计算机中了mallox勒索病毒怎么办,勒索病毒解密,数据恢复

最近一段时间,云天数据恢复中心陆续收到很多企业的求助,企业的计算机服务器遭到了mallox勒索病毒攻击,导致企业的数据库无法正常使用,严重影响了企业的正常生产生活,为此,云天数据恢复中心的工程师通过对此…

MySQL - 主键索引和非主键索引

在MySQL中,主键索引和非主键索引有不同的作用和特点: 主键索引(Primary Key Index): 主键索引是一种唯一性索引,用于唯一标识表中的每一行数据。主键索引确保表中每行数据的主键列值都是唯一的&#xff0…

【Java笔记+踩坑】设计模式——原型模式

导航: 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/黑马旅游/谷粒商城/学成在线设计模式面试题汇总性能调优/架构设计源码-CSDN博客​ 目录 零、经典的克隆羊问题(复制10只属性相同的羊) 一、传统方案&#xff1…

酒类商城小程序怎么做

随着互联网的快速发展,线上购物越来越普及。酒类商品也慢慢转向线上销售,如何搭建一个属于自己的酒类小程序商城呢?下面就让我们一起来看看吧! 一、登录乔拓云平台 首先,我们需要进入乔拓云平台的后台,点击…

使用boost.mysql来操作mysql 数据库

准备条件 1. visual studio 2019 2. boost库 3. 安装本地的mysql 服务器,boost.mysql对mysql有版本要求最好8.0,具体参考官方文档 安装 使用Nuget安装boost 要安装 openssl,否则的话编译其他项目会产生依赖ssl的错误 安装mysql 省略 …

mongodb-gridfs下载文件报Sort exceeded memory limit of 104857600 bytes异常

报错详细信息 com.mongodb.MongoQueryException: Query failed with error code 292 and error message Executor error during find command :: caused by :: Sort exceeded memory limit of 104857600 bytes, but did not opt in to external sorting. on server 11.51.141.…

软件开发技术包括哪些呢?

软件开发技术包括多种编程语言、开发框架、工具和方法,以满足不同类型的应用和项目需求。以下是一些常见的软件开发技术: 1、编程语言:各种编程语言用于开发不同类型的软件,如Java、Python、C、C#、JavaScript、Ruby、PHP、Swift…

Java操作Excel

一、Java操作Excel 二、Excel根据单元格状态自动变更行背景颜色 用excel记录和跟进工作的时候,设置背景颜色,以此让记录更加突出,方便查看,但是手动修改背景颜色一来麻烦容易漏,也可能颜色不统一,我们可以试…

PHP 数据库交互优化,根据传参查询

接上文 修改以下内容 将查询的 uid 改为 username,同时在 user 和 message 两张表中查询 $sql "select m.id,u.username,m.title,m.content from user u,message m where u.idm.uid;"根据 message 中的 id 查询,形式为 http://127.0.0.1/m…

数学与经济管理

数学与经济管理(2-4分) 章节概述 最小生成树问题 答案:23 讲解地址:74-最小生成树问题_哔哩哔哩_bilibili 最短路径问题 答案:81 讲解地址:75-最短路径问题_哔哩哔哩_bilibili 网络与最大流量问题 真题 讲解…

【STL】:vector用法详解

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关vector的基础用法,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 数…

k8s-----24、亲和力Affinity

1、应用场景 pod和节点间的关系: 某些Pod优先选择有ssdtrue标签的节点,如果没有在考虑部署到其它节点;某些Pod需要部署在ssdtrue和typephysical的节点上,但是优先部署在ssdtrue的节点上; pod和pod间的关系: 同一个应用的Pod不…

Wt库的C++下载器程序

以下是一个使用Wt库的C下载器程序&#xff0c;用于下载音频文件。此程序使用了的代码。 #include <Wt/Wt.h> #include <Wt/Http/DiskCache.h> #include <Wt/Http/HttpClient.h> ​ // 定义一个函数来获取服务器 static std::string get_proxy() {// 使用Wt:…

idea免费插件分享

分享一些在开发中常用到的idea插件&#xff0c;都是一些我自己常用的&#xff0c;希望对各位程序员有帮助吧。 1、Chinese Language 汉化插件&#xff1a;中文语言包将为您的 IntelliJ IDEA, AppCode, CLion, DataGrip, GoLand, PyCharm, PhpStorm, RubyMine, WebStorm, 和Rid…

SQL基础练习题1

文章目录 主要内容一.SQL基础练习题1.下面的 SELECT 语句是否执行成功&#xff1a;代码如下&#xff08;示例&#xff09;: 2.在下面的语句中有 4 个编码错误&#xff0c;请找出它们&#xff1a;代码如下&#xff08;示例&#xff09;: 3.显示 DEPARTMENTS 表的结构。代码如下&…