Ansible简介
文章目录
Ansible 简介
ansible是基于Python开发,集合了众多运维工具(puppet、chef)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。最大的特点就是ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。
特点
- 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
- 默认使用SSH协议对设备进行管理;
- 有大量常规运维操作模块,可实现日常绝大部分操作;
- 配置简单、功能强大、扩展性强;
- 支持API及自定义模块,可通过Python轻松扩展;
- 通过Playbooks来定制强大的配置、状态管理;
- 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
- 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。
任务执行方式
-
ad-hoc模式(点对点模式)
使用单个模块,支持批量执行单条命令。ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令。就相当于bash中的一句话shell。
-
playbook模式
是Ansible主要管理方式,也是Ansible功能强大的关键所在。playbook通过多个task集合完成一类功能.比如我们拷贝一个文件到主机,然后授予权限,然后启动程序这几个步骤结合在一起
Aansbile 文件和命令
- ansible.cfg
1 inventory = /etc/ansible/hosts #这个参数表示资源清单inventory文件的位置
2 library = /usr/share/ansible #指向存放Ansible模块的目录,支持多个目录方式,只要用冒号(:)隔开就可以
3 forks = 5 #并发连接数,默认为5
4 sudo_user = root #设置默认执行命令的用户
5 remote_port = 22 #指定连接被管节点的管理端口,默认为22端口,建议修改,能够更加安全
6 host_key_checking = False #设置是否检查SSH主机的密钥,值为True/False。关闭后第一次连接不会提示配置实例
7 timeout = 60 #设置SSH连接的超时时间,单位为秒
8 log_path = /var/log/ansible.log #指定一个存储ansible日志的文件(默认不记录日志)
- inventory 文件
不分组
1IP1
2IP2
OR 主机组
1[HOSTGRUPXX]
2IP1
3IP2
- 命令
1/usr/bin/ansible Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行
2/usr/bin/ansible-doc Ansible 模块功能查看工具
3/usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块 的官网平台,基于网络的
4/usr/bin/ansible-playbook Ansible 定制自动化的任务集编排工具
5/usr/bin/ansible-pull Ansible远程执行命令的工具,拉取配置而非推送配置(使用较少,海量机器时使用,对运维的架构能力要求较高)
6/usr/bin/ansible-vault Ansible 文件加密工具
7/usr/bin/ansible-console Ansible基于Linux Consoble界面可与用户交互的命令执行工具
8
9其中,我们比较常用的是/usr/bin/ansible和/usr/bin/ansible-playbook。
- 例子
这个例子非常的简单,就拷贝ssl证书和nginx配置文件到nginx目录下面,然后启动nginx
命令
1ansible-playbook -u root -i myinventory --private-key ${var.ssh_key_private} -T 300 provision.yml
myinventory 文件
1[hostgroup]
2192.168.25.10
3192.168.25.11
provision.yml 文件
1---
2 - hosts: docker
3 remote_user: root
4 become: yes
5 become_method: sudo
6 vars:
7
8 tasks:
9 - name: mkdir
10 shell: |
11 rm -rf /opt/cert/hoyimall
12 rm -rf /etc/nginx/nginx.conf
13 mkdir -p /opt/cert/xxx
14 mkdir -p /opt/nginx/logs
15 - name: copy nginx conf to remote
16 copy:
17 src: /opt/nginx_test/xxx/nginx.conf
18 dest: /etc/nginx
19 - name: copy key to remote
20 copy:
21 src: /opt/cert/xxx/5529587__xxx.com.key
22 dest: /opt/cert/xxx
23 - name: copy pem to remote
24 copy:
25 src: /opt/cert/xxx/5529587__xxx.com.pem
26 dest: /opt/cert/xxx
27 - name: restart
28 shell:
29 systemctl restart nginx
shell/copy 就是ansible 的module
总结
1: 优势比我们自己写shell更加简洁和方便,ansible提供了非常多的模块帮助我们不用再写shell
2: 对用户和主机组的管理非常简单
3: 不需要在客户端安装agent,所有的操作就是基于SSH
4: ansible tower这样的可视化后台的支持,非常简洁