Ansible自动化运维(一)简介及部署、清单

👨‍🎓博主简介

  🏅云计算领域优质创作者
  🏅华为云开发者社区专家博主
  🏅阿里云开发者社区专家博主
💊交流社区:运维交流社区 欢迎大家的加入!
🐋 希望大家多多支持,我们一起进步!😄
🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗


文章目录

  • 一、自动化运维
    • 1.1 什么是自动化运维
    • 1.2 运维自动化解决的问题
    • 1.3 自动化运维分类工具
    • 1.4 自动化运维工具对比
  • 二、Ansible
    • 2.1 Ansible简介
    • 2.2 Ansible的优势
    • 2.3 Ansible的架构
    • 2.4 Ansible模式
    • 2.5 Ansible部署
      • 2.5.1 Ansible参数
      • 2.5.2 Ansible主机清单
      • 2.5.3 主机清单配置规则
  • 三、相关文章

一、自动化运维

1.1 什么是自动化运维

  自动化运维是指将日常运维的、大量的重复性工作自动化,把手工执行的工作,通过梳理分析,进行逻辑分解,借助平台或工具转为自动化操作。自动化是IT运维工作的升华,IT运维自动化不单纯是一个维护过程,更是一个管理的提升过程,是运维的更高层次,也是未来的发展趋势。

1.2 运维自动化解决的问题

  • 项目整体工作效率提升;

  • 减少人为误操作;

  • 方便信息传递,配置类信息聚合,信息链更完整;

  • 事务留痕,方便跟踪,追述;

  • 运维工作更加轻松、灵动;

  • 提升运维工作价值,管理更多资源,更多服务对象;

1.3 自动化运维分类工具

  • 系统安装:PXE,Cobbler

  • 应用程序配置:Puppet,Ansible,Saltstack

  • 命令执行与控制:Fabric,Func,Ansible

  • 程序发布:git/svn(版本管理),Jenkins/Gitlab-runner(持续集成)

1.4 自动化运维工具对比

此处只对比Puppet,Ansible,Saltstack

PuppetSaltstackAnsible
开发语言Ruby语言Python语言Python语言
是否支持客户端有(salt-ssh无客户端)
是否支持二次开发不支持支持支持
通信加密标准的SSL加密AES加密OpenSSH
平台支持AIX , BSD, HP-UX, Linux , Mac OSX , Solaris, WindowsBSD, Linux , Mac OS X , Solaris, WindowsAIX , BSD , HP-UX , Linux , Mac OS X , Solaris
是否提供web UI商用提供
配置文件语法Ruby语法格式YAMLYAML
命令行执行不支持(配置实现)支持支持

二、Ansible

2.1 Ansible简介

  Ansible是一款使用Python开发,模块化,依赖于ssh协议实现的自动化统一配置管理工具,自动化主要体现在Ansible集成了丰富模块以及功能组件,可以通过一个命令完成一系列的操作,进而能减少重复性的工作和维护成本,可以提高工作效率。

官网地址:www.ansible.com

2.2 Ansible的优势

  • 安装部署简单(主控端安装ansible,不需要额外安装客户端)
  • 基于ssh现有协议实现的 (1.3以上)
  • Ansible没有守护进程,不需要启动
  • 日志集中在主控端,方便错误排查
  • 简单易用,不需要有编程基础
  • 通过模块实现,功能强大

2.3 Ansible的架构

在这里插入图片描述

1、主机清单Inventory定义Ansible需要操作主机的范围

2、剧本Playbook Ansible的配置文件,将多个任务定义在剧本中,由ansible自动执行

3、核心模块Core Modules连接主机实现操作, 它依赖于具体的模块来做具体的事情

4、自定义模块Custom Modules根据自己的需求编写具体的模块

5、连接插件Connection Plugins用于连接主机 用来连接被管理端

6、插件Plugins完成模块功能的补充

最重要的一点是:Ansible是模块化的,它所有的操作都依赖于模块。

2.4 Ansible模式

Ansible中有两种模式:分别是ad-hoc模式和playbook模式;

  • ad-hoc:简而言之,就是“临时命令”,不会保存;

  • playbook:翻译过来就是剧本,在文件中保存执行的流程;

Ansible与SaltStack对比:

相同点:

1.都是使用python语言开发的

2.都具有二次开发的特性

3.执行命令都支持Ad-hoc模式 (临时命令,执行完就返回)

4.都可以通过YAML格式文件批量执行

5.返回的结果都是JSON数据,便于后续处理

不同点:

1.Ansible部署更简单,没有客户端,而Saltstack有客户端;

2.Saltstack的响应速度要比Ansible更快;Ansible通过SSH协议实现,Saltstack使用了ZeroMQ实现通信;

3.Ansible更加安全,SSH加密传输

4.Saltstack对于Windows支持更友好,Ansible通过Power Shell来管理Windows

5.Ansible维护简单,没有客户端,没有守护进程;saltstack需要有Master和minion,主机要启动一个守护进程。

2.5 Ansible部署

Ansible部署时直接使用阿里云的基础源与epel扩展源可以直接安装;

# 先拉取epel扩展源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo# 更新yum源
yum makecache fast# 安装Ansible
yum -y install ansible# 查看Ansible版本
[root@localhost ~]# ansible --versionansible 2.9.27config file = /etc/ansible/ansible.cfgconfigured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']ansible python module location = /usr/lib/python2.7/site-packages/ansibleexecutable location = /usr/bin/ansiblepython version = 2.7.5 (default, Aug  7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]

在这里插入图片描述

2.5.1 Ansible参数

  • 常用参数
-m          #指定使用的模块名称,不指定默认使用command模块
-a          #使用的模块参数,模块的具体动作;指定要执行的具体命令
--syntax-check      #验证语法
  • 不常用参数
#不常用参数
--version   #ansible版本信息
-v          #显示详细信息
-i          #主机清单文件路径,默认是在/etc/ansible/hosts
-k          #提示输入ssh密码,而不使用基于ssh的密钥认证
-C          #模拟执行测试,但不会真的执行
-T          #执行命令的超时
-f  		#一次返回几个结果
  • ansible帮助命令
ansible-doc 		#帮助命令 
ansible-doc -l   	#列出所以的模块
ansible-doc 模块名   #查看模块的详细信息
ansible-doc 模块名 -s  #查看模块的选项使用说明

2.5.2 Ansible主机清单

主机资产清单,用于定义被管理主机的认证信息, 例如ssh登录用户名、密码以及key相关信息。

# 查看ansible配置文件路径
[root@localhost ~]# rpm -qc ansible
/etc/ansible/ansible.cfg
/etc/ansible/hosts

主机清单位置:默认是/etc/ansible/hosts

ansible -i 指定主机清单

在ansible配置文件ansible.cfg中指定默认的主机清单文件,文件路径:/etc/ansible/ansible.cfg

  • ansible.cfg常用配置解析
[defaults]
#inventory      = /etc/ansible/hosts      #主机列表配置文件
#library        = /usr/share/my_modules/  #库文件存放目录
#remote_tmp     = ~/.ansible/tmp          #临时py文件存放在远程主机目录
#local_tmp      = ~/.ansible/tmp          #本机的临时执行目录
#forks          = 5                       #默认并发数
#sudo_user      = root                    #默认sudo用户
#ask_sudo_pass = True                     #每次执行是否询问sudo的ssh密码
#ask_pass      = True                     #每次执行是否询问ssh密码
#remote_port    = 22                      #远程主机端口
host_key_checking = False                 #跳过检查主机指纹
log_path = /var/log/ansible.log           #ansible日志#普通用户提权操作
[privilege_escalation]
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False

如果不配置host_key_checking log_path,会导致报错;
不配置host_key_checking 会导致,执行ansible命令的时候报错:

172.16.11.209 | FAILED | rc=-1 >>
Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host.

配置 log_path 是为了更好的排查问题所在;

2.5.3 主机清单配置规则

(在/etc/ansible/hosts中配置)

主机:

1.可以使用主机名(域名)或IP地址

2.支持主机名通配以及正则表达式

3.支持指定主机定义不同的变量,包括密码,端口号,用户等等

1)单主机配置

# 方式一: ip + 端口 + 用户名 + 用户密码
[root@localhost ansible]# vim /etc/ansible/hosts 
[web01]
172.16.11.209 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123123'
[web02]
172.16.10.232 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123123'# 测试:ansible 主机名 -m 指定模块
[root@localhost ansible]# ansible web01 -m ping
172.16.11.209 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}[root@localhost ansible]# ansible web02 -m ping
172.16.10.232 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}

在这里插入图片描述

如果遇到以下报错:

在这里插入图片描述

在ansible.cfg配置文件中开启这两个:(将注释注销了)

host_key_checking = False #跳过检查主机指纹
log_path = /var/log/ansible.log #ansible日志

# 方式二: ip + 用户密码
[root@localhost ansible]# vim /etc/ansible/hosts 
[web01]
172.16.11.209 ansible_ssh_pass='123123'
[web02]
172.16.10.232 ansible_ssh_pass='123123'# 测试:ansible 主机名 -m 指定模块
[root@localhost ansible]# ansible web01 -m ping
172.16.11.209 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
[root@localhost ansible]# ansible web02 -m ping
172.16.10.232 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}#没有定义用户时,默认使用当前登录用户;

在这里插入图片描述

2)多主机配置

#IP+端口+密码
[root@localhost ansible]# vim /etc/ansible/hosts 
[web]
172.16.11.209 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123123'
172.16.10.232 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123123'# 测试:ansible 主机名 -m 指定模块
[root@localhost ansible]# ansible web -m ping
172.16.10.232 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
172.16.11.209 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}

在这里插入图片描述

主机组:

1.嵌套 [组名:children]

2.对组定义变量 [组名:vars]

#主机组变量+主机+密码
[root@localhost ansible]# vim /etc/ansible/hosts 
[web_group]
172.16.11.209
172.16.10.232[web_group:vars]
ansible_ssh_pass='123123'# 测试:ansible 主机名 -m 指定模块
[root@localhost ansible]# ansible web_group -m ping
172.16.10.232 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
172.16.11.209 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
#定义多组,多组嵌套# webservers组包括两个子组[apache,nginx]
[root@localhost ansible]# vim /etc/ansible/hosts 
#定义总ip
[web_group]
172.16.11.209
172.16.10.232
172.16.10.129#apache有两台
[apache]
172.16.11.209
172.16.10.232#nginx有一台
[nginx]
172.16.10.129 ansible_ssh_pass='csnginx123'#定义密码
[apache:vars]
ansible_ssh_pass='123123'[web_group:children]
apache
nginx# 测试:ansible 主机名 -m 指定模块
[root@localhost ansible]# ansible web_group -m ping
172.16.11.209 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
172.16.10.232 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
172.16.10.129 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}[root@localhost ansible]# ansible apache -m ping
172.16.11.209 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
172.16.10.232 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}[root@localhost ansible]# ansible nginx -m ping
172.16.10.129 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}

除了可以使用密码连接,也可以配置秘钥,实现免密登陆,此时主机配置文件中不需要指定密码

1.生成密钥对
[root@localhost ansible]# ssh-keygen2.推送公钥
[root@localhost ansible]# ssh-copy-id 172.16.11.209
[root@localhost ansible]# ssh-copy-id 172.16.10.232

这时候配置hosts时就不需要指定密码了。

三、相关文章

文章标题文章链接
Ansible自动化运维(一)简介及部署、清单https://liucy.blog.csdn.net/article/details/133769300
Ansible自动化运维(二)ad-hoc 模式详解https://liucy.blog.csdn.net/article/details/133772023
Ansible自动化运维(三)Playbook 模式详解https://liucy.blog.csdn.net/article/details/133899966
Ansible自动化运维(四)jinja2 模板、Roles角色详解https://liucy.blog.csdn.net/article/details/133994509

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/591043.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue2 - Vue.observable 介绍

目录 1,介绍2,使用场景和 Vue 实例的区别 1,介绍 官网参考 可以让一个对象变成响应式数据。在 Vue 内部就是用它来处理传递给 Vue 的 data 对象,或是在单文件组件中 data() 返回的对象。 var vm new Vue({data: {count: 0} })…

MySQL数据库学习二

2 MySQL InnoDB 锁的基本类型 https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html 官网把锁分成了 8 类。所以我们把前面的两个行级别的锁(Shared and ExclusiveLocks),和两个表级别的锁(Intention Locks)…

游泳耳机到底怎么选?一文说全游泳耳机哪个好!

对于一个热爱游泳的人,每次游泳都希望找到一种好的方式来打发时间,同时也希望能够得到一些锻炼。在尝试了各种游泳装备之后,发现游泳耳机是一个非常不错的选择,不过市面上的游泳耳机鱼龙混杂,所以游泳耳机的选择需要综…

深度学习|2.11 向量化vectorization

2.11 向量化的作用 向量化可以使得向量中的每一个维度的数据进行并行计算,从而加快了神经网络的计算速度。 验证 其他

超市订单管理系统

比较简单的超市订单管理系统

4.28 构建onnx结构模型-Unfold

前言 构建onnx方式通常有两种: 1、通过代码转换成onnx结构,比如pytorch —> onnx 2、通过onnx 自定义结点,图,生成onnx结构 本文主要是简单学习和使用两种不同onnx结构, 下面以 Unfold 结点进行分析 方式 方法…

电子书推荐|VMware 替代与升级攻略:技术路线、产品对比与用户实践

在进行 VMware 国产化替代时,您是否会遇到以下问题: 如何实现 VMware 整体架构/部分组件替换?是否可以不仅“为替换而替换”,而是同时实现架构的升级,带来更多业务价值?哪些国产方案具备 VMware 同等能力&…

vue3+ts+vite自定义组件上传npm流程

1. 创建项目 npm create vite 这里踩坑点: 运行vite生成的vue项目时报错“SyntaxError: Unexpected token ?? at “ 是因为node版本过低 电脑为windows11系统,我当时使用的版本node版本是14.21.3,如下图,后边安装了nvm版本…

PyTorch中常用的工具(3)TensorBoard

文章目录 前言3 可视化工具3.1 TensorBoard 前言 在训练神经网络的过程中需要用到很多的工具,最重要的是数据处理、可视化和GPU加速。本章主要介绍PyTorch在这些方面常用的工具模块,合理使用这些工具可以极大地提高编程效率。 由于内容较多&#xff0c…

【解决】电脑上的WIFI图标不见了咋整?

相信不少同学都遇到过这种情况:电脑上的wifi图标莫名不见了,甚至有时候还是在使用的中途突然断网消失的。 遇到这种情况一般有两种解决方案: 1. 在开机状态下长按电源键30秒以上 这种办法应该是给主板放电,一般应用在wifi6上面。…

计算机视觉与自然语言处理(Open AI)

1.语音识别技术 语音识别是将语音转换为文本的技术, 是自然语言处理的一个分支。通过特征的提取、模式的匹配将语音信号变为文本或命令,以实现机器识别和理解语音。 按照应用场景的不同,可以大致分为三类; • 电信级系统应用&…

树莓派(linux)使用Motion动作捕捉或实时获取视频

测试摄像头 查看系统是否识别了摄像头 $ lsusb 测试摄像头抓图(拍照) 安装 fswebcam sudo apt-get install fswebcam 抓拍一张图,存放与当前目录,并保存为 jpg 格式。 fswebcam /dev/video0 ./img1.jpg 查看摄像头效果 安装 luvcview …

Web前端第9章思维导图

本章内容是关于CSS样式属性,包含CSS单位、CSS字体样式、CSS文本样式、CSS颜色与背景、CSS列表样式、CSS盒模型。重点在于CSS盒模型、CSS文本样式、CSS字体样式。 1. CSS单位 绝对单位 磅(pt),pica(pc)、c…

自动医疗检查仓:未来医疗的新篇章

自动医疗检查仓:未来医疗的新篇章 随着科技的飞速发展,医疗行业正经历着前所未有的变革。其中,自动医疗检查仓作为近年来备受瞩目的创新技术,正在逐渐改变我们对医疗服务的认知和体验。本文将对自动医疗检查仓进行深入剖析,从其技术原理、应用场景到未来发展趋势等方面展…

深度学习核心技术与实践之自然语言处理篇

非书中全部内容,只是写了些自认为有收获的部分。 自然语言处理简介 NLP的难点 (1)语言有很多复杂的情况,比如歧义、省略、指代、重复、更正、倒序、反语等 (2)歧义至少有如下几种: …

十大排序总结之——冒泡排序、插入排序

同样,这两几乎也是被淘汰了的算法,尽管它们是稳定的,但是时间复杂度没人喜欢,了解一下就好,没啥好说的,注意最后一句话就行了 一,冒泡排序 1. 算法步骤 共n-1趟,谁两敢冒泡就换了…

十四:爬虫-Redis基础

1、背景 随着互联网大数据时代的来临,传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量。这个时候就需要一种能够快速存取数据的组件来缓解数据库服务I/O的压力,来解决系统性能上的瓶颈。 2、redis是什么 Redis 全称 Remote Dictio…

HarmonyOS4.0系统性深入开发10卡片事件能力说明

卡片事件能力说明 ArkTS卡片中提供了postCardAction()接口用于卡片内部和提供方应用间的交互,当前支持router、message和call三种类型的事件,仅在卡片中可以调用。 接口定义:postCardAction(component: Object, action: Object): void 接口…

建模杂谈系列236 Block Manager

说明 很久没有写了,总是写一半就没空往下写。这次正好有个单独的主题,可以写一下。 内容 1 块的分配 数据应该怎么切分和管理?这没有一个固定的答案,在我的实践中,我觉得一个块(Block)一万条记录是比较合理的。然后…

Android App从备案到上架全过程

不知道大家注意没有,最近几年来,新的移动App想要上架是会非常困难的,并且对于个人开发者和小企业几乎是难如登天,各种备案和审核。但是到底有多难,或许只有上架过的才会有所体会。 首先是目前各大应用市场陆续推出新的声明,各种备案截止日期到12月就要到最后期限责令整改…