首页 > 其他分享 >Ansible 的自动化运维(一)

Ansible 的自动化运维(一)

时间:2023-06-24 09:33:36浏览次数:37  
标签:运维 python 主机 ansible Ansible 模块 自动化 ping

Ansible 的自动化运维(一)

原创 运维大爆炸 IT运维大爆炸 2023-06-01 10:48 发表于上海 收录于合集 #自动化3个 #linux系统5个 #linux19个 #服务31个

1、简介

Ansible 是近年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误。

Ansible 通过本身集成的非常丰富的模块可以实现各种管理任务,其自带模块超过上千个。更为重要的是,它操作非常简单,即使小白也可以轻松上手,但它提供的功能又非常丰富,在运维领域,几乎可以做任何事。

2、自动化运维应用场景

  • 文件传输

  • 应用部署

  • 配置管理

  • 人物流编排 (先进先出,后进后出,类似于消息队列)

3、常用的自动化运维工具(打开图片进行介绍)

  • Ansible:python,Agentless,中小型应用环境

  • Saltstack:python,一般需部署agent,执行效率更高

  • Puppet:ruby, 功能强大,配置复杂,重型,适合大型环境

  • Fabric:python,agentless

  • Chef:ruby,国内应用少

  • Cfengine

  • func

#git地址查看
https://github.com/ansible/ansible

https://github.com/saltstack/salt

同类自动化工具GitHub关注程序:

图片

4、Ansible发展史

Michael DeHaan( Cobbler 与 Func 作者)名称来自《安德的游戏》中跨越时空的即时通信工具2012-03-09,发布0.0.1版,2015-10-17,Red Hat宣布收购官网:https://www.ansible.com/官方文档:https://docs.ansible.com/。

5、Ansible特性

  • 模块化:调用特定的模块完成特定任务,支持自定义模块,可使用任何编程语言写模块。

  • Paramiko(python对ssh的实现),PyYAML,Jinja2(模板语言)三个关键模块。

  • 基于Python语言实现。

  • 部署简单,基于python和SSH(默认已安装),agentless,无需代理不依赖PKI(无需ssl)

  • 安全,基于OpenSSH。

  • 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况。

  • 支持playbook编排任务,YAML格式,编排任务,支持丰富的数据结构。

6、ansibel架构

图片

ansible的作用以及工作结构
1、ansible简介:
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,
实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
主要包括:
  (1)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
  (2)、playbook:剧本执行多个任务时,让节点一次性运行多个任务。
  (3)、各种模块核心模块、command模块、自定义模块;
  (4)、借助于插件完成记录日志邮件等功能;
  (5)、连接插件connection plugins:负责和被监控端实现通信;

2、ansible的架构:连接其他主机默认使用ssh协议;

7、Ansible工作原理

图片

ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件。
INVENTORY:Ansible管理主机的清单 /etc/anaible/hosts。
MODULES:Ansible执行命令的功能模块,多数为内置核心模块,也可自定义(通常由python编写,也可以使用解释型语音,如:shell、Ruby)。
PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用。
API:    供第三方程序调用的应用程序编程接口。
ANSIBLE:组合INVENTORY、API、MODULES、PLUGINS的绿框,可以理解为是ansible命令工具,其为核心执行工具。

8、注意事项

  • 执行ansible的主机一般称为管理端、主控端、中控、master或者堡垒机。

  • 主控端Python版本需要2.6或以上。

  • 被控端版本小于2.4,需要安装python-simplejson。

  • 被控端如开启SElinux需要安装libselinux-python。

  • windows不能做为主控端。

9、安装方式

参考安装:https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html

#rpm包安装: EPEL源
  yum install ansible

#编译安装:
  yum -y install python-jinja2 PyYAML python-paramiko python-babel
  python-crypto
  tar xf ansible-1.5.4.tar.gz
   cd ansible-1.5.4
  python setup.py build
  python setup.py install
   mkdir /etc/ansible
   cp -r examples/* /etc/ansible


#Git方式:
   git clone git://github.com/ansible/ansible.git --recursive
   cd ./ansible
   source ./hacking/env-setup

#pip安装:pip是安装Python包的管理器,类似yum
  yum install python-pip python-devel
  yum install gcc glibc-devel zibl-devel rpm-bulid openssl-devel
  pip install --upgrade pip
  pip install ansible --upgrade

#确认安装:
  ansible --version

10、ansible 配置文件

#配置文件
/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特征
/etc/ansible/hosts   主机清单
/etc/ansible/roles/   存放角色的目录


#主配置文件
Ansible 配置文件/etc/ansible/ansible.cfg (一般保持默认)

vim /etc/ansible/ansible.cfg

[defaults]
#inventory     = /etc/ansible/hosts     # 主机列表配置文件
#library       = /usr/share/my_modules/ # 库文件存放目录
#remote_tmp   = $HOME/.ansible/tmp     # 临时py命令文件存放在远程主机目录
#local_tmp     = $HOME/.ansible/tmp     # 本机的临时命令执行目录  
#forks         = 5                       # 默认并发数,同时可以执行5次
#sudo_user     = root                   # 默认sudo 用户
#ask_sudo_pass = True                   # 每次执行ansible命令是否询问ssh密码
#ask_pass     = True                   # 每次执行ansible命令是否询问ssh口令
#remote_port   = 22                     # 远程主机的端口号(默认22)

建议优化项:
host_key_checking = False               # 检查对应服务器的host_key,建议取消注释
log_path=/var/log/ansible.log           # 日志文件,建议取消注释
module_name   = command                 # 默认模块

11、Ansible相关工具

#程序
/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界面与用户交互的执行工具

#利用ansible实现管理主机的主要方式
- Ad-Hoc 即利用ansible命令,主要用于临时命令使用场景。
- Ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有前期的规划过程。

12、inventory主机清单

ansible的主要功能在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命令。

默认inventory file为/etc/ansible/hosts,inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成。

[wd]
117.50.163.139 ansible_connection=local #指定本地连接,无需ssh配置
[db]
123.60.92.30 ansible_port=22 ansible_user=root
124.221.97.88:22
[web]
124.221.97.[87:88]

#主机清单格式
inventory文件遵循INI文件风格,中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组中,此外,目标主机使用了非默认的ssh端口,还可以在主机名称后面使用冒号加端口来表明。

13、主机列表

#ansible的Host-pattern
匹配主机的列表
  All :表示所有Inventory中的所有主机
      ansible all -m ping
  * :通配符
      ansible "*" -m ping (*表示所有主机)
      ansible "123.60.92.3*" -m ping
      ansible "*db" -m ping
  或关系 ":"
      ansible "web:db" -m ping
      ansible "123.60.92.30:124.221.97.88" -m ping
  逻辑与 ":&"
      ansible 'web:&db' -m ping
      在websrvs组并且在dbsrvs组中的主机
  逻辑非 ":!"
      ansible 'web:!db' -m ping
      在websrvs组,但不在dbsrvs组中的主机
      注意:此处为单引号
  综合逻辑
      ansible 'webs:db:!wd' –m ping
  正则表达式
      ansible "~(web|db)*" -m ping

14、ansible使用方法

#查看版本
[root@10-60-249-255 ~]# ansible --version
ansible 2.9.27
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Apr  2 2020, 13:16:51) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
 
#帮助模块
ansible-doc -l     列出所有模块。
ansible-doc ping   查看指定模块帮助用法。
ansible-doc -s ping 查看指定模块帮助用(简写)。

15、ansible执行过程演示

ansible命令执行过程

  • 加载自己的配置文件 默认/etc/ansible/ansible.cfg。

  • 加载自己对应的模块文件,如command。

  • 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件。

  • 给文件+x执行。

  • 执行并返回结果。

  • 删除临时py文件,sleep 0退出。

#查看对应主机的目录(实时刷新)
watch tree /root/.ansible/tmp

#查看详细信息可以看到做了删除脚本的操作
ansible all -m ping -vvvv

执行状态:(在/etc/ansible/ansible.cfg搜索colors,可以自定义)

  • 绿色:执行成功并且不需要做改变的操作

  • 黄色:执行成功并且对目标主机做变更

  • 红色:执行失败

16、ansible常用模块

2015年底有270个模块,2016年达到540个,2018年1月12号有1378个,2018年7月15号有1852个,2019年5月25号(ansible2.7.10)有2080个,2020年3月2号有3387个模块,虽然模块众多,但最常见的也就30个左右而已,针对特定运维的业务可能只用十几个模块就够了。

常用模块帮组参考文档:

https://docs.ansible.com/ansible/2.9/modules/modules_by_category.html
https://docs.ansible.com/ansible/2.9/modules/list_of_all_modules.html
#我们从里面选择两个模块简单介绍一下
Shell:用shell执行命令,支持通配符
  > ansible all -m shell  -a 'getenforce' 查看SELINUX状态
  这些复杂命令,即使使用shell也可能会失败,
  解决办法:写到脚本时,copy到远程执行,再把需要的结果拉回执行命令的机器

Copy:从主控端复制文件到远程主机
    src : 源文件 指定拷贝文件的本地路径 (如果有/ 则拷贝目录内容,比拷贝目录本身)
    dest: 指定目标路径
    mode: 设置权限
    backup: 备份源文件
    content: 代替src 指定本机文件内容,生成目标主机文件
     
    > ansible web -m copy -a "src=/root/test1.sh dest=/tmp/test2.sh mode=600 backup=yes"
      如果目标存在,默认覆盖,此处指定先备份
    > ansible web -m copy -a "content='test content\nxxx' dest=/tmp/test.txt"
      指定内容,直接生成目标文件

欢迎大家扫码关注:

图片

本公众号只写原创,不接广告、不接广告、不接广告。下期小伙伴想学习什么技术,可以私信发我吆。

图片

 

运维大爆炸

赞赏二维码喜欢作者

收录于合集 #自动化  3个 下一篇Ansible 的自动化运维(二)文件加密 阅读 295   IT运维大爆炸 125篇原创内容 收藏此内容的人还喜欢   Postman进阶篇(八)-使用postman抓包并批量保存接口     软件测试必备技能 不看的原因   Earthworm-EW内网穿透工具/资源分享     在社会的拍打中挣扎着寻找希望 不看的原因   Linux内核同步机制spinlock     嵌入式Linux开发 不看的原因     关注后可发消息    

标签:运维,python,主机,ansible,Ansible,模块,自动化,ping
From: https://www.cnblogs.com/cherishthepresent/p/17500706.html

相关文章

  • 读发布!设计与部署稳定的分布式系统(第2版)笔记10_自动化和缓慢的响应
    1. 工业机器人1.1. 具有多层防护措施,防止对人员、机器和设施造成损害1.2. 防护措施能限制机器人的动作和传感器的感知1.3. 机械臂的旋转范围会远远小于它可以达到的全部运动范围2. 自动化2.1. 它更像是工业机器人2.1.1. 掌握控制层感知系统的当前状态2.1.2. 将其......
  • Automatic quality of generated text Evaluation for Large Language Models,针对大模
    一、LLM生成结果自动化评测的技术挑战和研发背景LargeLanguageModels(LLMs)haverecentlygrownrapidlyandtheyhavethepotentialtoleadtheAItransformation.ItiscriticaltoevaluateLLMsaccuratelybecause: Highqualityrequirementsforgenerativere......
  • 自动化机器学习(AutoML)文献/工具/项目资源大列表分享
        本文整理了与自动化机器学习相关的经典论文、开源工具、项目、免费经典书籍、会议、经典文章和其他资源的列表。AutoML介绍   AutoML是使用机器学习方法和过程来自动化机器学习系统并使其更容易访问的相关的工具和技术。它存在了几十年,所以不是一个全新的想法。   ......
  • ansible部署与实践
    自动化工具ansible部署和实践原创 对点 DevOps云技术栈 2023-06-1623:26 发表于广东收录于合集#ansible1个1介绍和部署1.1介绍ansible的功能ansible是一个基于Python开发的自动化运维工具,基于ssh协议实现远程管理,可以实现多种批量管理操作.批量系统配......
  • 使用自动化和多云:如何简化云原生应用程序的开发和部署
    目录1.引言2.技术原理及概念2.1基本概念解释2.2技术原理介绍2.3相关技术比较3.实现步骤与流程3.1准备工作:环境配置与依赖安装3.2核心模块实现3.3集成与测试4.应用示例与代码实现讲解4.1应用场景介绍4.2应用实例分析4.3核心代码实现5.优化与改进5.1性能优化5.2可扩......
  • Jenkins + Jenkinsfile + Go自动化Pipeline进行部署
    环境准备(因内容繁琐请自行搭建或问度娘)俺也会逐步更新相关文章Jenkins环境jenkins凭据管理Pipeline语法安装钉钉插件并配置钉钉机器人linux服务器go本地目录结构(微服务)服务器文件目录/home/ubuntuJenkinsfile文件文件名为: Jenkinsfilepipeline{agentanyenvironm......
  • POSTGRESQL 自动搜索所有逻辑库中的无用索引自动化脚本实现
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。前两天腾出点时间,打算整理一下POSTGRESQL公司的数据库的无用的索引的问题,写了一个SQL通过SQL来获取这些数据库的无用索引,但头......
  • 分布式系统运维四个黄金指标是否MECE?
    当我们设计复杂系统时,生产环境系统的可观察性是必须的,期望通过观察告诉我们什么时候,哪里出现了问题。平时了解服务运行状况。异常时,可发现服务故障,并定位故障原因。事后,对异常点做分析,看是否在高峰期发生,或者持续更久,是否会出事故,如何解决。运维黄金指标观察那些指标,按照《SRE:Googl......
  • 使用TensorFlow进行自动化测试与部署
    目录标题:《使用TensorFlow进行自动化测试与部署》背景介绍:随着人工智能和机器学习技术的快速发展,TensorFlow成为了一个广泛应用的深度学习框架,被广泛用于构建神经网络、图像识别、自然语言处理等应用。在深度学习应用中,测试和部署非常重要,因为测试和部署是保证应用程序质量......
  • 自动化平台总结(httprunner+djangorestframework+python3+Mysql+Vue)【基础构思】
    一、前言最近从零搭建了一个自动化测试平台,虽然不是第一次从零搭建,但是也从来没有进行过这类搭建的总结,还是记录一下,搭建过程中的一些问题和方法。方便以后总结和翻阅二、简介搭建的平台使用的是Python3.6,未来有空可能考虑加个java版本。前端用的Vue,主体是httprunner2.......