如果你正在学习或刚开始接触DevOps和基础设施自动化,这篇文章将帮助你详细了解不可变基础设施(Immutable infrastructure)模型。,在进入技术解释之前,首先,你应该对可变和不可变这两个词的字面意思有一个清晰的认识。,现在让我们看一个真实世界的例子,即一所房子。在一所房子里,有一些你可以改变的对象(可变的),也有一些必须被替换的对象(不可变的),如果它们发生了什么变化。例如,你可以给一扇门涂上不同的颜色,更换门把手,给它一个不同的外观。在这里门是一个可变的对象。同时,一个洗脸盆是一个不可变的对象。如果你想改变脸盆的颜色,你需要用一个新的脸盆来替换它。这一点也适用于地砖。,在IT界,我们在软件工程和DevOps中都有可变性和不可变性的概念。在软件工程中,这一概念被应用于面向对象的编程,而在DevOps中,它被应用于基础设施自动化。在本指南中,我们将从DevOps的角度重点讨论不可变的基础设施。,要理解不可变的基础设施,首先,你应该知道服务器的生命周期。,下面是一个带有应用程序的服务器的简略的生命周期(仅供参考,各组织的流程有所不同)。,正如你所看到的,上面提到的步骤是一个可变的模型。这是因为我们正在根据要求对服务器进行修改。因此,当你使用Ansible、Puppet或Chef等配置管理工具来管理服务器时,你遵循的是可变模式。,「不可变」,就像它的字面意思一样,不可变的基础设施是一个概念,在你部署服务器之后,你不会对它做任何改变。意思是说,服务器在部署的时候已经预先配置好了配置、安装好了工具和应用程序。服务器出现的那一刻,应用程序就开始运行。,如果您想进行任何更改,则应销毁现有服务并用新服务替换。更改可能是打补丁、应用程序升级、服务器配置更改等。,图片,你可以为大多数现代应用遵循不可变的基础设施模型,包括数据库集群。,例如,如果你有应用程序在自动缩放组中运行,而你遵循的是不可变的服务器部署模型。每当你想部署新的代码时,你需要销毁现有的虚拟机,这样由自动缩放启动的新虚拟机就会下载最新的代码。另一种方法是,你需要用带有代码的最新镜像来改变启动模板。,在一个不可变的模型中,在配置方面应遵循标准的最佳实践。,例如,使用配置存储或服务发现工具,将经常改变的配置外部化。一个典型的例子是Nginx的upstream配置。,这样一来,你就不必为小的变化和配置而重新生成服务器。,如果你知道容器,它是不可变基础设施的最好例子。除了外部化的配置,对容器的任何改变都会导致重建。,那么,不可变的基础设施模式如何用在CI/CD过程?,当你在虚拟机环境的CI管道中遵循不可变的基础设施模式时,可部署的工件将是一个虚拟机镜像或一个docker镜像。,例如,一旦CI完成,利用Docker或packer等工具,你可以把程序代码塞到容器或虚拟机镜像(AWS AMI)中,并使用它在相关环境中进行部署。,当涉及到部署时,你可以遵循蓝绿部署或金丝雀部署。让我们来看看这两种方法。,在不可改变的基础设施模型中,虚拟机或容器镜像的创建和修补起到了关键作用。你需要利用CI/CD工具,制定良好的镜像生命周期管理。,在云和容器环境中,首先我们需要一个基础镜像。之后基于这个基础镜像创建应用镜像。在实际的项目环境中,这个过程会比较复杂。,下面我们来聊一下这一切在实际项目环境中是如何发生的,以及如何根据公司的安全策略建立应用程序镜像。,因此,这里列出了在安全的项目环境中遵循的通用镜像生命周期管理(虚拟机和容器)步骤。,图片,我们已经看了不可变的基础设施的关键概念。,作为一名DevOps工程师,你应该在构建和部署不可变镜像时遵循所有标准的最佳实践,以减少攻击面。,如果你正在使用容器或容器编排工具(如Kubernetes),你已经在遵循应用程序部署的不可变模式。
文章版权声明
1 原创文章作者:cmcc,如若转载,请注明出处: https://www.52hwl.com/27413.html
2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈
3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)
4 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别