自动化运维工具——ansible入门详解

自动化运维工具——ansible入门详解

ansible是做什么的

​ 1)当服务器增多,如果全靠人工一台一台的去配置,耗时耗力,所以现在可以用ansible解决上百台服务器配置问题

​ 2)当前主流的自动化工具

ansible的配置

​ 1)所有配置的服务器都通过m01服务器统一管理,ansible配置在m01上

​ 2)ansible安装,编写主机清单,创建目录

ansible安装
[root@m01 ~]# yum install -y ansible
搭建本地yum服务器
##m01构建本地yum库,使用apache搭建web服务,通过http协议实现

##安装httpd
[root@m01 ~]# yum install -y httpd

##启动httpd
[root@m01 ~]# systemctl start httpd
[root@m01 ~]# systemctl enable httpd

##将所有需要提供安装的rpm包都放到/var/www/html目录下

##安装createrepo软件包
[root@m01 ~]# yum install -y createrepo

##将/var/www/html目录建立成yum仓库
[root@m01 ~]# createrepo /var/www/html 

##其他服务器需要使用m01来安装软件包,只需在/etc/yum.repos.d/目录创建一个仓库文件
vim local.repo
[local]
baseurl=http://10.0.0.61
gpgcheck=0
编写主机清单
##编写主机清单 - - 连接被控端有两种方法:

##方法一:配置主机ssh密码
[root@m01 ~]# vim /etc/ansible/hosts 

[web]
10.0.0.7 ansible_ssh_pass='111'
10.0.0.8 ansible_ssh_pass='111'

[nfs]
10.0.0.31 ansible_ssh_pass='111'

##为什么要写ansible_ssh_pass='111'
答:因为远程ssh主机密码需要加密,不然解析不了

默认情况下,使用密码,需要进行ssh指纹检测,需要通过修改配置文件将该功能关掉
[root@m01 ~]# sed -i '/host_key_checking/s@^#@@' /etc/ansible/ansible.cfg


##方法二:ssh密码配对
[root@m01 ~]# vim /etc/ansible/hosts 

[web]
10.0.0.7
10.0.0.8 

[nfs]
10.0.0.31

##免交互生成密钥对
[root@m01 ~]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

##将公钥发送给被控设备
[root@m01 ~]# ssh-copy-id -i .ssh/id_rsa.pub  root@10.0.0.7
[root@m01 ~]# ssh-copy-id -i .ssh/id_rsa.pub  root@10.0.0.8
[root@m01 ~]# ssh-copy-id -i .ssh/id_rsa.pub  root@10.0.0.31

测试是否能连接上

在这里插入图片描述

连接成功!!!

清单文件编写方式
##方式一:直接写ip地址或主机名(要求能解析)
[root@m01 ~]# vim /etc/ansible/hosts 
10.0.0.7/web01
10.0.0.8/web02
10.0.0.31/nfs

##方式二:用群组来分类
[root@m01 ~]# vim /etc/ansible/hosts 

[web]
web01
web02 

[db]
db01
db02

[lb]
lb01
lb02

##方式三:群组的plus版,推荐
[root@m01 ~]# vim /etc/ansible/hosts 
[php]
web01
web02

[java]
web03
web04

[web:children]
php
java

##方式四:应用变量
[root@m01 ~]# vim /etc/ansible/hosts 
[web]
web01 ansible_ssh_password='111'
web02 ansible_ssh_password='111'[web]
web01
web02 
[web:vars]
ansible_ssh_password='111'

案例1:

##lnmp项目成员web:10.0.0.7和10.0.0.8,nfs:10.0.0.31,ssh的root密码都是111,如何用清单文件标示清楚

[root@m01 ~]# vim /etc/ansible/hosts

[lnmp:children]
web
nfs

[lnmp:vars]
ansible_ssh_password='111'

[web]
10.0.0.7
10.0.0.8

[nfs]
10.0.0.31
ansible目录结构
[root@m01 ~]# tree /etc/ansible/

/etc/ansible/ #安装路径
├── ansible.cfg #ansbile的配置文件
├── hosts #ansible的主机清单文件inventory
└── roles #ansible的角色(ansible高级课程)

ansible的命令选项

  • –version:显示版本
  • -v:详细过程 -vv -vvv -vvvv
  • –list-hosts:显示主机列表,可简写–list
  • -k:–ask-key 提示输入ssh连接密码,默认是key验证
  • -K:–ask-become-key 提示输入sudo的口令
  • -C:–check 检查,并不执行
  • -u:–user=REMOTE_USER 远程执行的用户
  • -b:–become 代替旧版的sudo切换
  • -m:调用的功能模块
  • -a:配合-m,调用该模块的参数

ansible模块应用

ansible ad-hoc 常用模块

1)ping模块

2)command | shell 模块

3)script脚本模块

4)yum模块

5)copy模块

6)file模块

7)group/user模块

8)sevice 模块/systemd模块

ping模块
##用于测试连通性
[root@m01 ~]# ansible all -m ping
command | shell 模块

ansible的默认模块为command

ansible 主机名 [-m command] -a ‘简单的shell命令’

ansible 主机名 -m shell -a ‘复杂的shell命令’

复杂表示带有管道符或其他命令连接符(; && ||)

案例:

##案例1:查看所有host主机名
[root@m01 ~]# ansible all -m -a command 'hostname'
[WARNING]: sftp transfer mechanism failed on [10.0.0.31]. Use ANSIBLE_DEBUG=1 to see
detailed information
[WARNING]: sftp transfer mechanism failed on [10.0.0.7]. Use ANSIBLE_DEBUG=1 to see
detailed information
[WARNING]: sftp transfer mechanism failed on [10.0.0.8]. Use ANSIBLE_DEBUG=1 to see
detailed information
10.0.0.31 | CHANGED | rc=0 >>
nfs
10.0.0.7 | CHANGED | rc=0 >>
web01
10.0.0.8 | CHANGED | rc=0 >>
web02


##案例2:查看nfs的用户登录数量
[root@m01 ~]# ansible nfs -m  shell -a  'who |wc -l'
[WARNING]: sftp transfer mechanism failed on [10.0.0.31]. Use ANSIBLE_DEBUG=1 to see
detailed information
10.0.0.31 | CHANGED | rc=0 >>
2


##案例3:在nfs主机上创建zz用户
[root@m01 ~]# ansible nfs -m shell -a 'useradd zz'
[WARNING]: sftp transfer mechanism failed on [10.0.0.31]. Use ANSIBLE_DEBUG=1 to see
detailed information
10.0.0.31 | CHANGED | rc=0 >>

#查看nfs上是否存在zz用户
[root@nfs ~]# id zz
uid=1000(zz) gid=1000(zz) groups=1000(zz)


##案例4:在web01上安装nginx
[root@m01 ~]# ansible 10.0.0.7 -m yum -a 'name=nginx state=present'

#在web01上查看是否安装了nginx
[root@web01 ~]# yum list nginx
Loaded plugins: fastestmirror
Repository 'local' is missing name in configuration, using id
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Installed Packages
nginx.x86_64                           1:1.20.1-9.el7                            @epel
script脚本模块
##在本地运行模块,等同于在远程执行,不需要将脚本文件进行推送目标主机执行

##案例1:在m01上创建一个简单的创建用户并修改密码的脚本
[root@m01 ~]# vim useradd.sh
#!/bin/bash
useradd qjj
echo 123 | passwd --stdin test &>/dev/null

ansible all -m script -a '/root/useradd.sh'
yum模块

##常用参数
name —指定要安装的软件包名称
state —指定使用yum的方法
installed,present —安装软件包(默认)
removed,absent —移除软件包
latest —安装最新软件包

案例

##案例1:
##在web01上安装nginx
[root@m01 ~]# ansible 10.0.0.7 -m yum -a 'name=nginx state=present'

##在web01上卸载nginx
[root@m01 ~]# ansible 10.0.0.7 -m yum -a 'name=nginx state=absent'

##案例2:
##批量安装软件
【ansible的各种模块中,除了shell模块可以用*,其他都不能用,所以批量安装软件,需要将软件包都写在name参数中】
[root@m01 ~]# ansible 10.0.0.7 -m yum -a 'name=nginx,mysql-community-server,php72w-cli,php72w-gd,php72w-fpm,php72w-mysqlnd state=absent'

#注意:如果仓库有损坏,会影响安装,需要提前
[root@m01 ~]# yum clean all && yum makecache
[root@m01 ~]# ansible web -m shell -a 'yum clean all && yum makecache'
copy模块

#常用参数
src — 推送数据的源文件信息
dest — 推送数据的目标路径
backup — 对推送传输过去的文件,进行备份
content — 直接批量在被管理端文件中添加内容
group — 将本地文件推送到远端,指定文件属组信息
owner — 将本地文件推送到远端,指定文件属主信息
mode — 将本地文件推送到远端,指定文件权限信息

案例

##推送文件模块
[root@m01 ~]# ansible test -m copy -a "src=/etc/hosts dest=/tmp/test.txt"

##在推送覆盖远程端文件前,对远端已有文件进行备份,按照时间信息备份
[root@m01 ~]# ansible test -m copy -a "src=/etc/hosts  dest=/tmp/test.txt  backup=yes"

##直接向远端文件内写入数据信息,并且会覆盖远端文件内原有数据信息
[root@m01 ~]# ansible test -m copy -a "content='example' dest=/tmp/test"
file文件配置模块

path — 指定远程主机目录或文件信息

recurse — 递归授权

state —

​ directory — 在远端创建目录

​ touch — 在远端创建文件

​ link — link或hard表示创建链接文件

​ absent — 表示删除文件或目录

​ mode — 设置文件或目录权限

​ owner — 设置文件或目录属主信息

​ group — 设置文件或目录属组信息

py -a “content=‘example’ dest=/tmp/test”


#### file文件配置模块

> path --- 指定远程主机目录或文件信息
>
> recurse --- 递归授权
>
> state --- 
>
> ​			directory --- 在远端创建目录
>
> ​			touch --- 在远端创建文件 
>
> ​			link --- link或hard表示创建链接文件 
>
> ​			absent --- 表示删除文件或目录 
>
> ​			mode --- 设置文件或目录权限 
>
> ​			owner --- 设置文件或目录属主信息 
>
> ​			group --- 设置文件或目录属组信息











  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
自动化运维工具——ansible是一款开源的IT自动化工具,广泛应用于软件部署、配置管理和任务协同等领域。它的最大特点是简单易用、功能强大且跨平台。 首先,ansible具有简单易用的特点。它使用简单的YAML语言作为配置文件,无需编写复杂的脚本。用户只需要简单地定义主机和操作即可完成任务的执行。这使得即便是非开发人员,也能轻松上手使用ansible进行自动化管理。 其次,ansible功能强大。它支持广泛的操作系统、云平台和网络设备,并提供了丰富的模块化功能。通过在任务中使用ansible的模块,我们可以实现系统配置、软件安装、文件传输等各种常见操作。此外,ansible不仅支持并发执行任务,还能够将任务分组执行,并提供了强大的变量和条件控制功能。 再次,ansible跨平台。无论是在Linux、Unix还是Windows系统上,ansible都能够良好地运行。此外,它还支持云平台,如AWS、Azure等,以及网络设备,如Cisco、Juniper等。这使得ansible成为一个非常灵活的自动化运维工具,能够满足各种不同环境和需求的自动化管理。 最后,ansible还具有良好的社区支持。ansible拥有庞大的用户社区和活跃的开发者社区,有大量的文档、示例和插件可供参考和使用。这使得我们在使用ansible时能够获得快速解答和支持,同时也能够从社区中学习到更多的技巧和经验。 总而言之,ansible是一款简单易用、功能强大且跨平台的自动化运维工具。它在软件部署、配置管理和任务协同等方面具有广泛的应用,并且得到了良好的社区支持。无论是企业还是个人,都可以通过ansible来提高工作效率和自动化管理水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路跑码码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值