查看原文
其他

DevOps中,你是否漏了这一环?

运维研习社 运维研习社 2022-11-05


现代软件开发对基础设施的管理提出了更苛刻的要求。产品要适应瞬息万变的市场,要求基础设施要有更快的响应速度。而持续交付和DevOps的推行要求产品团队对部署和运维要有更高的自主性。技术的快速进步和演化,也使得基础设施的配置不得不频繁变化。在这种快速变化的过程中,要求基础设施既要灵活,也要安全、可靠。


所以衍生出基础设施即代码,通过标准化、自动化、可视化的方式实现基础设施的再生性、一致性、可见性及快速反馈


除了我们业务应用、生产环境中的基础设置,开发环境也是最容易被忽视的基础设施

我们都应该遇到过上面的场景,即构建本地开发环境中通常会遇到的问题:

  • 构建环境需要花费一定的时间和精力

  • 环境难以共享

  • 环境难以掌握

  • 环境难以维护

所以我们需要将开发环境代码化,通过DSL的方式,将环境通过代码的方式进行管理和描述,统一项目团队成员之间的开发环境,提高环境构建效率,降低环境维护难度


本篇文章主要通过Vagrant+Hyper-v来构建一个Django框架的CMDB的开发环境

环境如下:

  • CentOS 7

  • Python3.6

  • Redis

  • rabbitmq

  • Mysql

接着就一步步介绍



Hyper-v

Hyper-v是微软的虚拟化产品,是微软提出的一种系统管理程序虚拟化技术,能够实现桌面虚拟化


毕竟是微软自带的,使用起来,不管是兼容性,还是资源占用等,相比virtualbox、VMware来说Hyper-v都要更好一些,并且win10自带,直接开启即可


在win10的程序和功能——启用或关闭windows功能中勾选Hyper-V,确定安装即可

之后需要重启电脑,重启后即可在开始菜单中找到Hyper-V管理器

这样Hyper-V就准备好了,接着就可以开始Vagrant



Vagrant


vagrant官网地址:https://www.vagrantup.com


引用官网地址介绍,Vagrant is a tool for building and managing virtual machine environments in a single workflow. With an easy-to-use workflow and focus on automation, Vagrant lowers development environment setup time, increases production parity, and makes the "works on my machine" excuse a relic of the past.


Vagrant就是在单个工作流中构建和管理虚拟机环境的工具,降低开发环境的设置时间,增加生产等价性,即环境一致性,让开发的那句“在我电脑上是正常的”成为过去


Vagrant可以安装在linux、windows、mac OS平台,并且支持virtualBox、VMware、AWS、Hyper-v或其他自定义的服务上提供服务,在编排中支持的shell、chef、puppet、ansible等,可以应用在整个DevOps流程中



安装很简单,首先从官网下载vagrant,直接打开安装包安装即可


重启就安装好了


先了解下Vagrant命令

Vagrant的help中,对命令的解释已经很详细了,就不做过多解释了,如果不太明白,可以官网文档中看下,很详细



通过vagrant创建虚拟机,需要先导入镜像文件,也就是box,默认存储在用户家目录的.vagrant.d下面,windowx系统在C:\Users\用户名\.vagrant.d

因为镜像文件还挺大的,C盘资源稀缺,所以最好通过设置环境变量VAGRANT_HOME来将该目录改到其他存储位置,设置环境变量如下

注释:.vagrant.d这个目录不是必须这么命名,这里是为了统一

设置好位置后,开始下载镜像,玩过docker都知道,docker run的时候,会先本地查找镜像是否存在,如果不存在,就会从远程仓库下载对应的镜像,Vagrant一样的,当box不存在时,会先从网上下载,缓存到上面设置的家目录中



Vagrant镜像目录:https://app.vagrantup.com/boxes/search


需要使用Vagrant镜像,可以从上面的目录中查找,默认官网的镜像下载较慢,这里介绍两个常用Linux镜像下载地址

CentOS:http://cloud.centos.org/centos/
Ubuntu:http://cloud-images.ubuntu.com/


找到合适的镜像之后,我们就可以下载镜像(box)了,我们先查看当前的box

当前没有box,接着我们用提示的命令vagrant box add来添加镜像

通过指定box的地址进行下载,并通过--name指定存储的名称,如果镜像下载慢,可以先将box下载到本地,再通过指定本地路径的方式添加box

添加完成后,再查看box


现在我们通过改box新建一个虚拟机

init只为我们创建了Vagrantfile文件,看下Vagrantfile文件内容


因为Vagrant是Ruby写的,所以Vagrantfile也沿用了Ruby语法,但是不用担心不会Ruby无法配置Vagrantfile,先简单解释下上面三行内容


首尾两行组成了一个代码块,中间部分就是可以配置的内容部分,首行中的configure中的数字是配置文件的版本号,Vagrant根据这个版本号来判断配置语法,这个不需要改动


中间部分的配置虚拟机的共享目录,第一个参数“.”是主机实际路径(相对路径),第二个是虚拟机上用于安装文件的路径,后面是文件传输方式等参数,具体可以参考官方文档,更多的参数后面再介绍



先来了解一下Vagrant基本操作,刚才通过vagrant ini初始化了centos-7的虚拟机,在这个基础上,先看一波基础操作

启动

在Hyper-v管理器中查看

启动过程中,可以看到分配的ip地址,已经ssh登录的方式,这里是通过私钥的方式登录

查看虚拟机状态:vagrant status

连接虚拟机:vagrant ssh

vagrant ssh命令直接通过私钥连接到虚拟机,是通过vagrant用户,可以通过sudo -i切换到root用户,没有密码

停止虚拟机:vagrant halt

查看虚拟机状态

暂停虚拟机:vagrant suspend

查看虚拟机状态

恢复虚拟机:vagrant resume

重载虚拟机:vagrant reload

删除虚拟机:vagrant destroy

查看虚拟机状态



结合最初的开发环境要求,配置vagrantfile如下:

很简单的,因为我这里对虚拟机没有要求,所以config中不需要改动配置,我直接添加了一段provision,provision是指在虚拟机创建的时候,Vagrant自动去执行的构造任务,比如安装软件,部署服务等,可以发现vagrantfile和dockerfile特别相似


我这里provision使用的是一个shell脚本,通过变量$scritp去传入,$script我在后面进行了定义,其实就是所有需要执行的shell命令


provison支持非常丰富,如图:

所以我们可以通过provision定义你想做的任何操作,而且不需要重新构建vagrant,vagrant有provision专有命令vagrant provision会重新触发定义好的provision来完成构建任务


vagrant由于内容很多,这篇文章抛砖引玉的带大家对Vagrant有一个初步的了解,后面会继续深入去介绍Vagrant更多进阶内容及使用场景


很多人会拿vagrant和docker做对比,这里我也说一下自己对这两者的看法


vagrant和docker,乍一看,确实很多内容是重叠的,甚至连编排文件的配置方式都有点类似,但是vagrant更像是一个虚拟机的plugin,它本身不提供虚拟化,只是通过它,你可以结合虚拟机之类的服务,来提供Iaas的环境,对于开发来说,它可以提供更简便的、更快速、可视化的项目开发环境搭建方式,而docker,更多的是项目的运行环境


试着想象这样一个场景,在公司所有的项目仓库中,都配置vagrantfile,不管是项目交接,还是新人上项目,拉到代码的同时,就可以通过vagrantfile快速构建完成开发环境……


话题

看完文章,你觉得Vagrant有必要吗?


欢迎文末留言




运维技术交流群

「运维研习社」建立了运维技术交流群,大家可以添加小编微信进行加群。欢迎有想法、乐于分享的朋友们一起进群交流学习。


扫描添加好友邀您进运维交流群


漫画Nginx的subfilter

没有lrzsz怎么传文件到服务器

如何做Nginx安全日志可视化?

Nginx负载均衡配置误区



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存