什么是云原生和 CNCF?

一、CNCF简介

CNCF:全称Cloud Native Computing Foundation(云原生计算基金会),成立于 2015 年 12 月 11 日,是一个开源软件基金会,它致力于云原生(Cloud Native)技术的普及和可持续发展。

成立CNCF这个组织的初衷或者愿景,简单说:

  • 推动云原生计算可持续发展;
  • 帮助云原生技术开发人员快速地构建出色的产品:

 

二、CNCF Landscape 路线图

CNCF Landscape最重要的产出包括一个路线图和一个全景图。路线图(Trail Map)是CNCF对云原生用户使用开源项目以及云原生技术的推荐过程。在路线图的每个步骤中,用户都可以选择供应商支持的产品或自己动手使用开源项目。 

整个路线图分成了十个步骤,每个步骤都是用户或平台开发者将云原生技术在实际环境中落地时,需要循序渐进思考和处理的问题:

  1. 容器化。目前最流行的容器化技术是 Docker,你可以将任意大小的应用程序和依赖项,甚至在模拟器上运行的一些程序,都进行容器化。随着时间的推移,你还可以对应用程序进行分割,并将未来的功能编写为微服务。
  2. CI/CD(持续集成和持续发布)。创建 CI/CD 环境,从而使源代码上的任意修改,都能够自动通过容器进行编译、测试,并被部署到预生产甚至生产环境中。
  3. 应用编排(Kubernetes)。Kubernetes 是目前市场上应用编排领域被最广泛应用的工具,Helm Charts 可以用来帮助应用开发和发布者用于升级 Kubernetes 上运行的应用。
  4. 监控和分析。在这一步中,用户需要为平台选择监控、日志以及跟踪的相关工具,例如将Prometheus用于监控、Fluentd用于日志、Jaeger用于整个应用调用链的跟踪。
  5. 服务代理、发现和治理。CoreDNS、Envoy 和 LInkerd 可以分别用于服务发现和服务治理,提供服务的健康检查、请求路由、和负载均衡等功能。
  6. 网络。Calico、Flannel 以及 Weave Net 等软件用于提供更灵活的网络功能。
  7. 分布式数据库和存储。分布式数据库可以提供更好的弹性和伸缩性能,但同时需要专业的容器存储予以支持。
  8. 流和消息处理。当应用需要比JSON-REST这个模式更高的性能时,可以考虑使用 gRPC 或者 NATS。gRPC 是一个通用的 RPC(远程调用)框架(类似各种框架中的RPC调用),NATS 是一个发布/订阅和负载均衡的消息队列系统。
  9. 容器镜像库和运行环境。Harbor 是目前最受欢迎的容器镜像库,同时,你也可以选择使用不同的容器运行环境用于运行容器程序。
  10. 软件发布。最后可以借助 Notary 等软件用于软件的安全发布。

 

三、CNCF 全景图(Landscape)

CNCF Landscape路线图从实践步骤上帮助用户梳理了整个云原生应用的最佳流程。然而整个实践过程中的每个环节,用户都需要了解有哪些具体的软件和产品选择,这就是CNCF Landscape全景图发挥作用的地方了(https://landscape.cncf.io/)。

这张全景图试图从云原生的层次结构,以及不同的功能组成上,让用户了解云原生体系的全貌,并帮助用户在不同组件层次去选择恰当的软件和工具进行支持。

四、云原生简介

云原生(cloud native)是一种基于云的基础之上的软件架构思想,以及基于分布部署和统一运管的分布式云,以容器、微服务、DevOps等技术为基础建立的一套云技术产品体系。

  • 云原生从字面意思上来看可以分成云和原生两个部分。
  • 云是和本地相对的,传统的应用必须跑在本地服务器上,现在流行的应用都跑在云端,云包含了 IaaS、PaaS 和 SaaS。
  • 原生就是土生土长的意思,我们在开始设计应用的时候就考虑到应用将来是运行云环境里面的,要充分利用云资源的优点,比如️:云服务的弹性和分布式优势。

如何开发出适合于在云环境里面部署的程序呢?其实主要是需要遵循几个开发原则:

 

1、容器化(docker + k8s)

容器化的好处在于运维的时候不需要再关心每个服务所使用的技术栈了,每个服务都被无差别地封装在容器里,可以被无差别地管理和维护,现在比较流行的工具是docker和k8s。

2、微服务

微服务解决的是我们软件开发中一直追求的低耦合+高内聚,与微服务对应的是我们传统的单体应用。微服务还建议使用RESTful API通信。

3、无服务(Serverless)

无服务器架构并不是说,未来不再需要服务器,而是不再着重关注底层的基础架构,更多的注意力可以放在和业务更相关的一些逻辑实现上。例如一些函数的代码片段,平台自动根据负载按需部署和启动,以及自动伸缩代码逻辑来满足业务处理的需求。

4、DevOps

DevOps(Development和Operations的组合词)即开发、运维一体化。涉及软件在整个开发生命周期中的持续开发,持续测试,持续集成,持续部署和持续监控。

  • 维基百科对DevOps的定义比较拗口。其实往简化里讲DevOps是提倡开发和IT运维之间的高度协同,从而在完成高频率部署的同时,提高生产环境的可靠性、稳定性、弹性和安全性。
  • 从另外一个维度,广义上来说,DevOps不仅需要打通开发运维之间的部门墙,我们认为DevOps更多的需要从应用的全生命周期考虑,实现全生命周期的工具全链路打通与自动化、跨团队的线上协作能力

5、Service Mesh(服务网格)

Service Mesh是近年兴起的一个话题,在容器微服务的基础上,通过 Service Mesh 可以让用户更精细、更智能的去管理服务之间的通讯Service Mesh 社区的旗舰项目Istio,当前的热度正在迅速的飙升。

6、云(Cloud)

云是云原生的基础,没有云也就没有云原生。没有对云正确地理解,也不可能对云原生有正确的打开方式。对于非技术人员来说,至少要理解云的多种不同的服务模型,比方:IaaS、PaaS、SaaS 以及各种服务模型的应用场景和价值。

 

五、小结

我们不难发现,云原生是一个很宽泛的概念,想要开发一个支持云原生的应用并不难,可能就是简单的实现可基于容器部署、使用Kubernetes进行编排与调度,集成CI/CD工具以及Prometheus监控工具等

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker中gitlab以及gitlab-runner的安装与使用

1、本文主要讲述如何使用Docker安装gitlab以及gitlab-runner,并且会讲述gitlab-runner如何使用 2、gitlab部分不需要修改过多的配置即可使用,本文未讲述https配置,如有需求,可自行百度 3、Docker如何安装可以自行百度 一、Docker安…

保姆级教程,Linux服务器docker搭建jenkins持续集成一键部署SpringBoot项目(Gradle)

前言: 在后台项目开发过程从Java延伸到Kotlin开发,从maven pom到gradle,IDEA新项目SpringBoot init框架官方推荐kotlingradle,本章以此为jenkins持续集成做项目部署,服务器为Centos,JDK 17,Spr…

【C++】文件操作(囊括特殊情况:读文件遇到的空格被跳过、“文件只读一次“)

author:&Carlton tag:C topic:【C】文件操作(囊括特殊情况:读文件遇到的空格被跳过、“文件只读一次”) website:黑马程序员C date:2023年7月31日 目录 文本文件 写文件 源…

如何在面试IT公司时展现出色的表现

在面试IT技术岗位的过程中,展现出色的表现是至关重要的。下面我将分享一些我个人的经验和观察,希望对大家有所帮助。 首先,提前准备是非常重要的。在面试前,你应该充分了解目标公司的业务和技术需求。这样你就能更好地回答面试官…

基于Java+SpringBoot+Vue前后端分离电商项目

晚间lucky为友友们送福利啦~🎁 Tips:有需要毕业设计指导的童鞋一定要认真看哦,文末有彩蛋。 一.项目介绍 该电商项目是一个简单、入门级的电商项目,是基于JavaSpringBootVue前后端分离项目。前端采用两套独立的系统分别完成项目…

手机的python怎么运行文件,python在手机上怎么运行

大家好,小编来为大家解答以下问题,手机上的python怎么运行程序,手机的python怎么运行文件,今天让我们一起来看看吧! 1、python程序怎么在手机上运行 python语言应用很广泛,自己也很喜欢使用它,其…

【机器学习】Cost Function for Logistic Regression

Cost Function for Logistic Regression 1. 平方差能否用于逻辑回归?2. 逻辑损失函数loss3. 损失函数cost附录 导入所需的库 import numpy as np %matplotlib widget import matplotlib.pyplot as plt from plt_logistic_loss import plt_logistic_cost, plt_two_…

【自动化剧本】Role角色

目录 一、Roles模块1.1roles的目录结构1.2roles 内各目录含义解释1.3在一个 playbook 中使用 roles 的步骤 二、使用Role编写LNMP剧本2.1 搭建Nginx角色2.2搭建Mysql角色2.3搭建php角色2.4lnmp剧本 一、Roles模块 roles用于层次性、结构化地组织playbook。roles能够根据层次型结…

vue基础-虚拟dom

vue基础-虚拟dom 1、真实dom目标2、虚拟dom目标 1、真实dom目标 在真实的document对象上,渲染到浏览器上显示的标签。 2、虚拟dom目标 本质是保存节点信息、属性和内容的一个JS对象 更新会监听变化的部分 给真实的DOM打补丁

vue 表单form-item模板(编辑,查看,新建)

目录 formatFormData 后端数据格式​编辑 JSON解析和生成 加载(请求前,await后) formComp formatFormData 后端数据格式 为空的,可以直接不提交/提交null/undefined JSON解析和生成 var str {"name": "…

容斥原理 训练笔记

​ 容斥原理 设S是一个有限集&#xff0c;A_1,A_2…A_n是S的n个子集&#xff0c;则 ∣ S − ⋃ i 1 n A i ∣ ∑ i 0 n ( − 1 ) i ∑ 1 ≤ j 1 < j 2 . . . < j i ≤ n ∣ ⋂ k 1 i A j k ∣ |S-\bigcup_{i1}^{n}A_i|\sum_{i0}^{n}(-1)^i\sum_{1\leq j_1< j_2.…

windows如何上架ios应用到app store

Application Uploader iOS App上架工具是一款非常好用的针对iOS苹果应用程序软件开发的实用编程工具&#xff0c;它的主要作用是帮助用户进行快速的程序应用设计和程序应用调试&#xff0c;节省用户进行软件开发耗费的不必要时间&#xff01; ​ 编辑切换为居中 添加图片注释&…

Minecraft 1.20.x Forge模组开发 05.矿石生成

我们本次尝试在主世界生成模组中自定义的矿石 效果演示 效果演示 效果演示 1.由于1.20的版本出现了深板岩层的矿石,我们要在BlockInit类中声明一个矿石的两种岩层形态: BlockInit.java package com.joy187.re8joymod.init;import java.util.function.Function;import java…

数据可视化(5)热力图及箱型图

1.热力图 #基本热力图 #imshow&#xff08;x&#xff09; #x&#xff0c;数据 x[[1,2],[3,4],[5,6],[7,8],[9,10]] plt.imshow(x) plt.show() #使用热力图分析学生的成绩 dfpd.read_excel(学生成绩表.xlsx) #:表示行号 截取数学到英语的列数 xdf.loc[:,"数学":英语].…

操作系统专栏2-文件系统from小林coding

文件系统 文件系统构成虚拟文件系统文件的使用文件的存储连续存储非连续空间存放方式链表方式索引方式 Linux文件的实现方式 空闲分区的管理文件系统结构目录的存储软链接和硬链接 文件系统构成 Linux的设计哲学有一点很重要:一切皆文件,不仅仅是普通的文件和目录,就连块设备,…

六、代理模式

文章目录 一、代理模式1、代理模式的好处和缺点1.1 代理模式理解加深 一、代理模式 为什么要学习代理模式&#xff1f; 代理模式是Spring AOP 以及 Spring MVC 的底层&#xff01;&#xff01;并且还是 JAVA 的23种设计模式之一&#xff01;&#xff01; 代理模式的分类&#…

C++ | 哈希表的实现与unordered_set/unordered_map的封装

目录 前言 一、哈希 1、哈希的概念 2、哈希函数 &#xff08;1&#xff09;直接定址法 &#xff08;2&#xff09;除留余数法 &#xff08;3&#xff09;平方取中法&#xff08;了解&#xff09; &#xff08;4&#xff09;随机数法&#xff08;了解&#xff09; 3、哈…

Nginx解决文件服务器文件名显示不全的问题

Nginx可以搭建Http文件服务器&#xff0c;但默认的搭建会长文件名显示不全&#xff0c;比如如下&#xff1a; 问题&#xff1a;显示不全&#xff0c;出现...&#xff0c;需要进行解决 这里使用重新编绎nginx的方式&#xff0c;见此文&#xff1a; https://unix.stackexchange…

刷题笔记 day4

力扣 611 有效三角形的个数 首先需要知道如何判断 三个数是否能构成三角形。 假如 存在三个数 a < b < c&#xff0c;如果要构成三角形&#xff0c;需要满足&#xff1a; ab > c ; a c > b ; b c > a ; 任意两个数大于第三个数就可构成三角形。 其实不难…

网络编程 IO多路复用 [select版] (TCP网络聊天室)

//head.h 头文件 //TcpGrpSer.c 服务器端 //TcpGrpUsr.c 客户端 select函数 功能&#xff1a;阻塞函数&#xff0c;让内核去监测集合中的文件描述符是否准备就绪&#xff0c;若准备就绪则解除阻塞。 原型&#xff1a; #include <sys/select.…