Ansible 运维自动化工具(1)

本文详细介绍了传统运维的痛点以及自动化运维的重要性,重点解析了Ansible这一自动化工具的优势,如无需客户端、轻量级、幂等性等。文章列举了Ansible与其他自动化工具如Puppet、SaltStack的对比,以及Ansible的安装、配置和常用模块的使用,如command、shell、file、yum、cron、service、user等。此外,还提到了Ansible的setup模块和自动化运维的目标,强调了其在批量服务器管理和配置中的作用。

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

传统运维

        传统运维工作比较繁琐,尤其是新的系统上线的场景,一切都是从零开始,包括虚拟机的创建,主机名的修改,系统的初始化等等,在机器不多的情况下人工还能应付的过来,如果有上百台机器呢?最初也是用堆人的方法来做的。但这样的方式出错率高,而且有时还会遗漏。只能通过相互检查的方式来验证,但这样就会花费更多的时间,相应的时间/人工成本也会上升。人工的方式因个人部署习惯千差万别,导致一些项目难以维护。

自动运维 

没有专门的工具为我们做这些事情,使用脚本语言( Python Shell
逐渐有了运维自动化的一些工具,比如 Fabric Puppet Chef SaltStack Ansible
自动化运维平台。

 运维自动化的目标

1、组件故障无需人工干预自动修复

2、出现异常人工一键干预

3、监控运维故障自动恢复

为啥会选择Ansible

相对 puppet saltstack ansible 无需客户端,更 轻量级
Ansible 甚至都不用启动服务,仅仅只是一个工具,可以很轻松的实现分布式扩展
强的远程命令执行操作
不输于 puppet saltstack 的其他功能

名称

优势

劣势

成本

Puppet

模块由 Ruby Ruby 子集编写
push 命令可以即可触发变更
Web 界面生成处理报表、资源清单、实时节点管理
代理运行端进行详细、深入的报告和对节点进行配置
相对其他工具较复杂,需学习 Puppet DSL Ruby
安装过程缺少错误校验和产生错误报表
开源软件免费
puppet 企业版每年内个节点花费约¥ 100

SaltStack

状态文件可用简单 YAML 配置模块或复杂的 Python/ PyDSL 脚本
与客户端可以基于 SSH 或在被管节点安装代理
Web 界面可看到运行的工作、 minion 状态、事件日志、可在客户端执行命令
扩展能力极强
Web 界面像毒药竞争产品不稳定与相对不完善
缺乏生成深度报告的能力

开源软件免费
SaltStack 企业版每年内个节点花费约¥ 150 ,随着数量增加相应的会有折扣

Ansible

模块可以用任何语言开发
被管节点不需要安装代理软件
Web 管理界面、可配置用户、组、资源清单和执行 Playbook
安装、运行极其简单
对备管理节点为 Windows 有待加强
Web 管理界面是内置的 Ansible 的一部分
需导入资源清单
执行效率较低

开源版本免费
Ansible Tower 小于 10 台被管理节点免费
超过 10 台后每年每台需支付¥ 100~$250 的支持服务费用

Ansible特性

模块化:调用特定的模块,完成特定的任务
Paramiko (Python ssh 的实现 ) PyYaml Jinja2( 模板语言 ) 个关键模块
支持自定义模块,可使用任何编程语言写模块
基于 Python 语言实现
部署简单,基于 python SSH( 默认已安装 ) agentless ,无需代理不依赖 KPI (无需 SSL
安全,基于 OpenSSH
等性:一个任务执行 1 遍和执行 n 遍效果一样,不因重复执行带来意外情况
支持 playbook 编排任务, YAML 格式,编排任务,支持丰富的数据结构
较强大的多层解决方案 role
Ansible 简介

官方介绍“Ansible is Simple IT Automation——简单的自动化IT工具。这个工具的目标有这么几项:

自动化部署 APP
自动化管理配置项
自动化的持续交付
自动化的云服务管理

 Ansible安装

yum安装:

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo

EPEL:yum -y install epel-release

yum install ansible -y

pip安装:

pip是安装Python包的管理器,类似yum

yum install python-pip python-devel

yum install gcc glibc-devel zibl-devel rpm-bulid openssl-devel

确认安装: ansible --version

 Ansible相关文件

 /etc/ansible/hosts文件格式

 在这里添加的是IP,在下文中都是all,全部的意思,要是在IP上面加组,那就是直接用添加的组,或者直接使用某个IP。

可以直接加要被控机的IP,或者分组后在组的下面写被控机的IP 

Ansible配置文件

连接被管卡机

1、在管理节点生成公钥

 ssh-keygen  路径为:~/.ssh/id_rsa.pub,可以直接enter 免密登陆

2、添加目标节点的SSH认证信息,在管理节点执行如下命令

 ssh-copy-id root@目标节点IP 

 以下是模块的介绍。

Command模块具有局限性

 

 ansible 是工具   all (这里指的是我在配置文件里面写的两个IP)  -m  command是选择这个模块  -a  写后面要跟的参数。command模块不支持特殊符号,也不支持变量。

Shell 模块

shell模块是一个比较强大的模块,是通过/bin/sh执行的,支持特殊符号和变量

 支持正则,也支持特殊符号

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

ansible all -m script -a "/root/a.sh"  # 执行本地的文件,管控机的文件

ansible all -m script -a "creates=/tmp /root/a.sh"  # 判断被控机上的文件

 

 这里可以看到在管控机执行一个都有的脚本文件,被管控机都同时执行

ansible all -m script -a "creates=/root/a.sh /root/a.sh"  # 判断被控机上的文件是否存在,如果不存在,就执行,如果存在,就跳过

Copy模块 

ansible服务器主控端复制文件到远程主机

ansible all -m copy -a "src=/root/f1 dest=/root/tmp/”

#如果目标存在,默认覆盖,此处指定先备份

ansible all -m copy -a “src=/root/test.sh dest=/tmp/test2.sh owner=wang mode=600 backup=yes”

#指定内容,直接生成目标文件

ansible all -m copy -a “content=‘test line1\ntest lin2’ dest=/tmp/test.txt”

#复制/etc/下的文件,不包括/etc/目录本身

ansible all -m copy -a “src=/etc/ dest=/backup”

Fetch模块

从远程主机提取文件至ansible的主控端,copy相反,目前不支持目录

ansible all -m fetch -a ‘src=/root/test1.sh dest=/data/scripts’

file模块   

功能:设置文件属性

#创建空文件

ansible all -m file -a ‘path=/data/test.txt state=touch’

ansible all  -m file -a ‘path=/data/test.txt state=absent’

ansible all  -m file -a ‘path=/root/test.txt owner=linux mod=755’

#创建目录

ansible all  -m file -a ‘path=/data/mysql state=directory owner=mysql group=mysql

#创建软链接

ansible all  -m file -a src=/data/testfile dest=/data/testfile-link state=link’

#删除软链接

ansible all  -m file -a src=/data/testfile dest=/data/testfile-link state=absent’

创建目录

ansible all  -m file -a "path=/transfer state=directory"

yum模块

#enablerepo启用某个源

#name:要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径

State定义软件包状态

-present:安装

-absent:删除

-latest:安装最新的

示例:

ansible all –m yum –a “name=httpd state=present”

 这是被管控的机器,可以通过rpm去查看

ansible all –m yum –a “name=httpd state=latest”

ansible all –m yum –a ‘name=“@Development tools” state=present’

ansible all –m yum –a “name=http://nginx.org/packages/centos/6/noarch/RPMS/

nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present”

cron模块

功能:cron模块主要用于添加、删除、更新操作系统的crontab任务计划

name:任务计划名称

cron_file:替换客户端该用户的任务计划的文件

minute:分(0-59, * ,*/2

hour:时(0-23, * ,*/2

day:日(1-31, * ,*/2

month:月(1-12, * , */2

weekday:周(0-61-7, *

job:任何计划执行的命令

backup:是否备份之前的任务计划

user:新建任务计划的用户

state:指定任务计划presentabsent

#特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),

daily(每天),hourly(每小时)

# 添加时名字必须不同,不加名称为None(crontab -l查看计划任务)

ansible all -m cron -a "minute=12 name=touchfile job='touch /tmp/xiaoqiang.txt'"  # 创建

 定时任务:分钟为12的时候创建一个名字为touchfile job具体的创建命令

ansible all -m cron -a "name=touchfile state=absent"  # 删除

ansible all  -m cron -a "minute=12 name=touchfile2 job='touch /tmp/jason.txt' disabled=yes"  # 注释

ansible all  -m cron -a "name=None state=absent"  # 删除名称为空的计划任务

ansible all  -m cron -a “name=‘check dirs’ hour=5,2 job=ls -alh"  

service模块

功能:实现远程管理服务的生命周期

# 关键参数

enabled #开机启动 yes|no

name #服务名称,必选项

runlevel #运行级别

state  #状态

    started

    stopped

    restarted

    reloaded

ansible all  -m service -a "name=httpd state=started" #启动

ansible all -m service -a "name=nginx state=stopped" #关闭

ansible all  -m service -a "name=keepalived enabled=yes" #设置开机自启动

user模块

# 关键参数

group # 属组

groups  # 附加组

home  # 设置家目录

name  # 用户名

remove  # 删除用户并删除用户的家目录

shell  # 用户登录后的shell

system  # 系统用户

uid  # 用户的id

state #创建或删除

shell #制定用户shell环境

#创建用户,并指定用户的shell,家目录,uid,以及附加

ansible all  -m user -a "name=alex10 shell=/sbin/nologin home=/opt/alex10 uid=3000 groups=root“

 

 可以在被管控机上查到创建的用户

ansible all  -m user -a "name=alex11 shell=/sbin/nologin home=/opt/alex11"

ansible all  -m user -a "name=alex12 system=yes" #创建系统用户

(0是超级用户(root)的标识号centos71~999由系统保留,作为管理账号,普通用户的标识号从500开始)

ansible all  -m user -a "name=alex12 state=absent" #删除用户,单不删除家目录

ansible all  -m user -a "name=alex11 state=absent remove=yes" # 删除用户并删除用户的家目录

hostname模块

ansible all -m shell -a 'hostname'

 ansible all -m shell -a 'hostnamectl  set-hostname localhost'

 setup模块

setup 模块用于收集远程主机的一些基本信息。

filter参数:用于进行条件过滤。如果设置,仅返回匹配过滤条件的信息。

返回的信息非常多,很多情况我们并不需要全部的信息,可以通过过滤获得指定的信息。

ansible all  -m setup -a "filter=ansible_all_ipv4_addresses”

获取对应主机的内存信息

ansible all  -m setup -a "filter=ansible_memory_mb

通过通配符实现模糊匹配,比如以”mb关键字结尾的信息

ansible all  -m setup -a "filter=*mb"

总结:

以上是Ansible自动化工具的一部分,后续还有一期继续写关于自动化运维,

总结一下,自动化运维工具很好的解决了批量新的服务器安装修改文件的好处

格式: ansible + 配置文件里面的IP或者IP所属的组 + -m     +模块  -a  “所要执行的参数”

以上是一些比较常用的模块,大家共同学习

配置文件

/etc/ansible/ansible.cfg    配置文件,配置ansible工作特性(一般无需修改)

/etc/ansible/hosts  主机清单(将被管理的主机放到此文件)

/etc/ansible/roles存放角色的目录

程序

/usr/bin/ansible   主程序,临时命令执行工具

/usr/bin/ansible-doc   查看配置文档,模块功能查看工具

/usr/bin/ansible-galaxy   下载/上传优秀代码或Roles模块的官网平台

/usr/bin/ansible-playbook   定制自动化任务,编排剧本工具

/usr/bin/ansible-pull   远程执行命令的工具

/usr/bin/ansible-vault   文件加密工具

/usr/bin/ansible-console   基于Console界面与用户交互的执行工具

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值