强推!2019年最火的容器、K8S和DevOps入门都在这了

戳蓝字“CSDN云计算”关注我们哦!

640?wx_fmt=jpeg

技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!


作者: Pasca

来源:蛋蛋团(ID:dandan_tuan)


前言


我们回顾企业IT架构演进的整个历史,不难看出企业主流形态都是依据冯诺依曼架构形态从计算机高度集中化,再到多用户多任务的大型机和小型机,简单概括这个时期的特征就是复杂且缺乏统一的标准。


直到80年代X86服务器的诞生,企业IT形态走向水平分层:站点层、应用层、中间件层甚至是数据访问层。


如果用一个词来形容发展中的互联网行业演变,我会说:日新月异。 


传统IT架构在互联网急剧膨胀的数据增长下,无法实现很好的解耦以及有效的分配资源。于是,以云计算为驱动的第三次IT架构融合变革浪潮,通过虚拟化与云调度管理技术,将不同厂家彼此孤立的计算、存储以及网络设备逻辑上虚拟成一个“资源池”。同时应运而生的,还有容器、K8S、DevOps等技术与理念成为云计算产业新热点。


“天下大势,合久必分,分久必合!”,这里也体现在IT架构,当我们了解了这种趋势后,从而去根据业务需求选择部署最适合的架构带来成本的降低和效率的提升。


“工欲善其事,必先利其器!”,作为互联网从业者,无论是否隶属于架构师职责,了解如容器、K8S等技术以及相辅而成的DevOps部署模式,才能更好的“玩转云计算”


思考一个事物,笔者喜欢以2W1H逻辑模型去分析。


是什么?为什么会出现?出现后会带来怎样的价值?本文文章脉络也是如此。




1、容器是什么?



容器,见到这个词,我们可能脑中就有一个“装东西”概念。 


没错,简单来讲,容器就是装“应用”封装,然后在任何位置都可以运行。就如同容器的logo,类似于一个集装箱,容器可以所有货物打包,并且互相隔离。



640?wx_fmt=jpeg


视角移到软件开发,当我们在本地电脑上开发时(生产环节),可能本地已经适配好了所需的库文件、扩展包、开发工具和开发框架等。然后在一个模拟生产环境的机器上进行测试通过后被用于生产环境(测试和上线)。 


假设没有用到容器,这三者的开发环境可能是不一样的,然后导致一系列的 Bug。


但是容器完美解决了这个问题。


正如 Docker 解释的,“容器镜像是软件的一个轻量的、独立的、可执行的包,包括了执行它所需要的所有东西:代码、运行环境、系统工具、系统库、设置。”


640?wx_fmt=png


这代表着,一旦一个应用被封装成容器,那么它所依赖的下层环境就不再重要了。它可以在任何地方运行,甚至在混合云环境下也可以。


有数据表明,持续集成和持续部署 (CI/CD) 通过 Docker 加速应用管道自动化和应用部署,交付速度提高至少 13 倍。


当然,这只是容器的一个优点,因为如果仅仅是这一个,虚拟机也能办到这个事情。


打包成镜像然后移交到另外一台虚拟机,但是容器有一个虚拟机无法媲美的优点:轻量。


640?wx_fmt=jpeg


640?wx_fmt=jpeg


这里的轻量指的是相比较于虚拟机动辄分钟级的启动时间,容器甚至可以在毫秒级别启动,并且相同宿主机,可以为容器给成千上百的应用独立部署。

而且,相比较于虚拟机,容器的性能IO更接近于原生,这也是半死不活的DotCloud公司,当开源了这个公司内部项目后,无论是谷歌还是微软,又或者AWS,纷纷看到了容器的前景,加入docker开源社区。DotCloud也因此成为了业内令人仰慕的公司。


而对于容器,我们只需要记住三大特性:轻量、标准和独立。



2、K8S是什么?



首先,我们来了解K8S是什么。


K8S全称为Kubernetes,其谐音就是K8S,然后现在通俗讲K8S都是指Kubernetes。 上面我们简单的介绍了下Docker,其实Docker只是应用容器引擎,也就是创建容器的工具。 


Docker技术的三大核心概念,分别是:

• 镜像(Image)

• 容器(Container)

• 仓库(Repository)。


前两者我们很好理解,镜像是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,容器就是承载这个镜像运行的实例。 


那这个仓库又是什么呢? 


我们先来思考下,有了镜像后,可以放到容器中去执行。但是从开发到测试,再到正式上线,这些镜像是怎么流转的呢? 


仓库,就是提供一个集中的存储、分发镜像的服务。而每个仓库通过不同的标签(Tag)对不同的镜像分类。


一般而言,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。


在K8S的章节里讲了如此多关于容器知识,为啥不写进前文呢? 


主要是因为,K8S本身就是依托于容器而诞生的,两者密不可分。


640?wx_fmt=png


K8S是一个开源的用于多个主机虚拟成一个云平台后进行容器资源管理和应用编排引擎,致力于让部署容器化应用简单并且高效,提供了应用的全生命周期管理,如应用部署,规划,更新,维护等机制。 


这里有两个关键词需要重点mark下:多个主机、容器化应用。


K8S为什么出现?就是因为有了K8S,我们可以将整个大规模的服务器对计算资源抽象化通过一个个容器进行自动化且细致化管理,将最终的应用服务交给用户。 


尽管谷歌是开源的K8S,但在谷歌内部已经大量使用了容器承载数据中心不同类型的应用负载,如谷歌搜索、大数据还是还是谷歌地图等。当K8S发布后,众多的的互联网企业可以享受到连接众多计算机成为集群资源池的好处。


也是因为K8S管理着不同的数据中心,每个数据中心都由成千上万的服务器联接组成。所以一般来说,一个K8S系统也叫做K8S集群。

而这个集群,通常由两个核心组件组成:

• 一个Master节点(主节点)

• 一群Node节点(计算节点)


640?wx_fmt=png


Master主节点主要负责集群管理和控制Node节点,Node节点是物理机或虚拟机的主机节点,每个Node节点提供Pod运行的必要服务,由Master主节点统一管理。 


其中Master主节点提供了4个组件,具体功能如下:

  • apiserver:资源操作唯一入口,符合Restful规范。

  • controller-manager:所有资源的自动化管理控制中心,管理着一堆其他控制器。

  • scheduler:负责Pods在各个Node节点上的分配和调度,并提供多种Pod调度策略(预选和优选策略)。

  • etcd:共享配置和服务发现的分布式KV键值对存储集群,主要负责存储持久性状态。


除了这些,还有一个很重要的副本控制器(Replication Controller,RC)的概念。


设定RC为3,通过controller-manager监控到不可用(即Pod少于3)时,会自动复制创建一个新的Pod。



其中Node节点主要包含Pod(没错,上面可能听的很迷糊的那个pod)、kubelet、kube-proxy 、Docker和Fluentd等等。


这几个组件的具体功能介绍如下:

  • Pod:K8S部署的最小对象,内含1~n个容器和存储卷,所有容器都是一个业务。重点:Pod是短暂的,不是持续性实体。

  • kubelet:负责管理Pod的生命周期以及Pod的容器、镜像、卷等。以及同步Master主节点本机注册信息。

  • kube-proxy:提供Pod之间的网络代理通讯和负载均衡。

  • Docker:容器应用引擎。

  •  Fluentd :主要负责日志收集、存储与查询。


阅读到这里,也许你看完上文,对于K8S还是迷迷糊糊,没关系,很正常。


因为除了上述这些组件的介绍外,在K8S还有一些概念是必须要理解,这样才能更好深刻理解整个系统。

  • 命名空间(Namespace):为K8S集群提供虚拟的隔离作用,同一个Pod的容器肯定在一个命名空间里。

  • 服务(Service):Pod是短暂的,不是持续性实体。持久化容器数据是通过使用持久化的卷类型存在,一个服务后面都有很多对应的容器来提供支持,对外表现为一个单一访问域名。

  • 标签(labels):用来更好让你分类,是与一个资源关联的键值对,这个资源大到集群,小到Pod,皆可。

  • 存储卷(Volume):每个 Pod 中声明的存储卷由 Pod 中的所有容器共享,同时,卷的生命周期和Pod一致,一个Volume只是一个目录,不过一个Pod支持多个Volume。



前面提到,Pod是短暂的、甚至可以说是游离的。那Pod重启后,IP地址可能改变,怎么前端容器正确可靠地指向后台容器呢?


答案是通过Service。


Service是K8S的基本操作单元,是真实应用服务或者称之为一组Pod的抽象。通过 Kube-Proxy 的 port 和服务 selector 决定服务请求传递给后端的容器,外部无需关注后端如何运行,只要知道服务单一访问域名即可。


下述GIF简略的演示了部分的Service通信功能,其中LoadBalancer是一个特殊类型的Service,也就是外部负载均衡。有容器,有了K8S,于是我们就有了更多的想象空间。


比如,DevOps持续交付、微服务架构甚至是混合云部署。本文暂且不提微服务和混合云的部署,下面来简单的讲讲DevOps是什么。



3、DevOps是什么?



近几年,这个词很火,特别是K8S和容器发展起来后,几乎个个企业都喊着向DevOps前进。 


那么,DevOps到底是什么呢? 


其实我们讲解容器的时候已经了解了一个持续集成和持续部署 (CI/CD)的概念,其实这就是一个实施DevOps的重要成果。最终以实现迅捷、高质量的服务交付为目标,为企业提升业务价值和响应能力。 


简单来讲,DevOps一词的来自于Development和Operations的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。


640?wx_fmt=jpeg


在DevOps之前,企业开发软件一般采用瀑布流模式,看到瀑布两个词,你可能就对这种模式有个大概的了解了。从产品需求的提出,到最终的落地,它的开发模式是如下图流程。 

640?wx_fmt=other


即,上述任何一个阶段,都必须在前者全部完成才能进行下一步。而且,传统软件架构将系统分为多个模块,并不注重接口的契约化,瀑布流方式集成周期长暂且不说,集成一个模块出现问题那么其他团队也需要等待。 


为了解决这个问题,早在09年,DevOps就因传统瀑布流开发模无法满足快速迭代交付的需求而诞生,持续集成(CI)和持续部署(CD)方式,即小步快跑模式。但是这种模式也是因为近几年容器和K8S等技术的成熟,才真正走进大小企业的殿堂。


于是,有了DevOps的开发模式变成了如下流程。


640?wx_fmt=jpeg


根据2018年度的DevOps报告数据表明,2014 年时,只有16%的调查参与者表示自己在 DevOps 团队。而在 2018,这个数字已经增长到 27%。同时“DevOps”一词的 Google Trends 以及 2019 年的预计增长假设。


 640?wx_fmt=jpeg


全文《2018全球DevOps现状报告》关键点如下:

  • SDO效能解锁竞争优势:提升盈利能力、生产力、市场份额、客户满意度,以及实现组织目标和使命的能力

  • 如何实施云基础设施很关键:云提高了软件交付的效能。具备云计算所有核心特征的团队,其属于高效能组织的可能性要高出23倍

  • 开源软件可以提高效能:高效能组织广泛应用开源软件的频率比其他组织要高1.75倍,并且在未来扩展开源软件使用范围的可能性是其他团队的1.5倍

  • 精英效能团队几乎不采用职能外包:因为这会有损于效能 通常外包可以节省成本并提供灵活的人力资源池,然而低效能组织将测试或运维等职能全部外包的比例,至少是高效能组织的4倍

  • 关键技术实践驱动高效能 :这些实践包括监控与可观察性、持续测试、数据库变更管理,以及尽早在软件开发过程中集成安全性

  • 实现软件交付的高效能与行业无关:我们发现在强监管行业和弱监管行业中,都存在着在软件交付方面实现了高效能的组织


最后,DevOps尽管有如此之多的优点,但是并不是所有的企业都能够完美的去实践。


因为DevOps一定程度上,并不仅仅是IT开发模式的改变,还是企业公司组织的重构。而相比前者,后者更难。


2019年,DevOps是否会如预期中覆盖更广,为更多企业带来真正的效率开发,我们拭目以待。



参考资料

10分钟看懂Docker和K8S——来源:小枣君 

2018全球DevOps现状报告——来源:DevOps社区

Learn the Kubernetes Key Concepts in 10 Minutes——作者:Omer Dawelbeit  

《云计算架构技术与实践》——作者:顾炯炯

七牛容器云文档

Docker中国文档 

K8S中文社区文档





640?wx_fmt=png


福利

扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


640?wx_fmt=jpeg


推荐阅读:

  • 漫画:图的 “最短路径” 问题 | 技术头条

  • 一张“黑洞”照片需半吨重硬盘?更逆天的操作还有这些……

  • Python的10个“秘籍”,这些技术专家全都告诉你了

  • 12 岁开始自学 Web 开发,他竟说初学者别搭理大牛?!

  • 从 0 到管理 200 人,这位程序员是如何做到的? | 程序员有话说

  • 4000万假币流入波场, 发生在凌晨的BTT假币攻击事件始末及细节披露

  • 马云再谈 996:真正的 996 与被剥削无关


640?wx_fmt=png真香,朕在看了!

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

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

相关文章

Tomcat10 下载和配置 Linux 环境

文章目录1. 下载Tomat2. 复制链接地址3. 下载4. 解压Tomcat5. 赋予权限6. 启动tomcat7. 监控日志8. linux防火墙9. 浏览器验证1. 下载Tomat tomcat官网:https://tomcat.apache.org/download-10.cgi 2. 复制链接地址 3. 下载 wget https://downloads.apache.org/t…

qt求一个区间的随机数

举例说明: 求65-90之间的随机数 qsrand(QTime(0,0,0).secsTo(QTime::currentTime())); quint8 ch (quint8)qrand()%25 65;先种随机数种子,然后求随机数。65到90之间相差25,先求0-25的随机数,然后在此基础上加65,其范…

Elastic全球用户大会Elastic{ON}首次落地北京

2019年4月10日,全球领先的大数据搜索软件公司Elastic(Elasticsearch和Elastic Stack的开发公司)一年一度的全球用户大会Elastic首次来到中国,在北京盛大开幕。来自全国的开发人员、合作伙伴和IT行业人士齐聚一堂,了解和…

Jenikns新建节点、配置节点、新建任务、配置任务、脚本验证

Jenkins节点概念: 1、Jenkins的节点就相当于一个服务器的环境配置容器 2、Jenkins的节点可以是多个的,一个UATEnv节点相当于一个UAT环境配置容器 3、Jenkins的节点就相当于把一个服务器的环境配置信息,都配置到了节点中,运行节点就…

Windows OpenGL ES 图像色阶

目录 一.OpenGL ES 图像色阶 1.原始图片2.效果演示 二.OpenGL ES 图像色阶源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL E…

qt使用动画提示正在载中

当程序加载较慢的时候,为了告知用户正在加载,需要在界面上显示正在加载中的提示。下面简单说一下自己使用中出现的问题。 一、在主线程中使用动画加载 创建基于qapplication的项目,以qdialog类为基类,有.ui文件。 项目的结构如下…

云存储精华问答 | 云存储的优势在哪?

云存储是一种网上在线存储(英语:Cloud storage)的模式,即把数据存放在通常由第三方托管的多台虚拟服务器,而非专属的服务器上。今天就让我们来看看关于云陈存储的精华问答吧。1Q:云存储是如何分类的&#x…

Github上Fork部署应用程序

Github上Fork部署应用程序 1. Fork简述及作用2. 登录Github,搜索项目3. Github上打开fork的部署应用4. 点击Fork,并确认邮件5. 登录自己的github,查看fork的项目 1. Fork简述及作用 Fork作用:获得代码修改的权限 简述&#xff1a…

Windows OpenGL 图像色阶

目录 一.OpenGL 图像色阶 1.原始图片2.效果演示 二.OpenGL 图像色阶源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL ES 学习…

qt解决循环创建的控件,每个都绑定相同的槽函数时出现的一对多响应问题

应用场景 若需要在程序运行期间根据控件数动态创建控件,且创建的每一个控件在某一个信号发生时会触发相同的槽函数。 问题描述 上述所导致的问题是在触发其中一个控件的时候,其它的控件也会响应该槽函数,出现了一对多的绑定。 示例 clas…

用栈和队列分别实现求解迷宫问题(c++,c)

求解迷宫问题:给定一个迷宫要求输出其路径。 给出的迷宫如下(可自行更改) 可用两种方法实现1.栈2.队列 用栈只能找到路但路不是最简的最简的要用队列实现 用栈实现(解析都在代码里了) c(实现&#xff0…

高达100亿美元!美国国防部将IBM和甲骨文双双踢出了云计算合同;华为任正非说了,华为对向苹果等对手出售5G芯片保持开放的态度...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go 微软全数位版本Xbox One S&a…

OpenGL 灰度图

目录 一.OpenGL 灰度图 1.IOS Object-C 版本1.Windows OpenGL ES 版本2.Windows OpenGL 版本 二.OpenGL 灰度图 GLSL Shader三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 &…

将Github中Fork的代码,克隆到本地

将Github中Fork的代码,克隆到本地 1. 在Github打开Fork的工程2. 单击clone or download按钮,复制Github克隆链接3.进入本地需要存储应用源程序的路径 将源代码clone到本地 1. 在Github打开Fork的工程 登录Github,点击Fork的项目即可&#xf…

Windows OpenGL ES 图像灰度图

目录 一.OpenGL ES 图像灰度图 1.原始图片2.效果演示 二.OpenGL ES 图像灰度图源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 Open…

VMware竟然出了一款防火墙

戳蓝字“CSDN云计算”关注我们哦!极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!防火墙,这个在安全界“恐龙时代”就存在的产品,相信但凡…

qt项目中的某一个类的输出中文信息乱码,其它类中文输出正常

问题描述 qtcreate5.13.2中整个项目中通过添加头文件,使用qDebug()输出中文打印信息,输出中文都是正常的,但是有一个类的输出中文是乱码。 解决方法 修改该类的编码格式。由于项目默认采用的是utf-8编码,但此类的编码采用的是G…

Navicat创建数据库表 、导入sql文件,生成表结构

Navicat创建数据库表 、导入sql文件,生成表结构 1.打开Navicat2.远程连接mysql连接3.创建数据库4.导入sql文件5.生成表结构 1.打开Navicat 2.远程连接mysql连接 3.创建数据库 4.导入sql文件 导入源代码中的sql文件 5.生成表结构

将本地源代码程序推送远程Github仓库

将本地源代码程序推送远程Github仓库 1.查看改动文件的状态2.将修改的代码从工作区添加至暂存区3.将暂存区的代码添加至本地仓库4.将本地仓库中的代码Push到Github5.登录Github,查看是否推送代码成功 1.查看改动文件的状态 git status2.将修改的代码从工作区添加至…

OpenStack网络的下一步原来这么走 | 技术头条

戳蓝字“CSDN云计算”关注我们哦!技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!最新版本的OpenStack Stein很快就要发布了,社区将在4月10日一起庆祝。对于…