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实战安装部署

Ansible自动化运维实战在Jumpserver平台使用Ansible管理服务器

自动化运维-ansible------playbook及实战案例

Ansible自动化运维实战在docker环境部署ansible管理平台awx

自动化运维工具Ansible实战playbook使用

自动化运维工具Ansible实战playbook循环