Ansible自动化运维工具

发布时间:2023年12月18日
主要特点(功能)

1、远程操作主机功能

2、自动化运维(playbook剧本 yaml)

是基于Python开发的配置管理和应用部署工具,在自动化运维中,现在是异军突起

Ansible能批量配置,部署,管理上千台主机,类似于xshell的一键输入的工具,不需要每次都切换主机进行操作

只要有一台anisble的固定机,就可以所有节点的操作

不需要Agent,客户端

主需要一台主机上配置了Ansible

Ansible是基于模块进行工作,只是提供了一种运行架构,执行操作和辩证的是absible的模块来实现的

copy

service

Ansible默认就是通过ssh的密钥对实现通信(可以改)

Absible的另一个特点,所有模块都是幂等性

所谓的幂等性,指的是多次操作或者多次执行对系统资源的影响是一致的

只要发现要停止的目标服务已经停止了,后续同样的停止操作,不会改变任何结果,什么也不做(systemctl stop firewalld)

每次操作都会先停再启动(systemctl restart firewalld)

httpd和get都是幂等性

post:多次执行相同的post可能创建多个相同的资源

Ansible的幂等性,决定了你可以放心大胆的使用,重复执行某个任务不会对结果产生任何影响(绝大多数情况)

Ansible的四大组件

1、Inventory 主机清单(主机组)定义Ansible可以远程操作的服务器

2、模块 13模块(常用的),通过模块可以实现远程的配置和操作

3、Plugins 插件

4、Playbook剧本(shell脚本)yaml格式

Ansible的优缺点

1、部署较为简单,主要在控制主机部署即可,被控主机需要有ssh和Python2.5以上版本,基本上linux都是自带的,Ansible只能控制linux系统,windows不行

2、基于模块工作,可以使用任意开发模块(二次开发,底层架构)

环境

1、管理端:20.0.0.10 Ansible

2、被管理端:20.0.0.11

20.0.0.12

关闭防火墙和防火墙

安装epel源

yum -y install epel-release	
yum -y install ansible
yum -y install tree

/etc/ansible/的目录文件
ansible.cfg : ansible的主配置文件,一般无需修改
hosts:主机组,声明可以被控制的主机
roles:公共角色目录

配置主机有两种方式(vim hosts)
1、直接声明主机的IP地址
2、主机名(/etc/hosts做映射)

生成密钥对
ssh-keygen -t rsa

sshpass -p '123' ssh-copy-id root@20.0.0.11

ansible的命令格式

针对一个主机(先执行)
ansible 20.0.0.11 -m command -a 'date'
sshpass -p '123' ssh-copy-id root@20.0.0.11
ansible 20.0.0.11 -m command -a 'date'

ansible 20.0.0.12 -m command -a 'date'
sshpass -p '123' ssh-copy-id root@20.0.0.12
ansible 20.0.0.12 -m command -a 'date'
Ansible 命令行模块
command模块
command模块,在远程主机执行linux的命令,不支持管道符,重定向输出
command常用参数
1、chdir	远程主机上运行命令,提前进入目录
ansible all -m command -a 'chdir=/home ls'
2、creates: 判断指定文件是否存在,如果存在,不指定后面的操作
ansible all -m command -a 'creates=/opt/123 ls /opt'
3、removes: 判断指定的文件是否存在,如果存在,执行后续的命令。
ansible 20.0.0.11 -m command -a 'removes=/opt/123 ls /opt'

shell模版
shell模块,在远程主机执行命令,相当于刁颖远程主机的shell禁止,支持管道符和重定向
在Ansible当中,多个引号之间要做隔离
打印IP地址
ansible 20.0.0.11 -m shell -a "echo $(ifconfig ens33| awk 'NR==2{print $2}')"

多个命令一起执行
ansible 20.0.0.12 -m shell -a 'touch /opt/123 && echo 123 > /opt/123 && /opt/123 && ls /opt cat /opt/123'

指定主机上创建一个脚本,在脚本中写入一个内容#!/bin/bash ifconfig, 然后运行这个脚本
ansible 20.0.0.11 -m shell -a 'cd /opt; touch xiaobu.sh; echo "#!/bin/bash" >> xiaobu.sh; echo "ifconfig" > xiaobu.sh; sh xiaobu.sh'
ansible 20.0.0.11 -m shell -a 'echo -e "#!/bin/bash\n ifconfig" > /opt/test.sh && sh /opt/test.sh'

在脚本中输入两个数,实现加法,然后运行脚本
表示逻辑或,前面都成功与否,后面的命令都会执行

cron模版
在Ansible当中,多个引号之间要做隔离
模块3
cron模块,远程主机设置定时任务
两种状态:present表示添加(默认就是添加,可以省略)
		absent:表示移除,#absent在整个ansible的语法中都表示移除的意思(删除)

分时日月周
分	minute
时	hour
日	day
月	month
周	weekday
Job 任务执行的命令
name	任务计划的任务,可以不加
ansible 20.0.0.11 -m cron -a 'minute"*/5" job="ls /opt" name="test1"'

9月1号早上8点30分,执行ls /opt 任务名:test2
ansible 20.0.0.11 -m cron -a 'minute="30" hour="8" day="1" month="9" job="ls /opt" name="test2"'

周三下午14点30分执行ls /opt,不要任务名
ansible 20.0.0.11 -m cron -a 'minute="30" hour="14" weekday="3" job="ls /opt"'
查看创建的定时任务
ansible 20.0.0.11 -a 'crontab -l'

远程删除定时任务
ansible 20.0.0.11 -m cron -a 'name=test1 state=absent'(定义任务名)
ansible 20.0.0.11 -m cron -a 'name=None state=absent'(没有定义任务名,多个计划任务,如果不给名字都是None,一旦删除,全部删除,不推荐)

User模块
User模块,用户管理模块
常用的参数
name	指定用户名,必须要有
state	present表示添加
		absent删除
创建可以不加present,删除一定要加absent

system =yes|no,标记用户是否是一个程序用户
uid	用户的唯一标识
group	用户的所在组
create_home=yes|no ,替换用户的家目录,不要替换用户的家目录可以不写
password	创建用户的密码
comment	用户的注释信息(可有可无)
remove=yes|no 当删除时,加上remove=yes,删除用户的家目录 userdel -r ,如果不需要删除家目录,可以不写
ansible 20.0.0.11 -m user -a 'name="xiao" system="yes"'
在创建用户时,虽然我声明了是一个程序用户,但是默认的登录shell如果没有额外的声明,还是默认的/bin/bash,UID 会按照程序用户来指定

使用ansible的user模块创建用户时,如果创建普通用户可以不加system=no,指定shell类型也可以不加,默认就是bin/bash,如果创建的是程序用户,一定要声明system=yes,声明shell的类型 shell=/sbin/nologin,也指定uid方式,给用户分配一个uid

指定用户名,指定uid,指定密码,指定家目录
ansible 20.0.0.11 -m user -a 'name=test uid=1002 password=123456 home=/opt/test'

远程查看创建的用户
ansible 20.0.0.11 -a 'cat /etc/passwd'
删除用户
ansible 20.0.0.11 -m user -a 'name=test remove=yes state=absent' 

group模块
group模块,用户组的管理模块
gid 设置组的id
name 必须要有
创建组用户
ansible 20.0.0.12 -m group -a 'name=xiaobu1 gid=306 system=yes'
查看组用户
ansible 20.0.0.12 -a 'cat /etc/group'

创建用户,并指定组用户
ansible 20.0.0.12 -m user -a 'name=xiaobu10 group=xiaobu1 system=yes'

ansible 20.0.0.12 -a 'tail -f /var/log/messages'
ansible 不适用交互式的命令
删除组
anside 20.0.0.12 -m group -a 'name=xiaobu1 state=absent'

ping模块
ping模块,测试连通性
ansible all -m ping

文章来源:https://blog.csdn.net/qq_71147683/article/details/135055106
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。