ansible自动化运维实战一
Posted zhang25yun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ansible自动化运维实战一相关的知识,希望对你有一定的参考价值。
1. Ansible简介:
Ansible是一款新兴的自动化运维工具,基于Python开发,实现了批量系
统配置、批量程序部署、批量运行命令等功能。
Ansible能够大大简化Unix管理员的自动化配置管理与流程控制方式。它利
用推送方式对客户系统加以配置,这样所有工作都可在主服务器端完成。
管理员可以通过命令行或者第三方集成软件来使用Ansible,运行Ansible的
服务器这里俗称“管理节点”;通过Ansible进行管理的服务器俗称“受控节
点”。权威媒体报道Ansible于2015年被Red Hat公司1.5亿美元收购,新版
Red Hat内置Ansible软件。
2. Ansible特点:
部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
有大量常规运维操作模块,可实现日常绝大部分操作;
配置简单、功能强大、扩展性强;
通过Playbook来定制强大的配置;
3. Ansible工作原理:
ansible要实现管理主机,需要满足以下两点:
主机清单中需要配置被管理主机的主机名或者ip;
要能够连上被管理主机(授权);
4. 部署ansible:
# 配置仓库:
yum install epel* -y
# 安装ansible:
yum install ansible -y
# 配置文件解读:
/etc/ansible/ansible.cfg,这是ansible默认配置文件:
[defaults]
# 主机清单文件
#inventory = /etc/ansible/hosts
# 库文件存放目录
#library = /usr/share/my_modules/
#module_utils = /usr/share/my_module_utils/
# 脚本在远程服务器执行的临时目录
#remote_tmp = ~/.ansible/tmp
# 脚本在本机执行的临时目录
#local_tmp = ~/.ansible/tmp
# 插件过滤配置文件
#plugin_filters_cfg = /etc/ansible/plugin_filters.yml
# 默认并发数
#forks = 5
# 定义多少时间回查一下任务的状态
#poll_interval = 15
# 默认用户
#sudo_user = root
# sudo用户是否需要输入密码
#ask_sudo_pass = True
# 每次执行都需要询问ssh密码
#ask_pass = True
# 自动选择传输方式,新版本默认使用openssh,老版本用patamiko
#transport = smart
# 远程服务器默认通信端口
#remote_port = 22
# 不检远程服务器的host_key
4.1 配置主机清单:
host_key_checking = False
# 开启ansible的日志功能
log_path = /var/log/ansible.log
# 修改ansible默认模块为shell
module_name = shell
vim /etc/ansible/hosts
# 方式一:
192.168.75.125 ansible_ssh_pass=1
192.168.75.126 ansible_ssh_pass=1
# 方式二:
[nginx]
192.168.75.12[5:6] ansible_ssh_pass=1
# 验证是否可以连接:
[root@node4 ~]# ansible nginx -m ping
192.168.75.125 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.75.126 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
4.3 常见模块:
4.3.1 command模块:
该模块是ansible默认模块,可以实现在远程服务器执行大量shell命令,但
是有些特殊符号不支持,比如 >,<,;,&,|等 。
# 所有模块数:
[root@node4 ~]# ansible-doc -l | wc -l
3387
# 查看某个模块的详细帮助:
ansible-doc command
# 查看某个模块的简单帮助:
ansible-doc -s command
# 创建目录:
[root@node4 ~]# ansible nginx -m command -a "mkdir -p
/tmp/discuz"
192.168.75.126 | CHANGED | rc=0 >>
192.168.75.125 | CHANGED | rc=0 >>
或者省略-m :
[root@node4 ~]# ansible nginx -a "mkdir -p /tmp/discuz"
192.168.75.126 | CHANGED | rc=0 >>
192.168.75.125 | CHANGED | rc=0 >>
# 不支持管道以及重定向等:
[root@node4 ~]# ansible nginx -a "ls /tmp/ | grep
wordpress"
192.168.75.126 | FAILED | rc=2 >>
/tmp/:
ansible_command_payload_IkjuBk
。。。。
4.3.2 shell模块:
该模块可以实现在远程服务器执行shell命令,并且弥补了command的一些
缺陷!
4.3.3 copy模块:
可以实现将ansible管理主机的文件内容分发到远程服务器。
# 指定远程服务器普通用户执行命令(该普通用户应在sudo表中记录,或者加入
wheel组):
ansible all -a "netstat -ntlp" -u jfedu -b -Kk
-u 指定用户
-b 代替sudo,临时提权
-k 用户口令密码
-K sudo口令,一般等同于用户密码
4.3.2 shell模块:
该模块可以实现在远程服务器执行shell命令,并且弥补了command的一些
缺陷!
4.3.3 copy模块:
可以实现将ansible管理主机的文件内容分发到远程服务器。
# 指定远程服务器普通用户执行命令(该普通用户应在sudo表中记录,或者加入
wheel组):
ansible all -a "netstat -ntlp" -u jfedu -b -Kk
-u 指定用户
-b 代替sudo,临时提权
-k 用户口令密码
-K sudo口令,一般等同于用户密码
[root@node4 ~]# ansible nginx -m shell -a
"creates=/tmp/wordpress yum install nginx -y"
192.168.75.126 | SUCCESS | rc=0 >>
skipped, since /tmp/wordpress exists
192.168.75.125 | SUCCESS | rc=0 >>
skipped, since /tmp/wordpress exists
# 推送文件,远程服务器地址可以是文件或者目录:
[root@node4 ~]# ansible nginx -m copy -a "src=/etc/fstab
dest=/tmp/ bakcup=yes mode=600 "
# 推送目录(不能是空目录),远程服务器地址只能是目录:
ansible nginx -m copy -a "src=/data/web dest=/tmp/"
# 推送字符串,远程服务器地址只能是文件:
ansible nginx -m copy -a "content=\'test file.\'
dest=/tmp/test"
4.3.4 fetch模块:
可以实现将远程服务器的文件(不支持直接拉取目录,可以先将目录打包
成文件)拉取到ansible管理主机。
4.3.5 synchronize模块:
可以实现目录、文件的同步,主要基于rsync命令工具同步目录和文件。
4.3.6 file模块:
该模块可以实现对文件的基本操作。比如,创建文件或目录、删除文件或
目录、修改文件权限等。
ansible nginx -m fetch -a "src=/tmp/fstab dest=/root/"
# 推送单个文件到远程临时目录:
ansible all -m synchronize -a "src=/etc/fstab dest=/tmp/"
# 推送目录到远程临时目录:
ansible all -m synchronize -a "src=/root/wordpress
dest=/tmp/"
# 推送目录中的文件到远程临时目录:
ansible all -m synchronize -a "src=/root/wordpress/
dest=/tmp/"
# 推送目录中的文件到远程临时目录,并且删除其他文件(与推送端文件保持一
致):
ansible all -m synchronize -a "src=/tmp/wordpress/
dest=/tmp/ delete=yes"
# 拉取目录到本地临时目录:
ansible all -m synchronize -a "src=/tmp/wordpress
dest=/tmp/ mode=pull"
# 创建普通文件:
ansible nginx -m file -a "name=/tmp/passwd state=touch"
# 创建目录:
ansible nginx -m file -a "name=/tmp/web state=directory"
# 删除文件:
ansible nginx -m file -a "name=/tmp/passwd state=absent"
# 创建软连接:
ansible nginx -m file -a "src=/etc/passwd dest=/tmp/passwd
state=link"
# 创建新文件,顺便设置文件属性:
ansible nginx -m file -a "name=/tmp/passwd mode=600
owner=lutixia state=touch"
# 修改文件属性:
ansible nginx -m file -a "name=/tmp/passwd mode=644
owner=root"
以上是关于ansible自动化运维实战一的主要内容,如果未能解决你的问题,请参考以下文章
Ansible自动化运维实战在Jumpserver平台使用Ansible管理服务器
自动化运维-ansible------playbook及实战案例