1、前提
ansible是一个配置管理和应用部署工具,功能类似于目前业界的配置管理工具Chef,Puppet,Saltstack。
2、实现功能
- 自动化部署应用
- 自动化管理配置
- 自动化的持续交付
- 自动化的(AWS)云服务管理。
3、业界产品对比
工具 | 语言 | 架构 | 协议 |
---|---|---|---|
Puppet | Ruby | C/S | HTTP |
Chef | Ruby | C/S | HTTP |
Ansible | Python | 无Client | SSH |
Saltstack | Python | C/S(可无Client) | SSH/ZMQ/RAET |
总结
python 入门速度快 有C/S模式支持异步 无client不能使用队列。
所以笔者个人认为 ansible 场景只适合小而美的场景!当然最近有也说Ansible 要出现C/S支持异步操作
4、如何安装ansible?
4.1 yum安装(CentOS/Redhat)
代码语言:javascript复制 yum install http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install ansible
4.2 apt-get安装(ubuntu)
代码语言:javascript复制 sudo apt-get install software-properties-common
sudo apt-add-repository ppa:ansible/ansible
sudo apt-get update
sudo apt-get install ansible
5、ansible架构图
5.1 ansible-doc [模块名]
该命令就能列出 cron如何使用 帮助文档
代码语言:javascript复制ansible-doc -s cron
6、ansible 命令
代码语言:javascript复制ansible
#--- 单命令执行 ansible----
ansible-doc
# ----- 主要帮助文档----
ansible-playbook
# 自定义组合ansible 流程化执行ansible
ansible—galaxy
ansible-lint
ansible-pull
ansible-vault
7、Inventory Patterns
7.1 ansible 两个主要配置 文件
代码语言:javascript复制/etc/ansible/ansible.cfg
/etc/ansible/hosts
7.1.1 /etc/ansible/ansible.cfg
代码语言:javascript复制[defaults]
# hostfile = /etc/ansible/hosts
library = /usr/share/ansible
remote_tmp = $HOME/.ansible/tmp
pattern = *
forks = 5
poll_interval = 15
# sudo_user = ansible
sudo_user = root
# ask_sudo_pass = True
# ask_pass = True
transport = smart
remote_port = 22
remote_user = manage
module_lang = C
deprecation_warnings=False
7.1.2 /etc/ansible/hosts
代码语言:javascript复制[icp]
10.168.89.200
[mall]
10.251.255.221
[toc]
10.117.36.222
例:[toc] 代表这着组 批量调度的时候引用
8、ansible module
例:AD-HOC
代码语言:javascript复制ansible 主机或组 -m 模块名 -a '模块参数' ansible参数
8.1 commands类
代码语言:javascript复制1、command
2、shell
3、raw
4、script
归纳上面的几个命令的特点
代码语言:javascript复制raw 模块执行bash的结果在家目录
command 模块不支持管道
Script 模块输出的结果很让人心碎
shell很多地方和RAW类似,更多的地方建议使用shell和command模块。
但是如果是使用老版本python,需要用到raw,又或者是客户端是路由器
因为没有安装python模块,那就需要使用raw模块
8.2 ‘正确’的打开方式
代码语言:javascript复制command模块 [执行远程命令]
ansible huaishuo -m command -a 'uname -n'
script模块 [在远程主机执行主控端的shell/python脚本 ] (使用相对路径)
ansible huaishuo -m script -a '/tmp/hello.py'
shell模块 [执行远程主机的shell/python脚本 支持管道新版本支持通配符 元字符]
ansible huaishuo -m shell -a 'ls /tmp/huaishuo/{a1,a2}/*.log’
raw模块 [类似于command模块、支持管道传递 支持通配符 元字符]
ansible huaishuo -m raw -a "ifconfig eth0 |sed -n 2p |awk '{print $2 }'"
9、Module
代码语言:javascript复制ping
yum
setup
service
file
copy
cron
user_group
mount
get_url
fetch
9.1 常用的命令使用
代码语言:javascript复制service:
ansible huaishuo -a 'chkconfig --list'
ansible huaishuo -m service -a 'enabled=true name=httpd state=started'
ansible huaishuo -a 'chkconfig --list'
ansible huaishuo -a 'service httpd status'
cron:
ansible huaishuo -m cron -a 'minute="*/10" hour="0,2,3,4" job="/bin/echo hello ansible" name="test"'
user:
ansible huaishuo -m user -a "name=huaishuo password='123456'";
copy:
ansible huaishuo -m copy -a "src=/tmp/www/ dest=/tmp/www"
fetch
ansible huaishuo -m copy -a "src=/tmp/aaa.txt dest=/data/file/ flat=yes"
yum:
ansible huaishuo -m yum -a "name=git state=latest"
ansible huaishuo -m yum -a "name=git state=absent"
9.2 更多模块
超级全的模块类型及分类
https://docs.ansible.com/ansible/latest/modules/modules_by_category.html
官网
https://www.ansible.com
9.3 ansible-playbook setup_node_vpc.yml
代码语言:javascript复制- hosts: jichu ###### 执行组
remote_user: manage ###### 用哪个用户运行
gather_facts: True ######
tasks: ###### 任务开启
- name: create dir
shell: mkdir -p /usr/local/services/prometheus_exporters
- name: scp
copy: src=/alidata/ansible_yaml/node_exporter-0.14.0.linux-amd64.tar.gz dest=/usr/local/services/prometheus_exporters/node_exporter-0.14.0.linux-amd64.tar.gz owner=root
- name: unarchive
unarchive: src=/alidata/ansible_yaml/node_exporter-0.14.0.linux-amd64.tar.gz dest=/usr/local/services/prometheus_exporters
- name: run node_exporter
shell: nohup /usr/local/services/prometheus_exporters/node_exporter-0.14.0.linux-amd64/node_exporter &
分别执行下面三个命令
1、create 目录
2、从ansible服务器 复制文件给 目标机器
3、在目标机器解压
4、在目标机器执行命令
ps
另外推荐一下界面化ansible_tower