Ansible -- 自动化运维
官网:https://www.ansible.com/
Github:https://github.com/ansible/ansible
历史:美国人Michael DeHaan 于 2012年创始Ansible,2015年被Red Hat收购
特征:无客户端程序,通过ssh通信,易用性高,效率较低
同类产品:Puppet、Chef、SaltStack
概念:
EPEL:(Extra Packages for Enterprise Linux,是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包
YAML:YAML Ain’t Markup Language,Clark Evans在2001年发表了这种语言
管理机安装
0、前提是控制机和客户机都已安装Python,检查 python -V
1、添加yum 源,选好对应的版本
vim /etc/yum.repos.d/ansible
[epel] # 先检查/etc/yum.repos.d是否已经配置了epel源,没有才需要者段
name = all source for ansible
baseurl = https://mirrors.aliyun.com/epel/7/x86_64/
enabled = 1
gpgcheck = 0
[ansible]
name = all source for ansible
baseurl = http://mirrors.aliyun.com/centos/7.5.1804/os/x86_64/
enabled = 1
gpgcheck = 0
2、yum clean all;yum install ansible -y
配置
/etc/ansible/ansible.cfg
forks = 4 # 最大进程数,一般设为cpu核数 * 2
/etc/ansible/hosts
添加客户机,可以分组
172.31.171.139
[group1]
172.31.171.140
步骤
1、建立互信
生产密钥对:ssh-keygen -t rsa -P '' // 存放在~/.ssh/,-t 加密类型,-P私钥口令
发送公钥:ssh-copy-id -i ~/.ssh/id_rsa.pub root@xx.xx.xx.xx // 追加到远程主机的 ~/.ssh/authorized_key上
2、连接测试:ansible all -m ping # 使用ping模块
3、执行ad-hoc命令,即单次命令,相对于playbook而言
命令的一般格式为:ansible 目标机表达式 -m 模块 -a '参数'
不指定模块时,默认模块为command,不能带参数;可以改用shell模块,可以带参数
目标机表达式:*(通配),:(和)
常用模块
模块列表:https://docs.ansible.com/ansible/latest/modules/modules_by_category.html
除了Command和Shell,其他模块的参数都是 key=value格式
Shell 模块:ansible all -m shell -a 'cat temp.txt'
Copy模块:ansible all -m copy -a 'src=./temp.txt dest=temp.txt' # 把管理机的文件拷贝到客户机
File模块:ansible all -m file -a 'path=/etc/foo.conf owner=foo group=foo mode=0644' # 设置文件权限
playbook
---
- hosts: all
remote_user: root
sudo: yes
vars: # 定义变量,可在模板和参数中通过{{}}引用
port: 80
max: 200
tomcat: # 通过{{tomcat[0]}} 引用
- 127.0.0.0
- 127.0.0.1
tasks:
- name: push temp # 用于控制台显示
template: src=temp.txt dest=temp1.txt # 模块名:参数
ignore_errors: True
when: port > 80 # 满足条件时,才执行这个task
notify: # 给客户机推送的文件和上次不一样时,才通知执行name为restart apache的handler
- restart apache
handlers: # 由notify触发,只会触发一次
- name: restart apache
service: name=apache state=restarted # service模块用于启停服务
执行playbook:
ansible-playbook playbook.yml
ansible-playbook install.yml -k -K //没有互信,要-k输入密码。没有sudo NOPASSWD,要-K 输入 root密码
整合Jenkins
让ansible控制机,作为Jenkins的从节点;在任务的Post Steps中调用ansible命令