Ansible

本文介绍Ansible自动化运维工具的基础知识,包括其主要功能、特点、安装方法及常见模块的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ansible自动化运维逆袭之路

** 什么是Ansible?**

ansible是一款基于python语言开发的自动化运维工具,主要功能有:
 1. 批量执行远程命令,可以对远程的多台主机同时进行命令的执行
 2. 批量安装和配置软件服务,可以对远程的多台主机进行自动化的方法配置和管理各种服务
 3. 编排高级的企业级复杂的IT架构任务,ansible的playbook和role可以轻松实现大型IT架构任务
 4. 提供自动化运维工具的开发API接口,例如:jumpserver工具等就是基于ansible实现自动化管理。
特点:
 1. 基于python语言实现
 2. 模块化: 调用特定的模块完成特定的任务,支持自定义模块
 3. 部署简单
 4. 幂等性:支持多次执行
 5. 支持playbook编排任务,YAML格式,编排任务,支持丰富的数据结构

ansible工作原理以及架构

Ansible 典型的工作方式是通过一个脚本文件(基于 YAML 格式构建的)去控制远端操作系统按照特定的顺序执行相关任务,我们称这个文件为 playbook;

架构图

ansible工作架构图

INVENTORY: Ansible管理主机的清单/etc/ansible/hosts
MODULES: Ansible执行命令的功能模块,多为内置模块使用
PLUGINSl:模块功能的补充,如链接类型插件等
API:供第三方程序调用的应用程序编程接口

ansible之YUM安装

#以centos7为例
安装
yum -y install ansible(机器有源的情况下使用)
检验安装是否成功
ansible --version

ansible之rpm包形式安装

当机器不通外网时使用

Ansible相关文件

主配置文件

修改/etc/ansible/ansible.cfg
host_key_checking = False 修改为True
配置文件中其余地方则不需要修改

主配置文件修改

#第71行
host_key_checking = False #不需要验证主机秘钥 取消#注释

inventory主机清单文件

默认的主机清单文件为/etc/ansible/hosts,在实际的运维工作中也可以自行创建一个hosts文件,不影响使用
inventory 常用参数
ansible_ssh_host 将要连接的远程主机名
ansible_ssh_port ssh端口号,如果不为默认端口,可用此配置
ansible_ssh_user 默认色ssh用户名
ansible_ssh_pass ssh密码
ansible_sudo_pass sudo密码
[webserver] #主机组名
host1 ansible_ssh_user='root' ansible_ssh_pass='666666' ansible_ssh_port='2222' #增加用户名、密码、端口
host2 ansible_ssh_user='root' ansible_ssh_pass='666666' ansible_ssh_port='2222'
host3 ansible_ssh_user='root' ansible_ssh_pass='666666' ansible_ssh_port='2222'
host4 ansible_ssh_user='root' ansible_ssh_pass='666666' ansible_ssh_port='2222'

Ansible实现管理的主要方式

ansible Ad-Hoc(点对点模式) 利用ansible命令执行操作
Role(角色) 编写playbook剧本执行操作

模块使用帮助手册

ansibe-doc -l 列出可用模块
asnible-doc -s 显示知道模块的playbook片段

常用参数

1、-i  当采用自定义hosts文件时,则在执行ansible任务时需要添加-i参数

2、-m  指定使用的模块

3、-k  执行ansible任务时提示输入被控主机密码

4、-v/-vvv 显示ansible的执行过程,-vvv比-v更详细

5、-C 测试yaml文件不执行

6、-e 当在独立的yml文件中定义了变量时,在执行时采用-e 变量名:变量值来操作

7、--list 显示主机列表

8、-T 执行命令的超时时间

9、-u 执行远程执行的用户

10、-b 代替旧版的sudo切换

11、ansible-doc --help  Ansible查看帮助,等价于linux的man命令

12、ansible-doc -s 模块名  查看指定模块的帮助语法 -l 查看所有模块的帮助语法

13、ansible-galaxy init xxx  快速创建一个角色适用于编写role任务时使用

常用模块

1、command模块
功能: 在远程主机执行命令,此为默认模块,不具有幂等性
ansible -i hosts all -m command -a "systemctl start nginx"
2、shell模块
功能: 执行shell命令。支持各种符号
ansible -i hosts -m shell -a "echo $HOSTNAME"
3、script模块
功能: 在远程主机上执行ansible服务器上的脚本(无需执行权限)
ansible -i hosts -m script -a /export/test.sh
4、copy模块
功能: 从ansible服务器复制文件到远程主机
	 可以在使用copy模块时使用owner、mode、backup。当目标文件存在时,先指定备份
ansible -i hosts -m copy -a "src=原文件路径 dest=目标文件路径 owner=属主 mode=xxx  backup=yes" 
5、file模块
功能: 设置文件属性,创建文件或目录、软链接等
ansible -i hosts -m file -a 'path=要创建的文件或目录 state=touch(directory)' 创建文件或目录
ansible -i hosts -m file -a 'src=原文件路径 path=软链接文件路径 state=link' 创建软链接 
ansible -i hosts -m file -a "path=目录 state=directory owner=xx group=xx" 递归修改目录属性,但不递归至子目录
ansible -i hosts -m file -a "path=目录 state=directory owner=xx group=xx recurse=yes" 递归修改目录属性,同时递归至子目录
6、unarchive模块
功能: 解包解压缩
用法: 
    将ansible服务器上的压缩包传到远程机后解压至特定目录(remote_src: 当为yes时代表文件在远程主机上,为no时代表文件在ansible主机上)
    ansible -i hosts -m unarchive -a 'src=压缩包原路径 dest=压缩包解压的目标路径 remote_src=no'
    将远程主机上的某个压缩包解压到指定路径下
    ansible -i hosts -m unarchive -a 'src=压缩包原路径 dest=压缩包解压的目标路径 remote_src=yes'
7、lineinfile模块
功能1: 在配置文件中循环添加n行配置文件
用法:
- name: add hosts
  lineinfile:
    path: /xx/xx #要添加文件的路径
    line: "{{ item }}" #要循环添加的文件定义为变量,调用下边定义的with_items
    insertafter: 'AFTER THIS FILE' #添加后的格式
    state: present #添加 absent#删除
  with_items: #定义的变量值 #循环有两种方式with_items && loop
    - 'xxx'
    - 'xxx'
功能2: 检查配置文件中是否有对应的文件内容,如果有则进行替换,没有则不进行操作
用法:
---
- name: Ensure /etc/hosts.allow has the correct sshd entry
  hosts: all
  become: yes #这个参数表示以超级用户权限运行任务,因为修改 /etc/hosts.allow 需要 root 权限。
  tasks:
    - name: Ensure the correct sshd entry is present in /etc/hosts.allow
      lineinfile:
        path: /etc/hosts.allow
        regexp: '^sshd:10\.192\.10\.0/255\.255\.255\.0:allow'
        line: 'sshd:10.192.10.0/255.255.255.128:allow'
        backrefs: yes
参数详解:
	backrefs:
		当backrefs为no时,如果regex没有匹配到行,则添加一行,如果Regx匹配到行,则修改该行
		当backrefs为yes时,如果regex没有匹配到行,则保持原文件不变,如果regex匹配到行,则修改该行
		backrefs默认为no,所以上面那个示例中,我们没有配置backrefs,而默认没有匹配,则修改。
	backup:
		是否备份原文件,默认为no
	
8、cron模块
功能: 定时任务模块
用法:
	####添加计划任务
	ansible -i hosts all -m cron -a 'name="synctime" job="/usr/sbin/ntpdate 1.2.3.4" minute=*/10'
	###删除计划任务
	ansible -i hosts all -m cron -a 'name="synctime" state=absent'
9、setup模块
功能: 获取服务器相关信息
用法: 
	ansible -i host all -m setup -a "filter=xxxx" #xxx用下方的替换即可
    ansible_all_ipv4_addresses:仅显示ipv4的信息。
    ansible_devices:仅显示磁盘设备信息。
    ansible_distribution:显示是什么系统,例:centos,suse等。
    ansible_distribution_major_version:显示是系统主版本。
    ansible_distribution_version:仅显示系统版本。
    ansible_machine:显示系统类型,例:32位,还是64位。
    ansible_eth0:仅显示eth0的信息。
    ansible_hostname:仅显示主机名。
    ansible_kernel:仅显示内核版本。
    ansible_lvm:显示lvm相关信息。
    ansible_memtotal_mb:显示系统总内存。
    ansible_memfree_mb:显示可用系统内存。
    ansible_memory_mb:详细显示内存情况。
    ansible_swaptotal_mb:显示总的swap内存。
    ansible_swapfree_mb:显示swap内存的可用内存。
    ansible_mounts:显示系统磁盘挂载情况。
    ansible_processor:显示cpu个数(具体显示每个cpu的型号)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值