Ansible

Ansible主要功能:

远程操作主机功能

自动化运维(playbook 剧本 yam)

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

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

只要有一台ansible的固定主机,就可以实现所有节点的操作。

不需要agent,客户端

只需要一台主机上配置了Ansible即可

ansible是基于模块进行工作,只是提供了一种运行的架构,真正执行操作和变更的是ansible的模块来实现的

copy

service

Ansible默认是通过ssh的密钥对来实现通信 (模式可以改,一般不动)

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

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

systemctl stop firewalld

systemctl stop firewalld

systemctl stop firewalld 只要发现要停止的目标服务已经停止了,后续同样的停止操作,不会改变这一结果

systemctl restart firewalld 每一次的操作都会先停再启动,这种的就不是幂等

http get 幂等性

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

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

Ansible的四大组件:

  1. inventory 主机清单 (主机组) 定义Ansible可以远程操作的服务器
  2. 模块 13个模块(常用的) 通过模块可以实现远程的配置和操作
  3. Plugins 插件
  4. Playbook剧本 (shell脚本) yam格式

Ansible的优缺点:

部署较为简单,只要在控制主机部署即可,被控制主机需要有ssh和python2.5以上版本.基本上linux都是自带的

Ansible只能控制linux系统,windows不行。

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

环境:

管理端 192.168.211.10 ansible

被管理端 192.168.211.20

192.168.211.30

备用: 192.168.211.11

bash 复制代码
[root@host ~]# yum -y install epel-release
安装ansible必须要有第三方源

[root@host ~]# yum -y install ansible


[root@host ~]# tree /etc/ansible/
/etc/ansible/
├── ansible.cfg
├── hosts
└── roles

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

配置主机有两种方式:

直接声明主机的ip地址

bash 复制代码
进入ansible的hosts文件内进行修改 如下 
[webservers]
192.168.211.20
[dbservers]
192.168.211.30

模块1:command模块,在远程主机执行linux的命令,不支持管道符,重定向输出

ansible的命令格式:

ansible组名/ip -m 模块名称 -a '参数列表(执行的命令)'

bash 复制代码
ansible 192.168.211.20 -m command -a 'date'  指定主机执行这个命令 
ansible all -m command -a 'ls/opt'   所有声明的主机都会执行
ansible webservers -m command -a 'date'  指定组执行
不加-m也就是不声明使用的模块。默认就是执行command模块 

常用参数:

chdir:在远程主机上运行命令,提前进入目录,然后再执行命令

bash 复制代码
[root@host opt]# ansible all -m command -a 'chdir=/home ls'
192.168.211.30 | CHANGED | rc=0 >>
czy
192.168.211.20 | CHANGED | rc=0 >>
czy

creates:判断指定文件是否存在,如果存在,不执行后面的操作

bash 复制代码
[root@host opt]# ansible all -m command -a 'creates=/opt/123 ls /opt'
192.168.211.20 | SUCCESS | rc=0 >>
skipped, since /opt/123 exists
192.168.211.30 | CHANGED | rc=0 >>
containerd
lnmp
nhtml
rh

removes:判断指定的文件是否存在,如果存在,执行后续的命令。

bash 复制代码
[root@host opt]# ansible 192.168.211.20 -m command -a 'removes=/opt/123 ls /opt'
192.168.211.20 | CHANGED | rc=0 >>
123
containerd
lnmp
nhtml
rh

模块2:

shell模块 ,在远程主机执行命令,相当于调用远程主机的shell进程,支持管道符和重定向。

bash 复制代码
[root@host opt]# ansible 192.168.211.20 -m shell -a 'useradd test'
192.168.211.20 | CHANGED | rc=0 >>
[root@host opt]# ansible 192.168.211.20 -m shell -a 'cat /etc/passwd'
test:x:1001:1001::/home/test:/bin/bash

在ansible当中,多个引号之间要做隔离

表示逻辑且,前一个命令成功才会执行后一个命令。

ansible 192.168.211.20 -m shell -a 'touch /opt/123 && echo 456 > /opt/123 && ls /opt && cat /opt/123'

模块3 cron模块

远程主机设置定时任务

两种状态:present 表示添加(默认就是添加。可以省略)

absent 表示移除。#absent在整个ansible的语法中都表示移除的意思(删除)

分 时 日 月 周

分=minute

时=hour

日=day

月=month

周=weekday

job:任务计划需要执行的命令

name:任务计划的名称,可以不加。

多个计划任务,如果不给名字都是None,一旦删除None,全部删除,不推荐(最好是指定一个不重复的名称)

模块4:

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. 如果不需要删除家目录,可以不写。

bash 复制代码
ansible 192.168.211.20 -m user -a 'name=czy1 system=yes'
在创建用户时,虽然我声明了是一个程序用户,但是默认的登录shell,如果没有额外的声明,还是默认的/bin/bash
UID会按照程序用户来指定 
[root@host opt]# ansible 192.168.211.20 -m user -a 'name=czy2 shell=/sbin/nologin system=yes'
czy2:x:986:979::/home/czy2:/sbin/nologin
使用ansible的user模块创建用户时,如果创建普通用户可以不加system=no,指定shell类型也可以不加,默认就是/bin/bash
如果创建的是程序用户,一定要声明system=yes,声明shell的类型,shell=/sbin/nologin
也可以指定UID的方式,给用户分配一个uid

group模块:

用户组的管理模块:

name:必须要有

gid:设置组的id

ansible不适用交互式的命令

ping模块:

bash 复制代码
ansible 192.168.211.20 -m ping 

只有在/etc/ansible/hosts文件当中声明的主机,ansible的服务端才可以进行远程操作

host模块

bash 复制代码
ansible 192.168.211.20 -m hostname  -a 'name=test2'

copy模块

用于复制指定的主机文件到远程主机的模块

常用的参数:

dest:指出要复制的文件在哪,必须使用觉得路径。如果源目标是目录,指目标也是目录,如果目标文件存在,会覆盖原有内容

src:复制分件的源,最好使用绝对路径,源目标是目录,指目标也是目录

owner:指出文件的所有者

group:指定文件的所在组

content:从主机复制到指定的内容到目标主机,content就不能使用src

mode 指定复制之后的文件的权限

bash 复制代码
[root@host opt]# ansible 192.168.211.20 -m copy -a 'src=/opt/123 dest=/opt/123.txt owner=test mode=655'

[root@host2 opt]# ls -l
总用量 0
-rw-r-xr-x. 1 test root  0 12月 19 08:51 123.txt

复制目录时,还是完整的目录,即目录当中不能为空,里面最终要有一个文件

file模块,文件模块,跟目录无关

owner group mode

state=link 创建连接文件

bash 复制代码
[root@host guoqi]# ansible 192.168.211.20 -m file -a 'path=/opt/czy.txt state=touch '
[root@host guoqi]# ansible 192.168.211.20 -m file -a 'owner=test group=test mode=777 path=/opt/czy.txt'
[root@host2 opt]# ls -l
总用量 0
-rw-r-xr-x. 1 test root  0 12月 19 08:51 123.txt
drwx--x--x. 4 root root 28 12月 13 12:03 containerd
-rwxrwxrwx. 1 test test  0 12月 19 09:32 czy.txt

yum模块

远程主机上安装与卸载软件包

在目标主机上的操作都是后台运行,不影响其他用户的使用

bash 复制代码
[root@host opt]# ansible 192.168.211.20 -m yum -a 'name=tree'    下载 
[root@host opt]# ansible 192.168.211.20 -m yum -a 'name=tree state=absent'  卸载 

service/systemd模块

name,设定管理服务的名称

state=started | stopped | restarted 管理动作

enabled=true 表示是否设置开机自启,如果不加,默认就是开机不自动启动

runlevel:配合enabled 如果是开机自启,可以设置运行级别。

script模块

运行本地脚本,然后把结果输出到目标主机

setup模块

setup查看目标主机的环境系统(facts),目标节点的系统信息

bash 复制代码
[root@host ~]# ansible 192.168.211.20 -m setup -a 'filter=*ipv4'
查询IP地址 

主机清单:

ansible可以管理上千台主机

192.168.211.6【1:3】

192.168.211.61 62 63

主机清单管理组当中的变量名:

ansible_host 连接时的IP地址

ansible_port 声明对方的连接端口 默认是ssh的22端口

ansible_user 指定连接时使用对方主机的用户名,不指定主机执行ansible的用户即为使用目标主机的用户名

ansible_password 指定连接ssh时的密码 (目标主机的用户密码)

ansible_become 提升用户权限

become root 可以改变用户的权限也可以改变用户的身份

ansible_become_password #指定切换用户的密码

相关推荐
风清再凯1 天前
自动化工具ansible,以及playbook剧本
运维·自动化·ansible
IT乌鸦坐飞机1 天前
ansible部署数据库服务随机启动并创建用户和设置用户有完全权限
数据库·ansible·centos7
遇见火星14 天前
如何使用Ansible一键部署MinIO集群?
ansible
粥周粥14 天前
ANSIBLE
ansible
码农101号14 天前
Linux中ansible模块补充和playbook讲解
linux·运维·ansible
码农101号14 天前
Linux的Ansible软件基础使用讲解和ssh远程连接
ansible
烟雨书信16 天前
ANSIBLE运维自动化管理端部署
运维·自动化·ansible
碎碎-li16 天前
ANSIBLE(运维自动化)
运维·自动化·ansible
@donshu@19 天前
Linux运维-ansible-python开发-获取inventroy信息
linux·运维·ansible
Kendra91922 天前
Ansible
ansible