概述
Ansible是一种自动化运维管理工具,无需安装客户端,通过SSH协议与节点通信。
架构
由上图可以看出Ansible由5个部分组成
- Ansible:核心
- Inventory:定义管理主机的清单
- Modules:包括Ansible自带的核心模块及自定义模块
- Playbooks:Ansible的配置,部署和编排语言(YAML格式)
- Plugins:完成模块功能的补充,包括连接插件、邮件插件
安装
yum install ansible or pip install ansible
在管理节点上python要大于等于2.4,如果远端节点python版本小于2.5,需要安装python-simplejson
如果远端节点开启了SELinux,copy/file/template等相关模块必须在远端节点安装了libselinux-python后才能使用
配置
配置文件:/etc/ansible/ansible.cfg
[defaults] inventory = /etc/ansible/hosts # 清单文件 forks = 5 # 设置多少进程数与远端节点通信 sudo_user = root # sudo用户 remote_port = 22 # SSH端口号 role_path = /etc/ansible/roles # roles的目录,多个目录以冒号分隔 host_key_checking = True # 第一次执行时是否忽略主机SSH KEY验证 remote_user = root # 远端执行用户
清单
默认清单为/etc/ansible/hosts,-i <path>选项可以指定其它清单,[]里面定义Groups,下面是Hosts
[webservers]
foo.example.com
bar.example.com
[dbservers]
one.example.com
two.example.com
主机名alias,主机静态IP,主机ssh密码(不安全,建议使用SSH keys)
[test] node1 ansible_host=192.168.0.100 ansible_ssh_pass="password" node2 ansible_host=192.168.0.101 ansible_ssh_pass="password"
OR
[test] 192.168.0.100 192.168.0.101 [test:vars] ansible_port=22 ansible_user=xxx ansible_ssh_pass=xxx ansible_become_method=sudo ansible_become=true ansible_become_pass=xxx
使用
1、Ad-Hoc Commands
ad-hoc command是一种快速执行的模式,且不会保存
2、Playbooks
Playbooks是完全不同于adhoc的执行模式,格式是YAML,每个playbook由一个或更多的'plays'组成
just one play:
--- - hosts: webservers remote_user: root tasks:- name: write the apache config file template: src=/srv/httpd.j2 dest=/etc/httpd.conf notify: - restart apache handlers: - name: restart apache service: name=httpd state=restarted
Basics
Hosts and Users
---
- hosts: webservers
remote_user: root
Tasks List
tasks: - name: make sure apache is running service: name=httpd state=started
Handlers: Running Operations On Change
notify:
- restart apache
handlers: - name: restart apache service: name=httpd state=restarted
执行Playbook
ansible-playbook playbook.yml
Usage
ansible
Usage: ansible <host-pattern> [options]
Options:
-a MODULE_ARGS # 模块参数 -m MODULE_NAME # 模块名
ansible-playbook
Usage: ansible-playbook playbook.yml Options: -C, --check # 不执行,只检查远端节点的状态值
-D, --diff # 使用文件,模板这些模块的时候,列出两个文件的不同之处,最好与--check结合使用 --syntax-check # 检查playbook的语法是否正确
ansible-doc # 查看模块的具体用法
Usage: ansible-doc [options] [module...] Options: -l, --list # 列出所有的模块 -v, --verbose # 输出更详细的模式