自动化运维之ansible

一、认识自动化运维

假如管理很多台服务器,主要关注以下几个方面"

1.管理·机与被管理机的连接(管理机如何将管理指令发送给被管理机)

2.服务器信息收集(如果被管理的服务器有centos7.5外还有其它linux发行版,如suse,ubuntu等。当你要做的事情在不同os上有所不同,你需要收集信息,并将其分开处理)

3.服务器分组(因为有些时候我要做的事情不是针对所有服务器,可能只针对某一个分组)

4.管理内容的主要分类

文件目录管理(包括文件的创建,删除,修改,查看状态,远程拷贝等)

用户和组管理

cron时间任务管理

yum源配置与通过yum管理软件包

服务管理

远程执行脚本

远程执行命令

二、ansilble

2.1 ansible环境搭建

1.静态ip

2.主机名及主机名互相绑定

3.关闭防火墙,selinux

4.时间同步

5.确认和配置yum源(需要epel源)

实验过程:

第一步:管理机上安装ansible,被管理节点必须打开ssh服务

bash 复制代码
yum install epel-release
yum install ansible
ansible --version

第二步:实现master对agent的免密登录。只在master上做。(如果这一步不做,则在后面操作agent时要加-k参数传密码;或者在主机清单里传密码

bash 复制代码
ssh-keygen
ssh-copy-id -i 192.168.124.131
ssh-copy-id -i 192.168.124.132

第三步:在master上定义主机组,并测试连接性

【group】

192.168.124.131

192.168.124.132

2.2服务器分组

ansible通过一个主机清单功能来实现服务器分组

ansible的默认主机清单配置文件为/etc/ansible/hosts

示例:

bash 复制代码
[nginx]               组名 
apache[1:10].aaa.com  表示apache1.aaa.com到apache10.aaa.com这10台机器
nginx[a:z].aaa.com    表示nginxa.aaa.com到nginxz.aaa.com共26台机器
10.1.1.[11:15]        表示10.1.1.11到10.1.1.15这5台机器

10.1.1.1:2222         设置端口为2222

定义10.1.1.12:2222这台服务器的别名为nginx1
nginx1 ansible_ssh_host=10.1.1.12 ansible_ssh_port=2222

没有做免密登录的服务器可以指定用户名和密码
nginx1 absible_ssh_host=10.1.1.12 ansible_ssh_port=2222 ansible_ssh_user=root ansible_-ssh_pass="123456"

利用别名来分组
nginx1 ansible_ssh_host=10.1.1.12 ansible_ssh_port=2222 ansible_ssh_user=root ansible_ssh_pass="123456"
nginx2 ansible_ssh_host=10.1.1.13

[nginx]
nginx1
nginx2

2.3ansible模块

ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是absible所运行的模块,ansible只是提供一种框架。

ansible支持的模块非常的多,我们并不需要把每个模块都记住,而是只需要熟悉一些常见的模块,其他的模块在需要用到时查询即可

2.3.1查看所有支持的模块

bash 复制代码
ansible-doc -l

2.3.2hostname模块

hostname模块用于修改主机名(注意:他不能修改/etc/hosts文件)

将其中一台远程主机名修改为agent1.cluster.com

bash 复制代码
master# ansible 192.168.124.131 -m hostname -a 'name=agent1.cluster.com'
基本格式为:ansible 操作的机器名或组名 -m 模块名 -a "参数1=值1 参数2=值2"

2.3.3file模块(重点)

创建目录

删除:

2.3.4copy模块(重点)

copy模块用于对文件的远程拷贝操作(如把本地的文件拷贝到远程的机器上)

在master上准备一个文件,拷贝此文件到group1的所有机器上

copy模块拷贝时要注意拷贝目录后面是否带"/"符号

bash 复制代码
/etc/yum.repos.d后面不带/符号,则表示把/etc/yum.repos.d整个目录拷贝到/tmp/目录下
master# ansible group1 -m copy -a 'src=/etc/yum.repos.d dest=/tmp/'
/etc/yum.repos.d/后面带/符号,则表示把/etc/yum.repos.d/目录里面的所有文件拷贝到/tmp/目录下
master# ansible group1 -m copy -a 'src=/etc/yum.repos.d/ dest=/tmp/'

2.3.5stat模块(了解)

stat模块类似于linux的stat命令,用于获取文件的状态信息

获取/etc/fstab文件的状态信息

2.3.6template模块(扩展)

与copy模块功能几乎一样

template模块首先使用变量渲染jinjia2模版文件成普通文件,然后再复制过去,而copy模块不支持。(jinja2是一个基于python的模版引擎)

bash 复制代码
master# ansible -m template group1 -a "src=/etc/hosts dest=/tmp/hosts"

template模块不能拷贝目录

bash 复制代码
master# ansible -m template group1 -a "src=/etc/yum.repos.d/ dest=/etc/yum.repos.d/"

2.3.7fetch模块

fetch模块与copy模块类似,但作用相反。用于把远程机器的文件拷贝到本地。

第一步:在两台被管理机上分别创建一个同名文件(但内容不同)

bash 复制代码
agent1# echo 12345 > /tmp/1.txt
agent2# echo 54321 > /tmp/1.txt

第二步:从master上fetch文件(因为group1里有2台机器,为了避免同名文件冲突,它使用了不同的目录

bash 复制代码
master# ansible group1 -m fetch -a 'src=/tmp/1.txt dest=/tmp/'

第三步:先删除上面fetch过来的,然后尝试只fetch其中一台机器的,也会使用名称来做子目录区分

bash 复制代码
master# rm /tmp/10.1.1.* -rf


master# ansible 10.1.1.12 -m fetch -a 'src=/tmp/1.txt dest=/tmp/'

注意:fetch模块不能从远程拷贝目录到本地

2.3.8user模块

user模块用于管理用户账号和用户属性

bash 复制代码
ansible group1 -m user -a "name=zhangsan uid=1004 home=/home/hhh shell=/bin/false command=@_@"

删除用户以及家目录

bash 复制代码
ansible group1 -m user -a "name=zhangsan state=absent remove=yes"

2.3.9group模块

创建组

bash 复制代码
ansible group1 -m group -a "name=admins gid=5000"

删除组

bash 复制代码
ansible group1 -m group -a "name=admins state=absent"

2.3.10cron模块

cron模块用于管理周期性时间任务

创建一个cron任务,不指定suer的话,默认就是root(因为我这里是用root操作的)

如果minute,hour,day,month,week不指定的话,默认都为*

bash 复制代码
master# ansible group1 -m -cron -a 'name="test cron1" user=zhangsan job="touch /tmp/111" minute=*/2'

删除cron任务

bash 复制代码
master #ansible group1 -m -cron -a 'name="test cron1" state=absent'

2.3.11yum模块(重点)

yum模块用于使用yum命令来实现软件包的安装与卸载

使用yum安装一个软件(前提:group1的机器上的yum配置都已经ok)

bash 复制代码
master#ansible group1 -m yum -a 'name=vsfpd state=present'

使用yum安装httpd,http-devel软件,state=latest表示安装最新版本

bash 复制代码
master#ansible group1 -m yum -a 'name=httpd,httpd-devel state=latest'

使用yum卸载httpd,httpd-devel软件

bash 复制代码
master#ansible group1 -m yum -a 'name=httpd,httpd-devel state=absent'

2.3.12service模块

service模块用于控制服务的启动,关闭,开机自启动等

启动vsftpd服务,并设为开孔自动启动

bash 复制代码
master# ansible group1 -m service -a 'name=vsftpd state=started enabled=on'

2.3.13script-command-shell模块

script模块用于在远程机器上执行本地脚本

bash 复制代码
master# ansible group1 -m script -a '/tmp/xxx.sh'

command和shell模块都是用于执行linux命令的,这对于熟悉的工程师来说,用起来非常high

shell模块与command模块差不多(command模块不能执行一些类似于¥HOME,>,<,|等符号,但Shell可以)

bash 复制代码
master# ansible -m command group1 -a "useradd user2"
master# ansible -m command group1 -a "id user2"

master# ansible -m command group1 -a "cat /etc/passwd |wc -l"  --报错
master# ansible -m shell group1 -a "cat /etc/passwd |wc -l"  --成功
相关推荐
小稻穗13 分钟前
市场调研样本选型坐标系:2026六家国内样本平台能力横向校验
大数据·运维·数据分析
AOwhisky34 分钟前
Python 学习笔记(第十三期)——运维自动化(下·前篇):远程命令执行——paramiko基础篇
运维·python·学习·云原生·自动化·运维开发·paramiko
AOwhisky1 小时前
Python 学习笔记(第十四期)——运维自动化(下·中篇):远程文件传输——paramiko进阶篇
运维·python·学习·云原生·自动化·文件传输·paramiko
imc.112 小时前
linux基础IO
linux·运维·服务器
躺不平的理查德2 小时前
让Ubuntu 的第二块网卡 ens37 永久固定为 192.168.30.111
运维·服务器
bitbrowser2 小时前
Facebook 验证反复回到原页面,应该从哪里排查
运维·服务器·facebook
Land03292 小时前
AI网页元素变化无法自动修复?自带元素自愈的自动化解决方案
运维·人工智能·ai·自动化·rpa
fengyehongWorld2 小时前
Jenkins 安装与简单配置
运维·jenkins
云智慧AIOps社区3 小时前
2026 国产化 ITSM 替代指南:横向测评 ServiceNow、轻帆云、Jira等五款主流IT服务管理平台
运维·人工智能·运维开发·it服务管理·itsm平台
Urbano3 小时前
针织卫衣全流程生产工序科普:自动化替代、产能优化与设备选型实战方案
运维·自动化