文章目录

  • 一、概述
  • 二、Ansible 架构
  • 三、Ansible 工作原理
  • 四、Ansible 安装与基础配置
    • 1)开启记录日志
    • 2)去掉第一次连接ssh ask确认
  • 五、Ansible 的七个命令
    • 1)ansible
    • 2)ansible-doc
    • 3)ansible-playbook
    • 4)ansible-galaxy
    • 5)ansible-lint
    • 6)ansible-pull
    • 7)ansible-vault
  • 六、Ansible 主要组成部分
    • 1)ansible 命令执行来源
    • 2)ansible 管理方式
    • 3)ansible主要操作对象
  • 七、Ansible 连接被控端方式
    • 1)ssh 密钥
    • 2)账号密码
      • 1、命令行配置
      • 2、配置文件中配置
  • 八、Host Inventory(主机清单)
    • 1)添加被管控节点
    • 2)配置主机组
    • 3)配置连接用户名和密码
    • 4)子分组
    • 5)自定义主机列表文件
  • 九、Ad-Hoc(点对点模式)
    • 1)简介
    • 2)常用模块
      • 1、command 模块(默认模块)
      • 2、shell 模块
      • 3、script 模块
      • 4、raw 模块
      • 5、copy 模块
      • 6、fetch 模块
      • 7、unarchive 模块(解包模块)
      • 8、archive模块(打包模块)
      • 9、user 模块
      • 10、group 模块
      • 11、yum 模块
      • 12、service 模块
      • 13、file 模块
      • 14、setup 模块
      • 15、cron 模块
      • 16、hostname 模块

一、概述

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
  • 核心模块(Core Modules):这些都是ansible自带的模块
  • 扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块
  • 插件(Plugins):完成模块功能的补充
  • 剧本(Playbooks):ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行
  • 连接插件(Connectior Plugins):ansible基于连接插件连接到各个主机上,虽然ansible是使用ssh连接到各个主机的,但是它还支持其他的连接方法,所以需要有连接插件
  • 主机清单(Host Inventory):定义ansible管理的主机

三、Ansible 工作原理


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

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

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

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

四、Ansible 安装与基础配置

yum install epel-release
yum -y install ansible
ansible --version

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_config
StrictHostKeyChecking ask  ==> StrictHostKeyChecking no

五、Ansible 的七个命令

安装完ansible后,发现ansible一共为我们提供了七个指令:ansibleansible-docansible-galaxyansible-lintansible-playbookansible-pullansible-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  -l
ansible-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/hosts
192.168.182.130 ansible_ssh_user=root ansible_ssh_pass=123456[web]
192.168.182.130 ansible_ssh_user=root ansible_ssh_pass=123456

常用的配置参数如下:

八、Host Inventory(主机清单)

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

1)添加被管控节点

192.168.182.110

示例:

# -m:指定模块
# -a:指定参数
ansible 192.168.182.110 -m ping
ansible 192.168.182.110 -m shell -a "df -h"

2)配置主机组

# 定义webservers组
[webservers]
192.168.182.110
192.168.182.112

示例:

# -m:指定模块
# -a:指定参数
ansible webservers -m ping
ansible webservers -m shell -a "df -h"

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

[webservers]
192.168.182.130 ansible_ssh_user=root ansible_ssh_pass=123456

常用配置参数如下:

示例:

ansible 192.168.182.130 -m ping

4)子分组

[web]
192.168.182.130
192.168.182.110
[mysql]
192.168.182.111
# 子分组
[nfs:children]
web
mysql
# 对分组统一定义变量
[nfs:vars]
ansible_ssh_user=root
ansible_ssh_pass=123456
ansible_ssh_port=22

示例:

ansible nfs -m ping
# -o:一行显示
ansible nfs -m ping -o

5)自定义主机列表文件

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

示例:

# -i:指定主机列表文件
ansible -i hostlist nfs -m ping

九、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:一行显示
# 安装httpd
ansible 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."'# 修改shell
ansible 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'# 安装apache
ansible 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】示例演示

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

Ansible 的介绍和简单使用就先到这里了,还有一个ansible-playbook是非常重要,内容也是比较多,就放到下篇文章介绍了,有疑问的小伙伴欢迎给我留言,后续会持续更新相关技术文章!!!

Ansible 介绍与实战操作演示相关推荐

  1. Ansible 介绍和架构、特性

    Ansible 介绍和架构 公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备.公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开 ...

  2. 非常好用的卸载软件——Geek Uninstaller【官网、介绍、使用演示(卸载“格式工厂”)、软件包下载地址(百度网盘)】

    目   录 Geek Uninstaller官网 Geek Uninstaller介绍 Geek 使用演示--卸载"格式工厂" 软件包下载地址--百度网盘 Geek Uninsta ...

  3. rpm包制作介绍及实战操作讲解01(学生分享)

    说明:本文来自老男孩linux运维实战培训-高级架构师班学生分享内容,本文分为两部分,此为第一部分. 第一次观看本视频前,建议博友先观看:人人都是讲师的教学培训体系介绍 http://oldboy.b ...

  4. 十一.激光惯导LIO-SLAM框架学习之LIO-SAM框架---框架介绍和运行演示

    专栏系列文章如下: 一:Tixiao Shan最新力作LVI-SAM(Lio-SAM+Vins-Mono),基于视觉-激光-惯导里程计的SLAM框架,环境搭建和跑通过程_goldqiu的博客-CSDN ...

  5. 【云原生】Grafana 介绍与实战操作

    文章目录 一.概述 二.Grafana 安装 1)下载安装 2)安装包信息 3)启动服务 4)Grafana 访问 三.Grafana 功能介绍 四.使用mysql存储 1)安装mysql 2)修改g ...

  6. Ansible介绍、安装、远程执行命令、拷贝文件或者目录、远程执行脚本

    Ansible介绍 不需要安装客户端,通过sshd去通信 基于模块工作,模块可以由任何语言开发 不仅支持命令行使用模块,也支持编写yaml格式的playbook,易于编写和阅读 安装十分简单,cent ...

  7. linux下的fgetc()与fputc()函数详细介绍及代码演示

    linux下的标准I/O的fgetc()与fputc()函数详细介绍及代码演示 文章目录 前言 一.fgetc()用法介绍 二.fputc()用法介绍 代码演示 总结 前言 在C语言中,读写文件比较灵 ...

  8. ansible介绍、安装、远程执行命令、拷贝文件或目录、远程执行脚本、管理任务计划、安装包和管理服务、playbook、变量、循环、条件判断、handlers、安装nginx、管理配置文件

    24.15 ansible介绍 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系 ...

  9. Ansible介绍与安装

    Ansible介绍与安装 文章目录 Ansible介绍与安装 介绍 Ansible 什么是 Ansible? Ansible 无需代理 Ansible方式 ansible工作模式 Ansible的作用 ...

最新文章

  1. PostgreSQL on XFS 性能优化 - 1
  2. 上班第一天(1)--一个程序员的成长史(10)
  3. [Go] Cookie 使用简介
  4. Python之sklearn:GridSearchCV()和fit()函数的简介、具体案例、使用方法之详细攻略
  5. 【pmcaff】产品经理必知改善用户体验的基本方法
  6. react跳转url,跳转外链,新页面打开页面
  7. 理解lua中 . : self
  8. [转载] 列表、元组及通用序列操作
  9. HTML+CSS+JS实现 ❤️响应式图文卡片滑块展示特效❤️
  10. snprintf()返回值的陷阱
  11. msgpack php 安装,在ubuntu16.04下编译安装php7的扩张msgpack2.0.1
  12. refresh-刷新
  13. 瞒不住了!超过4000人都在这里死磕3D视觉技术
  14. web网页设计期末课程大作业~超高仿英雄联盟LOL游戏官网设计与实现(HTML+CSS+JavaScript)
  15. Python代码调试
  16. 《Hidden Markov Map Matching Through Noise and Sparseness》读书笔记
  17. Afnetworking访问遇到3840_错误
  18. 15首中秋诗词,有2首你肯定熟悉
  19. python中blit的意思,pygame中的surface.blit()函数是什么?它有什么作用?它是如何工作的?...
  20. 港府拟申拨175亿港元进行西九文化区综合地库余下工程

热门文章

  1. 如何给GPhone安装软件
  2. C语言实现一个根据学生成绩设置其等级,并完成统计不及格人数的函数
  3. 文件格式和扩展名不匹配。文件可能已损坏或不安全。除非您信任其来源,否则请勿打开。是否仍要打开它?--解决
  4. Java中的Hash碰撞是什么?该如何解决?
  5. windows 文件分隔符
  6. 相机组成、镜头焦距、视场角、清晰度的概念(一)
  7. error while loading shared libraries: libcrypto.so.1.1
  8. idea项目导出出现 in module XXX File is included in 4 contexts
  9. 带你十分钟快速入门画图绘图作图神器 Matplotlib_各种画图小结
  10. 十万美元的悬赏——互联网梅森素数大搜索