mirror of
https://github.com/zhwei820/learn.lianglianglee.com.git
synced 2025-11-19 15:43:44 +08:00
fix img
This commit is contained in:
@@ -175,16 +175,16 @@ function hide_canvas() {
|
||||
<p>提到 DevOps 相信很多人并不陌生,DevOps 作为一个热门的概念,近几年被提及的频率也越来越高。有些人说它是一种方法论,有些人说它是一堆工具,有些人说它是企业的一种管理模式。那么,DevOps 究竟是什么呢?Docker 在 DevOps 中又扮演了什么角色呢?今天,我们就来详细聊聊这个话题。</p>
|
||||
<h3>DevOps 的前生今世</h3>
|
||||
<p>1964 年,世界上的第一台计算机诞生,那时的计算机主要用于军事领域。计算机的运行离不开程序,那时负责编程的人员被称之为“程序员”。由于那时的程序比较简单,很多工作可以一个人完成,所以早期的计算软件交付流程是这样的:设计—开发—自测—发布—部署—维护。如图 1 所示:</p>
|
||||
<p><img src="assets/CgqCHl-uVieAfOxkAAAwBofBN_Y124.png" alt="Drawing 1.png" /></p>
|
||||
<p><img src="assets/CgqCHl-uVieAfOxkAAAwBofBN_Y124.png" alt="png" /></p>
|
||||
<p>然而,随着计算机的发展和普及,越来越多的人接触到了计算机,这时的计算机也开始逐渐应用于商业领域,市场上出现了越来越多的办公、游戏等“软件”,也有越来越多的人开始从事软件开发这个行业,而这些软件开发者也有了更加专业的称呼“软件开发工程师”。</p>
|
||||
<p>后来,又随着计算机软件规模的增大,软件也越来越复杂,这时一个人已经无法完成一个软件完整的生命周期管理。一个软件的开发需要各个团队的分工配合,同时职能划分也需要更加细化,整个软件管理流程中除了软件工程师外又增加了测试工程师和运维工程师。</p>
|
||||
<p>分工之后软件开发流程如下:研发工程师做代码设计和开发,测试工程师做专业的测试工作,运维工程师负责将软件部署并负责维护软件。如图 2 所示:</p>
|
||||
<p><img src="assets/Ciqc1F-uVjqANUjJAABEgJx4ezg502.png" alt="Drawing 3.png" /></p>
|
||||
<p><img src="assets/Ciqc1F-uVjqANUjJAABEgJx4ezg502.png" alt="png" /></p>
|
||||
<p>这种软件开发模式被称为瀑布模型,这种模式将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如瀑布流水一样,逐级的下降。</p>
|
||||
<p><img src="assets/Ciqc1F-uVkSAK6G-AABQOfQy504986.png" alt="Drawing 5.png" /></p>
|
||||
<p><img src="assets/Ciqc1F-uVkSAK6G-AABQOfQy504986.png" alt="png" /></p>
|
||||
<p>瀑布模型的模式十分理想化,它假定用户需求十分明确,开发时间十分充足,且项目是单向迭代的。但随着互联网的出现,软件迭代速度越来越快,软件开发越来越“敏捷”,这时候大名鼎鼎的“敏捷开发”出现了,敏捷开发把大的时间点变成细小的时间点,快速迭代开发,软件更新速度也越来越快。</p>
|
||||
<p>敏捷开发对传统的开发、测试、运维模式提出了新的挑战,要求更快的开发速度和更高的软件部署频率。而运维工程师信奉的则是稳定性压倒一切,不希望软件频繁变更而引发新的问题。于是乎,敏捷开发和运维工程师之间的矛盾便诞生了。</p>
|
||||
<p><img src="assets/Ciqc1F-uVkuAfwNzAACSxCvT8p8579.png" alt="Drawing 7.png" /></p>
|
||||
<p><img src="assets/Ciqc1F-uVkuAfwNzAACSxCvT8p8579.png" alt="png" /></p>
|
||||
<p>敏捷开发使得开发和运维工程师之间的矛盾变得越来越深,为了解决这个问题,DevOps 诞生了。DevOps 是研发工程师(Development)和运维工程师(Operations)的组合。下面是维基百科对 DevOps 的定义:</p>
|
||||
<blockquote>
|
||||
<p>DevOps(Development 和 Operations 的组合词)是一种重视“软件开发人员(Dev)”和“IT 运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。</p>
|
||||
@@ -198,7 +198,7 @@ function hide_canvas() {
|
||||
<p>随着 Docker 技术的诞生,我们开始迎来了 DevOps 2.0 时代,DevOps 所有的这些需求都与 Docker 所提供的能力极其匹配。首先 Docker 足够轻量,可以帮助我们的微服务实现快速迭代。其次 Docker 可以很方便地帮助我们构建任何语言的运行环境,帮助我们顺利地使用多种语言来开发的我们的服务,最后 Docker 可以帮助我们更好地隔离开发环境和生产环境。</p>
|
||||
<p><strong>可以说 Docker 几乎满足了微服务的所有需求,Docker 为 DevOps 提供了很好的基础支撑。</strong></p>
|
||||
<p>这时的研发和运维都开始关注软件统一交付的格式和软件生命周期的管理,<strong>而不像之前一样研发只关注“打包前”,而运维只关注“打包后”的模式</strong>,DevOps 无论是研发环境还是生产环境都开始围绕 Docker 进行构建。</p>
|
||||
<p><img src="assets/Ciqc1F-uVmOASObQAAA7V7ib-l8145.png" alt="Drawing 9.png" /></p>
|
||||
<p><img src="assets/Ciqc1F-uVmOASObQAAA7V7ib-l8145.png" alt="png" /></p>
|
||||
<p>综上所述,微服务、Docker 与 DevOps 三者之间的关系,如上图所示。</p>
|
||||
<ol>
|
||||
<li>云平台作为底层基础,采用 Docker 技术将服务做容器化部署,并且使用资源管理和调度平台(例如 Kubernetes 或 Swarm)来自动化地管理容器。</li>
|
||||
@@ -219,18 +219,18 @@ function hide_canvas() {
|
||||
<h3>DevOps 工具介绍</h3>
|
||||
<p>工欲善其事,必先利其器,要想顺利落地 DevOps,工具的选择十分重要,下面我们来看下除了Docker 外还有哪些工具可以帮助我们顺利地构建 DevOps 平台。</p>
|
||||
<h4>Git</h4>
|
||||
<p><img src="assets/Ciqc1F-uVomAACq6AAGSnXiZ7Xg745.png" alt="Drawing 10.png" /></p>
|
||||
<p><img src="assets/Ciqc1F-uVomAACq6AAGSnXiZ7Xg745.png" alt="png" /></p>
|
||||
<p><a href="https://git-scm.com/">Git</a> 是一种分布式的版本控制工具, 是目前使用最广泛的 DevOps 工具之一。Git 相比于其他版本控制工具,它可以<strong>实现离线代码提交</strong>,它允许我们提交代码时未连接到 Git 服务器,等到网络恢复再将我们的代码提交到远程服务器。</p>
|
||||
<p>Git 非常容易上手,并且占用空间很小,相比于传统的版本控制工具(例如:Subversion、CVS 等)性能非常优秀,它可以帮助我们快速地创建分支,使得团队多人协作开发更加方便。</p>
|
||||
<p>目前全球最大的在线 Git 代码托管服务是 GitHub,GitHub 提供了代码在线托管服务,可以帮助我们快速地将 DevOps 工作流集成起来。除了 GitHub 外,还有很多在线代码托管服务,例如 GitLab、Bitbucket 等。</p>
|
||||
<h4>Jenkins</h4>
|
||||
<p><img src="assets/CgqCHl-uVpaAF5u_AACv-5xaZ1E856.png" alt="Drawing 11.png" /></p>
|
||||
<p><img src="assets/CgqCHl-uVpaAF5u_AACv-5xaZ1E856.png" alt="png" /></p>
|
||||
<p><a href="https://www.jenkins.io/">Jenkins</a> 是开源的 CI/CD 构建工具,Jenkins 采用插件化的方式来扩展它的功能,它拥有非常丰富的插件,这些插件可以帮助我们实现构建、部署、自动化等流程。它还拥有强大的生态系统,这些生态系统可以很方便地与 Docker 和 Kubernetes 集成。Jenkins 几乎可以和所有的 DevOps 工具进行集成。</p>
|
||||
<h4>Ansible</h4>
|
||||
<p><img src="assets/Ciqc1F-uVqKAHHhCAANJIGhWQ_A950.png" alt="Drawing 12.png" /></p>
|
||||
<p><img src="assets/Ciqc1F-uVqKAHHhCAANJIGhWQ_A950.png" alt="png" /></p>
|
||||
<p><a href="https://www.ansible.com/">Ansible</a> 是一个配置管理工具。Ansible 可以帮助我们自动完成一些重复的 IT 配置管理,应用程序部署等任务,还可以帮助我们放弃编写繁杂的 shell 脚本,仅仅做一些 YAML 的配置,即可实现任务下发和管理工作。并且 Ansible 的每一行命令都是幂等的,它允许我们多次重复执行相同的脚本并且得到的结果都是一致的。</p>
|
||||
<h4>Kubernetes</h4>
|
||||
<p><img src="assets/CgqCHl-uVqmABoq8AAEeX_9ee0Y690.png" alt="Drawing 13.png" /></p>
|
||||
<p><img src="assets/CgqCHl-uVqmABoq8AAEeX_9ee0Y690.png" alt="png" /></p>
|
||||
<p><a href="https://kubernetes.io/">Kubernetes</a> 是当前最流行的容器编排工具之一,Docker 帮助我们解决了容器打包和镜像分发的问题,而 Kubernetes 则帮助我们解决了大批量容器管理和调度的问题,它可以打通从研发到上线的整个流程,使得 DevOps 落地更加简单方便。</p>
|
||||
<h3>结语</h3>
|
||||
<p>DevOps 虽然已经被提及很多年,但是一直没有很好的落地,直到 2013 年 Docker 的诞生,才使得 DevOps 这个理念又重新火了起来,因为 Docker 为我们解决了应用的构建、分发和隔离的问题,才使得 DevOps 落地变得更加简单。</p>
|
||||
|
||||
Reference in New Issue
Block a user