Ansible简介
Ansible:自动化运维工具,基于python编写,可用于执行批量操作
具有两种特性:
1.Agentless: 没有Agent的存在,即不需要在目标主机(被控制端)上安装任何软件。仅需通过SSH连接客户机执行任务即可
2.幂等性:所谓幂等性就是无论执行多少次同样的操作结果都是一样的。
Ansible基本概念
1.inventory:主机清单,用来声明要远程操作的主机
2.modules(重要): ansible执行命令的各个功能模块
3.api:供第三方应用程序调用的编程接口
4.playbook(重要):基于yaml格式的文本文件,用于定义和描述一系列任务
Ansible基本命令格式
直接调用某个模块的命令:
ansible 主机组名 -m 模块名 -a "参数"
调用剧本的命令
ansible-playbook 剧本名
Ansible常用模块
所有模块的详细参数在官网有详细的解释,在此不做赘述
详细参考:
【Ansible自动化运维工具 1】Ansible常用模块详解(附各模块应用实例和Ansible环境安装部署)_ansible自动化运维实例-CSDN博客
1.command模块
默认模块,在远程主机执行命令,注意:command模块不支持管道符和重定向符。
2.shell模块
常用参数 | 功能 |
---|---|
chdir | 在远程主机上运行命令前,提前进入目录 |
creates | 判断指定文件是否存在,如果存在,不执行后面的操作 |
removes | 判断指定文件是否存在,如果存在,执行后面的操作 |
和command模块类似,在远程主机执行命令,相当于远程调用shell进程,支持管道符和重定向符。
3.script模块
在远程节点上运行本地脚本。
4.copy模块
批量分发文件
5.yum/apt模块
在远程主机通过yum/apt方式安装软件
6.service模块
管理服务
注意:有个模块叫systemd,是系统服务管理模块,但是昨天用它来启动服务一直报错,用service却不会,不知道什么原因,查看官方文档没有相应的参数。
Ansible剧本的简单使用
剧本是ansible中一个重要的概念,通过编写剧本可以实现复杂的操作,下面以批量安装docker-ce来实例(虽然可能不实用),主要学习yaml文件的格式。
想要实现剧本,首先得要知道手工实现的流程,然后通过yaml格式来进行记录流程,去华为云镜像官网查看安装docker-ce的安装流程
剧本的大致格式如下:
一定要注意缩进关系,缩进关系代表了层级关系,yaml文件一般缩进两个空格.
一个tasks中可以调用多个模块,一个tasks中不是只有一个模块.
- name: 随意名称
tasks: #任务1
- name: 随意名字
yum: #这是要调用的模块的名字
name: nginx #这是模块的参数
state: present
tasks: #任务2
......
tasks: #任务3
......
由图可知,安装daocker-ce大致有以下流程:
1.卸载原有的docker组件
2.下载一些必要软件包
3.下载源文件.repo并对内容进行替换
4.重新构建yum源并安装
完成上述操作后我们只是进行了一个最基础的安装,还没有修改docker的拉取源,所以我们还需要改一下配置文件,在这里我直接把本地改好的进行分发.
5.分发配置文件,启动docker并设置开机自启.
完整剧本如下:
---
- name: 安装docker
hosts: docker_hosts
tasks:
- name: 开始卸载
yum: #调用yum模块
name:
- docker
- docker-common
- docker-selinux
- docker-engine
state: absent
- name: 开始安装
yum: #调用yum模块
name:
- yum-utils
- device-mapper-persistent-data
- lvm2
- wget
state: present
tasks:
- name: 开始下载文件
shell: #调用shell模块
chdir: /etc/yum.repos.d
cmd: wget https://mirrors.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo
shell: #调用shell模块
cmd: sudo sed -i 's+download.docker.com+mirrors.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
- name: 安装docker
shell: #调用shell模块
cmd: yum makecache fast && yum -y install docker-ce
- name: 写入配置文件
copy: #调用copy模块将本地配置文件分发到目标主机
src: /etc/docker/daemon.json
dest: /etc/docker/daemon.json
- name: 服务自启动
service: #调用service模块启动docker并设置开机自启
name: docker
state: restarted
enabled: true
我的 /etc/docker/daemon.json文件如下所示,
{
"insecure-registries": ["119.3.224.205:5000"]
}
因为最近docker hub无法访问,我用的其他镜像也无法访问,所以构建了一个本地镜像,我把它放到了服务器上面,可以通过以下命令查看包含哪些镜像:
curl -XGET 119.3.224.205:5000/v2/_catalog
结果如下:
运行剧本
注意:剧本名要以 .yaml或者.yml结尾.
ansible-playbook 剧本名称
运行结果如下: