ansible基础

ansible

1.概述

ansible是基于python语言开发,配置管理和部署应用的工具。批量的配置,部署,管理"上千台"主机 (实际一次100台左右),ansible只要在一台主机上就可以对其他主机进行操作。

(1)功能

  • 实现远程连接主机
  • 批量配置,批量操作,ansible可以对主机进行组划分,也可以把名下所有的主机进行划分,进行批量操作
  • 远程自动化运维(脚本--->playbook)

(2)ansible的工作模式

没有固定的客户端,不是C/S

使用模块来进行工作,ansible有很多模块,copy shell... 真正在主机上执行任务的是模块。

(3)ansible的特性

幂等性,计算机中的概念,在幂等操作中,无论执行多少次,结果都是一样的,多次执行相同的操作,不会产生不同的结果。

在ansible中,如果操作符合幂等性,那么不会对目标主机产生额外的副作用。

(4)ansible的组件

  • lnventory 主机清单 主机组

  • modules 模块*

  • plugins 插件

  • playbook 剧本(脚本)*

(5)ansible的优缺点

优点:部署快,只要能上网,或者有源码包,安装部署很简单;基于yaml格式编写的脚本,同一台服务器上多次执行同一个任务没有任何副作用。

缺点:语法要专门学;主机和控制主机必须都是linux,至少有两台服务器,主机和server。

2.安装

#安装ansible (ubuntu系统)

apt -y install ansible #在主机192.168.206.30上安装

#免密登录

ssh-keygen -t rsa

apt -y install sshpass

sshpass -p '1' ssh-copy-id root@192.168.206.50 #-p 登录密码

sshpass -p '1' ssh-copy-id root@192.168.206.55

#配置文件

mkdir /etc/ansible

cd /etc/ansible

vim hosts

[web]

192.168.206.50

[web1]

192.168.206.55

#主机50在web组,主机55在web1组
#如果不想要设置免密登录,可以手动创建ansible.cfg

vim ansible.cfg

[defaults]

host_key_checking = False #禁止使用ssh的秘钥检查

inventory=/etc/ansible/hosts #指定主机清单的文件

forks = 20 #同时可以对多少主机进行配置,默认是5,可以提高执行速度

pipelining = True #减少对ssh会话中的操作,提高性能

strategy = free #任务会立即对下一个主机并行执行,不用等待其他主机完成

retry_files_enabled = False #如果任务失败,禁用自动重试的功能

vim hosts

[web]

192.168.206.5[0:9] #表示50,51,52,53...59

[all:vars] #组内所有主机统一用root登录,登录密码为1,端口为22

ansible_user=root

ansible_password=1

ansible_port=22
#如果是centos系统,yum -y install ansible之后在/etc/ansible下有配置文件

直接修改即可

vim /etc/ansible/ansible.cfg

#71行取消注释

host_key_checking = False

vim hosts

[web]

192.168.206.5[0:9] #表示50,51,52,53...59

[all:vars] #组内所有主机统一用root登录,登录密码为1,端口为22

ansible_user=root

ansible_password=1

ansible_port=22

3.ansible模块

command模块

就是在目标主机执行命令,不支持管道符,也不能使用重定向。----默认模块

ansible all -m command -a 'chdir=/opt tar -xf nginx-1.22.tar.gz'

ansible 固定开头

all:<组名,ip,all,> 声明操作的对象

-m 指定模块

command 就是模块名

-a 指定参数(指定操作)

'chdir=/opt tar -xf nginx-1.22.tar.gz': 具体要执行的命令

chdir=/opt 声明目标主机的目录

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

removes 判断指定的文件是否存在,如果存在,执行后续的操作

shell模块

是command模块的升级,但是可以使用管道符,可以重定向还可以使用连接符链接多个命令。

可以用 && 或者 ; 连接多条命令

cron模块

分、时、日、月、周

minute/hour/day/month/weekday

-m cron

name 计划任务的名称 不是必须的

job 计划执行的命令

state: present 表示添加,默认就是添加,可以不写

absent 表示移除

user和group

-m user

-m group

name 用户名或者组名 必有参数

state=present/absent 创建/删除

uid 数字

gid 数字

shell 默认就是/bin/bash

create_home yes/no 是否替换用户的家目录

remove=yes/no 删除用户时是否删除家目录

password 创建用户的登录密码

system yes/no 表示用户是否是系统用户

copy模块

dest: 文件复制到目标主机的位置

src: 源文件,主机的文件 --->目标主机

mode: 修改目标文件权限

owner: 文件的所有者

group: 文件的所在组

content: 复制输出的内容到目标主机,使用content就不能使用src

如果复制目录,源文件的路径是目录,目标主机的路径也必须是目录才可以复制

file模块

和copy有相似之处,

mode: 修改目标文件权限

owner: 文件的所有者

group: 文件的所在组

path----> 目标主机的文件路径

state:

link 做软连接 touch 创建 absent 删除

#特殊情况下才会有src

src ----> 指定创建的文件为软连接

hostname和ping

hostname 设置目标主机的主机名

ping 测试目标主机的连通性

yum/apt模块---安装和卸载

ansible web -m apt -a 'name=nginx' #安装

ansible web -m apt -a 'name=nginx state=absent' #删除

ansible web -m shell -a 'apt -y install nignx' #安装用shell模块也可以

service模块

也可以用command或者shell模块---相当于systemctl 对服务的状态进行控制

name=软件名

enabled=true--->开机自启

state:

started/stopped/restarted 开/停/重启

runlevel=40 设定开机自启的运行级别,数字越大,优先级越高

#ubuntu安装软件完毕自启,cnetos要设置开机自启

iptables模块

iptables模块 -- 支持centos和ubuntu

firewalld -- 仅支持centos

script模块

指定本地的脚本,然后脚本中的命令在目标主机执行,结果也是输出到目标主机。

创建完脚本后要赋权

setup 模块

收集节点信息,查看目标主机的配置信息

通过facts组件收集

filter是过滤,不加filter就显示全部

相关推荐
暗喻与41 分钟前
判断192.168.1.0/24网络中,当前在线的ip有哪些
网络·tcp/ip·php
九州ip动态1 小时前
运营媒体账号为什么需要住宅IP
网络·网络协议·tcp/ip
大丈夫立于天地间2 小时前
ospf收敛特性及其他的小特性
网络·网络协议·学习·算法·智能路由器·信息与通信
m0_748241702 小时前
C#数据库操作系列---SqlSugar完结篇
网络·数据库·c#
久绊A2 小时前
理解CPU负载与使用率
服务器·网络·数据库·cpu
IT培训中心-竺老师4 小时前
Apache Web服务器技术指南 - 基于Kylin麒麟操作系统
服务器·前端·apache
没有理想的不伤心4 小时前
Apache搭建https服务器
服务器
然然阿然然5 小时前
2025.1.15——二、字符型注入
网络·数据库·sql·学习·网络安全
Danileaf_Guo5 小时前
Ubuntu磁盘空间不足或配置错误时,如何操作扩容?
linux·运维·服务器·ubuntu
大G哥7 小时前
记录一次RPC服务有损上线的分析过程
java·开发语言·网络·网络协议·rpc