前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Ansible 基础搭建配置

Ansible 基础搭建配置

作者头像
老七Linux
发布2018-05-31 10:25:44
7390
发布2018-05-31 10:25:44
举报
文章被收录于专栏:Laoqi's Linux运维专列
一、初识Ansible

在这个风起云涌的自动化运维时代,选择一个拿手的自动化工具不仅可以解放双手,更重要的是工作效率大大提升!

Ansible特点 就目前的优势来说:

①轻量级;②不需要安装客户端,通过sshd通信;③基于模块工作,配置更加简单,容易上手。④使用Python开发。

二、环境配置

IP地址

作用

192.168.96.129

Server

192.168.96.135

Client

192.168.96.136

Client

只需要在 Server 端安装 Ansible 服务即可。

代码语言:javascript
复制
yum install -y epel-release

yum install -y ansible
2.1 配置密钥认证

既然自动化,我们首先需要保证两台机器互相通信没有任何障碍。

使用 ssh-keygen 生成密钥对,把公钥(id-rsa.pub)

Server 操作:

代码语言:javascript
复制
cat /root/.ssh/id_rsa.pub

内容放到96.135, 96.136这两台机器的如下,即可:

代码语言:javascript
复制
vim /root/.ssh/authorized_keys

Server 端 直接测试 ssh (是可以直接登录的)

代码语言:javascript
复制
ssh 192.168.96.135

语法:ansible <host-pattern> [-f forks] [-m module_name] [-a args]

-f 启动多个个主机执行任务 -m 要使用的模块 -a 模块特有的参数

三、远程执行命令

其实在现实运维工作中,我们一般都会把一些机器定义在一个组中,通过这个组队组内的机器进行自动化的运行一些命令或动作:

代码语言:javascript
复制
[[email protected] ~]# vim /etc/ansible/hosts
增加如下内容:

[testhost]
192.168.96.135
192.168.96.136

如上:[testhost] 为主机组名字(自定义),下面的两个IP为组内的机器。
3.1 测试
代码语言:javascript
复制
[[email protected] ~]# ansible testhost -m command -a 'hostname'
192.168.96.135 | SUCCESS | rc=0 >>
zhdy02

192.168.96.136 | SUCCESS | rc=0 >>
zhdy03

检查Ansible节点的运行时间(uptime)

代码语言:javascript
复制
# ansible -m command -a "uptime"'test-servers'

给节点增加用户

代码语言:javascript
复制
ansible -m command -a "useradd mark"'test-servers'

ansible -m command -a "grep mark /etc/passwd"'test-servers'

或者有时候我们需要只是针对一台机器去操作一下:

代码语言:javascript
复制
[[email protected] ~]# ansible 192.168.96.136 -m command -a 'hostname'
192.168.96.136 | SUCCESS | rc=0 >>
zhdy03

报错信息:

代码语言:javascript
复制
msg: Aborting, target uses selinux but pythonbindings (libselinux-python) aren't installed!
FATAL: all hosts have already failed –aborting

解决:# yuminstall libselinux-python -y
注意这个是在 host机器上安装,不是在ansible控制机器上。

还有一条值得一提;有时候我们指定执行的命令中会有管道符,例如:cat /etc/passwd | grep root 我们只需要把command 改成shell即可。或者我们也可以一直使用shell为了避免这种错误出现:

代码语言:javascript
复制
[[email protected] ~]# ansible 192.168.96.135 -m shell -a 'cat /etc/passwd | grep root'
192.168.96.135 | SUCCESS | rc=0 >>
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
四、拷贝文件或目录
4.1 拷贝文件
代码语言:javascript
复制
[[email protected] ~]# ansible 192.168.96.135 -m copy -a "src=/etc/passwd dest=/tmp/1.txt"
4.2 拷贝目录
代码语言:javascript
复制
ansible 192.168.96.135 -m copy -a "src=/etc/ansible dest=/tmp/1ansible"

135 的机器检查下:

[[email protected] ~]# ls /tmp/
1ansible  data    mongodb-27017.sock  php-fcgi.sock

这是正常的!

拷贝目录的同时制定权限:

代码语言:javascript
复制
[[email protected] ~]# ansible 192.168.96.135 -m copy -a "src=/etc/ansible dest=/tmp/1ansible owner=root group=root mode=0755"
192.168.96.135 | SUCCESS => {

注意: 如果目标指定的目录不存在,它会自动创建。,源目录会放到目标下去。如果拷贝的是文件,dest指定的名字和源如果不同,并且它不是已经存在的目录,相当于拷贝过去又重命名。但是相反,如果dest是目标机器上已经存在的目录,则会把文件直接拷贝到该目录下。

五、远程执行脚本

编写一个脚本:

vim ansib.sh

代码语言:javascript
复制
#! /bin/bash

d=`date`
echo "$d" >> /tmp/ansi.txt

把本地的脚本copy到远程机器:

代码语言:javascript
复制
ansible testhost -m copy -a "src=/tmp/ansib.sh dest=/tmp/ansib.sh mode=0755"

我们去远端服务器上面check

代码语言:javascript
复制
[root@zhdy02 ~]# ls /tmp/
1ansible  1.txt  ansib.sh
5.2 远程执行脚本
代码语言:javascript
复制
[[email protected] ~]# ansible 192.168.96.135 -m shell -a "/bin/bash /tmp/ansib.sh"
192.168.96.135 | SUCCESS | rc=0 >>

去远程服务器查看:
[[email protected] ~]# cat /tmp/ansi.txt 
2017年 10月 30日 星期一 21:50:53 CST

远程查看root的信息。

代码语言:javascript
复制
[[email protected] ~]# ansible 192.168.96.135 -m shell -a "cat /etc/passwd | grep root"
192.168.96.135 | SUCCESS | rc=0 >>
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
六、Ansible 实现任务计划

在服务器中操作:

代码语言:javascript
复制
[[email protected] ~]# ansible 192.168.96.135 -m cron -a "name='test_test' job='/bin/bash /usr/local/sbin/1.sh' weekday=6"

远端服务器查看:
[[email protected] ~]# crontab -l
30 3 * * *  sh /usr/bin/find /tmp/ -type f -mtime 100 |xargs rm -rf
#Ansible: test_test
* * * * 6 /bin/bash /usr/local/sbin/1.sh

那我们如何删除呢?

代码语言:javascript
复制
[[email protected] ~]# ansible 192.168.96.135 -m cron -a "name='test_test' state=absent"

远程服务器的任务计划就被删除了。

再来一个比较全一些的吧:

代码语言:javascript
复制
[[email protected] ~]# ansible 192.168.96.135 -m cron -a "name='test_test' job='/bin/bash /usr/local/sbin/1.sh' minute=15 hour=03 day=1,3,5 month=1,3,5 weekday=6"


远端服务器查看:
[[email protected] ~]# crontab -l
30 3 * * *  sh /usr/bin/find /tmp/ -type f -mtime 100 |xargs rm -rf
#Ansible: test_test
15 03 1,3,5 1,3,5 6 /bin/bash /usr/local/sbin/1.sh
代码语言:javascript
复制
ansible 192.168.96.135 -m cron -a 'minute="*/10" job="/bin/echo "hello"" name="test job" '
七、Ansible 安装rpm包 / 管理服务

远程安装一个httpd服务:

代码语言:javascript
复制
[[email protected] ~]# ansible 192.168.96.135 -m yum -a "name=httpd"

如何远程去管理一个服务呢?

我们现在远端查看一下httpd服务是没有开启的:

代码语言:javascript
复制
[[email protected] ~]# ps aux | grep httpd
root       3474  0.0  0.0 112668   968 pts/0    S+   22:07   0:00 grep --color=auto httpd

启动httpd服务,并设置开机自启动。

代码语言:javascript
复制
[[email protected] ~]# ansible 192.168.96.135 -m service -a "name=httpd state=started enabled=yes"

作为一个运维,也不是能记住所有的命令,尤其是更新后,我们需要查看一些模块的最新用法,和功能:

文档使用:

代码语言:javascript
复制
ansible-doc -l   列出所有的模块

ansible-doc cron  查看cron模块的文档
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/10/30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、初识Ansible
  • 二、环境配置
    • 2.1 配置密钥认证
    • 三、远程执行命令
      • 3.1 测试
      • 四、拷贝文件或目录
        • 4.1 拷贝文件
          • 4.2 拷贝目录
          • 五、远程执行脚本
            • 5.2 远程执行脚本
            • 六、Ansible 实现任务计划
            • 七、Ansible 安装rpm包 / 管理服务
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档