Ansible 介绍与实战操作演示

这篇具有很好参考价值的文章主要介绍了Ansible 介绍与实战操作演示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

Ansible 特点:

  • 部署简单,只需要在主控端部署Ansible环境,被控端无需作任何操作

  • 默认使用SSH协议对设备进行管理

  • 主从集中化管理

  • 配置简单、功能强大、扩展性强

  • 支持API及自定义模块、可以通过Python轻松扩展

  • 通过Playbooks来定制强大的配置、状态管理

  • 对云计算平台、大数据都有很好的支持

官方文档:https://docs.ansible.com/ansible/latest/

GitHub地址:https://github.com/ansible/ansible

二、Ansible 架构

Ansible 介绍与实战操作演示,Ansible,ansible,运维,云计算,Powered by 金山文档

上图为ansible的基本架构,从上图可以了解到其由以下部分组成:

  • 核心:ansible

  • 核心模块(Core Modules):这些都是ansible自带的模块

  • 扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块

  • 插件(Plugins):完成模块功能的补充

  • 剧本(Playbooks):ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行

  • 连接插件(Connectior Plugins):ansible基于连接插件连接到各个主机上,虽然ansible是使用ssh连接到各个主机的,但是它还支持其他的连接方法,所以需要有连接插件

  • 主机清单(Host Inventory):定义ansible管理的主机

三、Ansible 工作原理

Ansible 介绍与实战操作演示,Ansible,ansible,运维,云计算,Powered by 金山文档

从上面的图上可以了解到:

  • 管理端支持local 、ssh、zeromq 三种方式连接被管理端,默认使用基于ssh的连接,这部分对应上面架构图中的连接模块;

  • 可以按应用类型等方式进行Host Inventory(主机清单)分类,管理节点通过各类模块实现相应的操作,单个模块,单条命令的批量执行,我们可以称之为ad-hoc;

  • 管理节点可以通过playbooks 实现多个task的集合实现一类功能,如web服务的安装部署、数据库服务器的批量备份等。playbooks我们可以简单的理解为,系统通过组合多条ad-hoc操作的配置文件 。

四、Ansible 安装与基础配置

yum install epel-releaseyum -y install ansibleansible --version
Ansible 介绍与实战操作演示,Ansible,ansible,运维,云计算,Powered by 金山文档

1)开启记录日志

配置文件:/etc/ansible/ansible.cfg

# 去掉前面的'#'号#log_path = /var/log/ansible.log ==> log_path = /var/log/ansible.log

2)去掉第一次连接ssh ask确认

# 第一种(推荐)vi /etc/ansible/ansible.cfg  # 其实就是把#去掉# host_key_checking = False  ==> host_key_checking = False# 第二种vi /etc/ssh/ssh_configStrictHostKeyChecking ask  ==> StrictHostKeyChecking no
Ansible 介绍与实战操作演示,Ansible,ansible,运维,云计算,Powered by 金山文档

五、Ansible 的七个命令

安装完ansible后,发现ansible一共为我们提供了七个指令:ansible、ansible-doc、ansible-galaxy、ansible-lint、ansible-playbook、ansible-pull、ansible-vault。这里我们只查看usage部分,详细部分可以通过 "指令 -h" 的方式获取。

1)ansible

ansible是指令核心部分,其主要用于执行ad-hoc命令,即单条命令。默认后面需要跟主机和选项部分,默认不指定模块时,使用的是command模块。不过默认使用的模块是可以在/etc/ansible/ansible.cfg 中进行修改的#module_name = command。

ansible 192.168.182.130 -a 'date'

2)ansible-doc

该指令用于查看模块信息,常用参数有两个-l 和 -s

#列出所有已安装的模块ansible-doc  -lansible-doc  -l#查看具体某模块的用法,这里如查看command模块ansible-doc  -s command

3)ansible-playbook

ansible-playbook 命令是使用最多的指令,其通过读取playbook 文件后,执行相应的动作,这个后面会做为一个重点来讲。

4)ansible-galaxy

ansible-galaxy 指令用于方便的从https://galaxy.ansible.com/ 站点下载第三方扩展模块,我们可以形象的理解其类似于centos下的yum、python下的pip或easy_install 。如下示例:

ansible-galaxy install aeriscloud.docker

5)ansible-lint

ansible-lint是对playbook的语法进行检查的一个工具。用法如下:

ansible-lint playbook.yml

6)ansible-pull

该指令使用需要谈到ansible的另一种模式,pull 模式,这和我们平常经常用的push模式刚好相反,其适用于以下场景:你有数量巨大的机器需要配置,即使使用非常高的线程还是要花费很多时间;你要在一个没有网络连接的机器上运行Anisble,比如在启动之后安装。

7)ansible-vault

  • ansible-vault 主要应用于配置文件中含有敏感信息,又不希望他能被人看到,vault可以帮你加密/解密这个配置文件,属高级用法。

  • 主要对于playbooks里比如涉及到配置密码或其他变量时,可以通过该指令加密,这样我们通过cat看到的会是一个密码串类的文件,编辑的时候需要输入事先设定的密码才能打开。

  • 这种playbook文件在执行时,需要加上 --ask-vault-pass参数,同样需要输入密码后才能正常执行。

六、Ansible 主要组成部分

1)ansible 命令执行来源

  • USER,普通用户,即system administrator

  • USER -> ansile playbook -> ansible

  • CMDB,(配置管理数据库)API调用

  • PUBLIC / PRIVATE CLOUD API调用

2)ansible 管理方式

  • Ad-Hoc,即ansible命令,主要用于临时命令使用场景

  • Ansible-playbook,主要用于长期规划好的,大型项目的场景,需要有前提的规划
    ansible-playbook(剧本)执行过程:

  • 将已有编排好的任务集写入ansible-playbook

  • 通过ansible-playbook命令分拆任务集至逐条ansible命令,按预定规则逐条执行

3)ansible主要操作对象

  • HOSTS:主机

  • NETWORKING:网络设备

注意事项:

  • 执行ansible的主机一般称为主控端,中控,master或堡垒机

  • 主控端python版本需要在2.6或以上

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

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

  • windows不能作为主控端

七、Ansible 连接被控端方式

1)ssh 密钥

# 生成秘钥ssh-keygen# 将秘钥拷贝到被管理服务器上ssh-copy-id  -i ~/.ssh/id_rsa.pub -p 22 root@192.168.182.130

2)账号密码

1、命令行配置
# -k:交互式ansible -uroot -k 192.168.182.130 -m ping
2、配置文件中配置
# 默认主机配置文件:/etc/ansible/hosts192.168.182.130 ansible_ssh_user=root ansible_ssh_pass=123456[web]192.168.182.130 ansible_ssh_user=root ansible_ssh_pass=123456

常用的配置参数如下:

Ansible 介绍与实战操作演示,Ansible,ansible,运维,云计算,Powered by 金山文档

八、Host Inventory(主机清单)

主机清单配置(默认配置文件:/etc/ansible/hosts)

1)添加被管控节点

192.168.182.110

示例:

# -m:指定模块# -a:指定参数ansible 192.168.182.110 -m pingansible 192.168.182.110 -m shell -a "df -h"
Ansible 介绍与实战操作演示,Ansible,ansible,运维,云计算,Powered by 金山文档

2)配置主机组

# 定义webservers组[webservers]192.168.182.110192.168.182.112

示例:

# -m:指定模块# -a:指定参数ansible webservers -m pingansible webservers -m shell -a "df -h"
Ansible 介绍与实战操作演示,Ansible,ansible,运维,云计算,Powered by 金山文档

3)配置连接用户名和密码

[webservers]192.168.182.130 ansible_ssh_user=root ansible_ssh_pass=123456

常用配置参数如下:

Ansible 介绍与实战操作演示,Ansible,ansible,运维,云计算,Powered by 金山文档

示例:

ansible 192.168.182.130 -m ping
Ansible 介绍与实战操作演示,Ansible,ansible,运维,云计算,Powered by 金山文档

4)子分组

[web]192.168.182.130192.168.182.110[mysql]192.168.182.111# 子分组[nfs:children]webmysql# 对分组统一定义变量[nfs:vars]ansible_ssh_user=rootansible_ssh_pass=123456ansible_ssh_port=22

示例:

ansible nfs -m ping# -o:一行显示ansible nfs -m ping -o
Ansible 介绍与实战操作演示,Ansible,ansible,运维,云计算,Powered by 金山文档

5)自定义主机列表文件

cat>hostlist<<EOF[web]192.168.182.130192.168.182.110[mysql]192.168.182.111# 子分组[nfs:children]webmysql# 对分组统一定义变量[nfs:vars]ansible_ssh_user=rootansible_ssh_pass=123456ansible_ssh_port=22EOF

示例:

# -i:指定主机列表文件ansible -i hostlist nfs -m ping
Ansible 介绍与实战操作演示,Ansible,ansible,运维,云计算,Powered by 金山文档

九、Ad-Hoc(点对点模式)

官方文档:https://docs.ansible.com/ansible/latest/command_guide/intro_adhoc.html

1)简介

ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令,一般测试调试时用的多,ad-hoc简而言之,就是"临时命令"。

2)常用模块

1、command 模块(默认模块)
默认模块,没有shell强大,基本上shell模块都可以支持command模块的功能。

【1】帮助

ansible-doc command# 推荐使用下面这个ansible-doc command -s

【2】参数解释

  • free_form——必须参数,指定需要远程执行的命令。需要说明一点,free_form 参数与其他参数(如果想要使用一个参数,那么则需要为这个参数赋值,也就是name=value模式)并不相同。比如,当我们想要在远程主机上执行 ls 命令时,我们并不需要写成”free_form=ls” ,这样写反而是错误的,因为并没有任何参数的名字是 free_form,当我们想要在远程主机中执行 ls 命令时,直接写成 ls 即可。因为 command 模块的作用是执行命令,所以,任何一个可以在远程主机上执行的命令都可以被称为 free_form。

  • chdir——此参数的作用就是指定一个目录,在执行对应的命令之前,会先进入到 chdir 参数指定的目录中。

  • creates——看到 creates,你可能会从字面上理解这个参数,但是使用这个参数并不会帮助我们创建文件,它的作用是当指定的文件存在时,就不执行对应命令,比如,如果 /testdir/test文件存在,就不执行我们指定的命令。

  • removes——与 creates 参数的作用正好相反,它的作用是当指定的文件不存在时,就不执行对应命令,比如,如果 /testdir/tests 文件不存在,就不执行我们指定的命令,此参数并不会帮助我们删除文件。

【3】示例演示

# 上面命令表示在 web 主机上执行 ls 命令,因为使用的是 root 用户,所以默认情况下,ls 出的结果是 web 主机中 root 用户家目录中的文件列表。ansible web -m command -a "ls"# chdir 参数表示执行命令之前,会先进入到指定的目录中,所以上面命令表示查看 web 主机上 /testdir 目录中的文件列表,返回显示有2个文件。ansible web -m command -a "chdir=/testdir ls"# 下面命令表示 /testdir/testfile1 文件存在于远程主机中,则不执行对应命令。/testdir/testfile3 不存在,才执行”echo test”命令。ansible web -m command -a "creates=/testdir/testfile1 echo test"# 下面命令表示 /testdir/testfile3 文件不存在于远程主机中,则不执行对应命令。/testdir/testfile1 存在,才执行”echo test”命令。ansible web -m command -a "removes=/testdir/testfile1 echo test"
2、shell 模块
shell模块 [执行远程主机的shell/python等脚本]。

【1】查看帮助

ansible-doc shell -s

【2】示例演示

# -o:一行显示# 安装httpdansible web -m shell -a 'yum -y install httpd' -o# 查看时间ansible web -m shell -a 'uptime' -o
3、script 模块
script模块 [在远程主机执行主控端的shell/python等脚本 ]。

【1】查看帮助

ansible-doc script -s

【2】参数解释

  • free_form——必须参数,指定需要执行的脚本,脚本位于 ansible 管理主机本地,并没有具体的一个参数名叫 free_form,具体解释请参考 command 模块。

  • chdir——此参数的作用就是指定一个远程主机中的目录,在执行对应的脚本之前,会先进入到 chdir 参数指定的目录中。

  • creates——使用此参数指定一个远程主机中的文件,当指定的文件存在时,就不执行对应脚本,可参考 command 模块中的解释。

  • removes——使用此参数指定一个远程主机中的文件,当指定的文件不存在时,就不执行对应脚本,可参考 command 模块中的解释。

【3】示例演示

# 下面命令表示 ansible 主机中的 /testdir/testscript.sh 脚本将在 web 主机中执行,执行此脚本之前,会先进入到 web 主机中的 /opt 目录ansible web -m script -a "chdir=/opt /testdir/testscript.sh"# 下面命令表示,web主机中的 /testdir/testfile1文件已经存在,ansible 主机中的 /testdir/testscript.sh 脚本将不会在 web 主机中执行。ansible web -m script -a "creates=/testdir/testfile1 /testdir/testscript.sh"# 下面命令表示,web 主机中的 /testdir/testfile1 文件存在,ansible 主机中的 /testdir/testscript.sh 脚本则会在 web 主机中执行。ansible ansible-demo3 -m script -a "removes=/testdir/testfile1 /testdir/testscript.sh"
4、raw 模块
raw模块 [类似于command模块、支持管道传递]。

【1】查看帮助

ansible-doc raw -s

【2】示例演示

ansible web -m raw -a "ifconfig eth0 |sed -n 2p |awk '{print \$2}' |awk -F: '{print \$2}'"
5、copy 模块
copy 模块 从主控端复制文件到被控端。

【1】查看帮助

ansible-doc copy -s

【2】示例演示

# -a,--args:后面接参数ansible web -m copy -a 'src=/etc/ansible/hosts dest=/tmp/hosts owner=root group=bin mode=777'# backup=yes/no:文件存在且文件内容不一样是否备份,默认不备份ansible web -m copy -a 'src=/etc/ansible/hosts dest=/tmp/hosts owner=root group=bin mode=777 backup=yes'
6、fetch 模块
copy 模块从被控端复制文件到主控端,正好跟copy相反。

【1】查看帮助

ansible-doc fetch -s

【2】示例演示

# 跟copy支持的参数差不多,src:远端主机的目录,dest:主控端目录,其实真正存放的目录在:/tmp/192.168.182.129/tmp/up.sh,会按每台主机分组存放#  This `must' be a file, not a directory:只支持单个文件获取ansible 192.168.182.129 -m fetch -a "src=/etc/fstab dest=/testdir/ansible/"
7、unarchive 模块(解包模块)
unarchive 模块是解包模块。

【1】查看帮助

ansible-doc unarchive -s

【2】参数解释

  • copy——默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件。

  • src——源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no。

  • dest——远程主机上的目标路径。

  • mode——设置解压缩后的文件权限。

【3】示例演示

ansible 192.168.182.129 -m unarchive -a 'src=/testdir/ansible/data.tar.gz dest=/tmp/tmp/'
8、archive模块(打包模块)
unarchive 模块是打包模块。

【1】查看帮助

ansible-doc archive -s

【2】示例演示

# path:主控端目录,format:压缩格式,dest:被控端目录文件'ansible 192.168.182.129 -m archive -a 'path=/tmp/ format=gz dest=/tmp/tmp/t.tar.gz'
9、user 模块

【1】查看帮助

ansible-doc user -s

【2】示例演示

# 创建用户(present:默认,可以不写)ansible web -m user -a 'name=test state=present'# 删除用户(absent)ansible web -m user -a 'name=test state=absent'# 修改密码# 步骤一、生成加密密码echo'777777'|openssl passwd -1 -stdin# 步骤二、修改秘密ansible web -m user -a 'name=test password="$1$Jo5FD9Jr$2QB.BuybbtR35ga4O5o8N."'# 修改shellansible web -m user -a 'name=test shell=/sbin/noglogin append=yes'
10、group 模块

【1】查看帮助

ansible-doc group -s

【2】示例演示

# 创建ansible 192.168.182.129 -m group -a 'name=testgroup system=yes'# 删除ansible 192.168.182.129 -m group -a 'name=testgroup state=absent'
11、yum 模块

【1】查看帮助

ansible-doc yum -s

【2】示例演示

# 升级所有包ansible web -m yum -a 'name="*" state=latest'# 安装apacheansible web -m yum -a 'name="httpd" state=latest'
12、service 模块

【1】查看帮助

ansible-doc service -s

【2】示例演示

ansible web -m service -a 'name=httpd state=started'ansible web -m service -a 'name=httpd state=started enabled=yes'ansible web -m service -a 'name=httpd state=stopped'ansible web -m service -a 'name=httpd state=restarted'ansible web -m service -a 'name=httpd state=started enabled=no'
13、file 模块

【1】查看帮助

ansible-doc file -s

【2】示例演示

# 创建文件ansible web -m file -a 'path=/tmp/88.txt mode=777 state=touch'# 创建目录ansible web -m file -a 'path=/tmp/99 mode=777 state=directory'# 删除ansible web -m file -a 'path=/tmp/99 state=absent'
14、setup 模块

【1】查看帮助

ansible-doc setup -s

【2】示例演示

ansible web -m setupansible web -m setup -a 'filter=ansible_all_ipv4_addresses'
15、cron 模块

【1】查看帮助

ansible-doc cron -s

【2】示例演示

# 创建定时任务ansible 192.168.182.129 -m cron -a 'minute=* weekday=1,3,5,6,7 job="/usr/bin/wall FBI warning" name=warningcron'# 关闭定时任务ansible 192.168.182.129 -m cron -a 'disabled=true job="/usr/bin/wall FBI warning" name=warningcron'# 删除定时任务ansible 192.168.182.129 -m cron -a ' job="/usr/bin/wall FBI warning" name=warningcron state=absent'
16、hostname 模块

【1】查看帮助

ansible-doc hostname -s

【2】示例演示文章来源地址https://www.toymoban.com/news/detail-790063.html

ansible 192.168.182.129 -m hostname -a 'name=192.168.182.129'

到了这里,关于Ansible 介绍与实战操作演示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 自动化运维(二十二)Ansible实战 之Jenkins模块

    Ansible提供了一些模块,可以用来与Jenkins进行交互,执行各种操作,如创建任务、触发构建、获取构建结果等。通过使用这些模块,我们可以将Jenkins的配置和管理集成到Ansible的自动化流程中。 以下是一些常用的Ansible Jenkins模块: 1、jenkins_job模块 jenkins_job模块用于创建、更新或删除

    2024年04月16日
    浏览(42)
  • 自动化运维:Ansible基础与命令行模块操作

    目录 一、理论 1. Ansible 2.部署Ansible自动化运维工具 3.Ansible常用模块 4.hostsinverntory主机清单 二、实验 1.部署Ansible自动化运维工具 2.ansible 命令行模块  3.hostsinverntory主机清单 三、问题 1. ansible远程shell失败  2.组变量查看webservers内主机ip报错 ​编辑  3.组嵌套查看webs内主机ip报

    2024年02月11日
    浏览(34)
  • 自动化运维(二十六)Ansible 实战变量插件和连接插件

     Ansible 支持多种类型的插件,这些插件可以帮助你扩展和定制 Ansible 的功能。每种插件类型都有其特定的用途和应用场景。今天我们一起学习变量插件和连接插件。 Ansible 变量插件允许动态地添加变量到主机或组中,这些变量可以在 playbook 运行时被解析和使用。变量插件可

    2024年04月14日
    浏览(57)
  • [自动化运维工具] Ansible的简单介绍与常用模块详解

    自动化运维工具,也叫 机器管理工具 。 可以实现 批量管理多台(成百上千)主机 ,是应用级别的 跨主机编排工具 。 无客户端agent存在,不需要在被控制的节点上安装额外的客户端应用 通过 ssh协议 与被控制节点通信 基于模块工作的,可以通过模块实现在被控制节点上执

    2024年02月05日
    浏览(81)
  • 从小白到大神之路之学习运维第60天--------Ansible自动化运维工具(安装、操作、简单使用,模块的作用)

    第三阶段基础 时  间:2023年7月13日 参加人:全班人员 内  容: Ansible自动化运维工具 目录 一、Ansible概述 二、Ansible特点 三、Ansible应用 (一)使用者 (二)Ansible工具集合 (三)作用对象 四、Ansible的搭建 五、Ansible配置 六、Ansible命令 (一)ansible (二)Ansible-doc (三)

    2024年02月16日
    浏览(60)
  • Ansible主机清单书写演示和ansible.cfg配置文件详解

    目录 主机清单(常见为INI格式) 一.定义主机列表 1.每行写一个 2.主机组 (1)定义简单主机组 (2)指定多台主机时可以通过书写范围来表示 (3)定义嵌套主机组 二.匹配主机和组 1.匹配所有主机 (1)all (2)特殊使用*号,单独使用无效 2.匹配指定主机或组 (1)匹配一个

    2024年02月07日
    浏览(42)
  • ansible自动运维——学会参考ansible-doc命令

    大家好,这里是天亮之前ict,本人网络工程大三在读小学生,拥有锐捷的ie和红帽的ce认证,这里我会定期跟新自动话运维的博客,希望能提高自己的技术的同时,也可以帮助到大家,另外大家可以关注我的其它专栏: 锐捷数通实验:锐捷数通实验 网络工程师成长日志:网络

    2024年02月03日
    浏览(34)
  • 【Ansible】Ansible自动化运维工具之playbook剧本

      简单来说,playbooks是一种简单的配置管理系统与多机器部署系统的基础。与现有的其他系统有不同之处,且非常适合复杂应用的部署。   Playbooks 可用于声明配置,更强大的地方在于,playbooks可以编排有序的去执行过程,甚至做到多组机器间来回有序的执行特别指定的

    2024年02月14日
    浏览(36)
  • 【ansible】自动化运维ansible之playbook剧本编写与运行

    目录 一、ansible剧本playbook的组成 二、palybook的基础应用: 实操1:通过palybooks完成nginx的安装 第一种:通过yum安装nginx 第二种:通过编译安装nginx 实操2:playbook定义、引用变量​​​​​​​ 实操3:通过playbook完成普通账户权限提权为root用户 实操4:通过when条件判断指定主机

    2024年02月20日
    浏览(39)
  • Ansible自动运维————实验

    0、创建新的虚拟机,使用镜像RHEL8.5,要求/boot目录为512N,/home目录为1Gb,交换空间为2Gb,其他空间给)目录。 1、将该主机作为 Ansible 控制节点,克隆该虚拟机,将克隆的虚拟机作为受控节点,Ansible 仓库路径为 http://47.108.86.156/rhel8/ansible29/ansible-2.9-for-rhel-8-x86_64-rpms/ 2、在控制

    2024年02月02日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包