- 介绍
- 安装配置
- 注意事项
- yum安装
- 验证安装
- 配置
- host配置
- 主机清单配置
- 主控端
- 被控端
- 常用模块
- 命令组成
- command模块
- shell模块
- copy模块
- script模块
- 日志信息
- 最后
介绍
-
Ansible 是一个开源 IT 自动化引擎,可自动执行供应、配置管理、应用程序部署、编排和许多其他 IT 流程。它可以免费使用,并且该项目受益于数千名贡献者的经验和智慧。
-
红帽® Ansible 自动化平台将十多个上游项目整合到一个统一的、安全性强化的企业平台中,以实现任务关键型自动化。它建立在开源项目的基础上,为跨职能团队创建端到端的自动化体验。
安装配置
注意事项
- ansible的安装主机一般称为主控端,中控,master或堡垒机
- ansible 2.4版本开始,主控端Python版本需要2.6或以上(CentOS 5 Python版本为 2.4.3)
- 被控端Python版本小于2.4的,需要安装python-simplejson
- 被控端如开启SELinux需要安装libselinux-python
- windows不能做为主控端
- ansible不是服务,只在需要的时候启动(本质是Python脚本)
yum安装
- epel-release
yum install epel-release -y
- ansible
yum install ansible -y
验证安装
ansible --version
配置
- 去配置目录,会有三个文件
cd /etc/ansible/
- 配置 ansible.cfg
vim /etc/ansible/ansible.cfg[defaults]
#inventory = /etc/ansible/hosts # 主机列表配置文件
#library = /usr/share/my_modules/ # 库文件存放目录
#remote_tmp = $HOME/.ansible/tmp # 临时py命令文件存放在远程主机目录
#local_tmp = $HOME/.ansible/tmp # 本机的临时命令执行目录
#forks = 5 # 默认并发数,同时可以执行5次
#sudo_user = root # 默认sudo 用户
#ask_sudo_pass = True # 每次执行ansible命令是否询问ssh密码
#ask_pass = True # 每次执行ansible命令是否询问ssh口令
#remote_port = 22 # 远程主机的端口号(默认22)# 建议调整项
host_key_checking = False # 检查对应服务器的host_key,建议取消注释
log_path=/var/log/ansible.log # 日志文件,建议取消注释
module_name = command # 默认模块,可以改为shell
host配置
主机清单配置
主控端
- IP:11.0.1.141
- 执行命令生成:
ssh-keygen -t rsa
- 一直按默认的执行
- 在该目录存在文件:/root/.ssh
被控端
- IP:11.0.1.150、11.0.1.151、11.0.1.152
- 上传公钥至被控机器
ssh-copy-id -i /root/.ssh/id_rsa.pub root@11.0.1.151
ssh-copy-id -i /root/.ssh/id_rsa.pub root@11.0.1.152
ssh-copy-id -i /root/.ssh/id_rsa.pub root@11.0.1.153
- root@11.0.1.151 被控机的账号@IP
- 输入密码信息
ansible "*" -m ping # (*表示所有主机)
ansible 192.168.1.* -m ping
ansible "*srvs" -m ping
常用模块
命令组成
ansible <host-pattern> [-m module_name] [-a args]
ansible +被管理的主机(ALL) +模块 +参数--help 显示帮助--version 显示版本-m module 指定模块,默认为command-v 详细过程 –vv -vvv更详细--list-hosts 显示主机列表,可简写 --list-k, --ask-pass 提示输入ssh连接密码,默认Key验证-C, --check 检查,并不执行-T, --timeout=TIMEOUT 执行命令的超时时间,默认10s-u, --user=REMOTE_USER 执行远程执行的用户-b, --become 代替旧版的sudo切换--become-user=USERNAME 指定sudo的runas用户,默认为root-K, --ask-become-pass 提示输入sudo时的口令
command模块
- 默认模块,支持简单的linux命令,不支持管道、重定向等,不建议使用
ansible k8s -m command -a "pwd"
ansible k8s -m command -a "echo testa|grep a" #这个不能正常使用
ansible k8s -m command -a "echo bb >>/tmp/testansible" #重定向也无法正常使用
shell模块
ansible k8s -m shell -a "echo testa|grep a" #支持管道
ansible k8s -m shell -a "echo bb >>/tmp/testansible" #支持重定向
ansible k8s -m shell -a "cat /etc/passwd|awk -F':' '{print \$1}'" #遇到特殊符号需要加入\转义,这样子ansible才能正常运行
copy模块
- 从ansible主控机复制文件到目录到远程主机,常用参数:
src:源文件/目录
dest:指定目标路径
mode:设置权限
backup:备份源文件
content:代替src,将本机指定内容传至远程主机并生成目标文件
# src指定本地文件,dest指定远程主机目录或者文件
ansible k8s -m copy -a "src=/home/ansible/ansible.txt dest=/home/ansible/"
- 拷贝文件夹
ansible k8s -m copy -a "src=/home/ansible/ dest=/home/" #ansible文件夹没拷贝
ansible k8s -m copy -a "src=/home/ansible dest=/home/" #ansible文件夹拷贝了
script模块
- 在远程主机上运行ansible服务器上的脚本,优点是不需手动传送脚本至每个服务器。
- 其实是ansible自动传到远程主机、执行然后再删除脚本,即copy+shell+delete
ansible k8s -m script -a "/home/ansible/test.sh"
日志信息
- 之前配置的ansible日志目录
- log_path=/var/log/ansible.log # 日志文件,建议取消注释
最后
- 之前运维多台主机的时候都是挨个执行命令,可能主机只有几台,但是还是感觉有些许重复的操作,现在通过ansible主控操作,效率提升,还在主动探索中。。。