批量部署工具ansible 极简入门——基于docker运行
- 动机:
- 一:简介
- 二:安装
- 三:配置
- 四:常用模块介绍
)
动机:
在开发或者运维过程中, 难免会遇到经常要部署文件的烦恼,特别是有多台主机的情况;如何快速有效的进行多台设备的开发部署以及运维就显得至关重要。(总不可能一台一台的部署吧。。。慢而且容易出错)。 网上搜罗了一下,发现ansible是一个比较好用的工具,遗憾的是只支持Linux平台,又不想装虚拟机那么笨重的东西(其实是自己C盘被塞满了。。。), 怎么办呢,那就用Docker吧。Docker优点太多了就不罗嗦了,直接走起!
一:简介
- 术语介绍:
- 控制节点(Control node)
- 说白了就是我们的电脑,里面运行着ansible
- 受控节点(Managed nodes)
- 也就是我们要批量部署的主机
- 清单(Inventory)
- 受控节点的列表; 一般在 /etc/anaible/hosts文件,也可通过修改配置文件(/etc/ansible/ansible.cfg)指向自定义的任意名称的主机列表文件(只要符合ansible编写规则即可)
- 模块(Modules)
- ansible工作的核心,它是依靠各个模块进行工作的,比如常见的复制文件、拉取文件或批量执行命令等
- 任务(Tasks)
- 构成剧本的基础单元
- 剧本(Playbooks)
- 可以理解为脚本化运行的运维任务,由task构成; 目前的工作中没有用到这个,后期用会再更新
- 管理主机的两种方式
- 通过命令行方式(Ad-hoc command)。缺点就是不能保存命令,当然也可以把命令记到笔记里去。(目前我就是这么做的。。。)
- 通过脚本语言方式(playbook)。面对复杂多变的运维任务时,可以轻松的应对;目前我工作中还没遇到,所以在这就不分(误)享(导)了
二:安装
- docker-desktop安装
- 官网下载, 然后全部点下一步下一步就好了(C不C盘的无所谓的,介意的话自己改一下安装路径)
注意:
- 如果电脑有virtualbox或VMware虚拟机的,注意要卸载掉
- Docker需要WSL2支持, 最好更新一下Windows,然后安装WSL2更新 - 安装好docker-desktop之后,就可以在powershell中运行docker命令了
- Portainer镜像拉取/运行
- portainer是一个可视化的容器管理工具,可以方便的在里面管理镜像(直接用就行了,按照里面的提示来), 官方安装教程
//创建数据卷
docker volume create portainer_data
//拉取并运行(访问docker hub有时候可能会很慢,可以考虑切换成国内源或者科学上网)
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
// 在浏览器运行本地的9000端口
http://localhost:9000/
安装完成之后就可以看到portainer界面了
- Ubuntu18.04 docker安装
//拉取Ubuntu镜像(速度慢的话建议改成国内源或者科学上网)
docker pull ubuntu:18.04
安装完成后,即可在portainer管理界面中看到刚刚拉取的ubuntu 镜像image
- ubunt 镜像运行
// 把本地文件夹you_local_dir映射到Ubuntu中的文件夹ubunt_named_dir, LANG=C.UTF-8设置可以使得容器中能输出中文
$ docker run -d -it -v you_local_dir:/ubunt_named_dir -w /ubunt_named_dir -p 4005:4005 --restart=always --name ubuntu ubuntu:18.04 env LANG=C.UTF-8 /bin/bash
执行完成之后,ubuntu容器就生成了,可以在portainer中进入Ubuntu console
点击connect
进入bash命令行
- ansible安装
Ubuntu安装ansible
打开Ubuntu console
$ sudo apt update
$ sudo apt install software-properties-common
$ sudo add-apt-repository --yes --update ppa:ansible/ansible
$ sudo apt install ansible
// 安装完成后,直接输入ansible命令,如果能出来帮助信息就说明安装成功了
$ ansible
其他的系统可以参考官方教程;
三:配置
anisble 默认的主机清单是 /etc/ansible/inventory文件, 为了方便我们后期修改维护主机清单, 我们可以指向主机文件到我们的本地磁盘的文件
- 修改配置
$ nano /etc/ansible/ansible.cfg
//修改其中的inventory文件路径,如下图所示
//文件的完整路径是Ubuntu的ubunt_named_dir路径,跟you_local_dir相对应
- 主机列表文件
示例文件如下图所示,配置文件中的参数具体可参考ansible中文权威指南
四:常用模块介绍
- ping模块
- 作用:检查主机的连通性,类似于bash的ping命令,如果有主机掉线,会有返回提示fail的
- 示例
- copy模块
- 作用:复制文件/文件夹到主机列表中
- 示例
- Tips
发现了有趣的现象,如果待复制的文件和目标机的文件一致,则不会显示changed。 - copy命令也可以复制文件夹,只要把src改成路径就可以了(不指定文件名), 其他的参数可以查官方文件,这里就不一一介绍了
- command模块
- 作用:远程批量命令
- Tips:不要在command模块中运行阻塞命令,否则ansible无法返回