Ansible 介绍与实战操作演示
文章目录
- 一、概述
- 二、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一共为我们提供了七个指令:
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 -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 介绍与实战操作演示相关推荐
- Ansible 介绍和架构、特性
Ansible 介绍和架构 公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备.公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开 ...
- 非常好用的卸载软件——Geek Uninstaller【官网、介绍、使用演示(卸载“格式工厂”)、软件包下载地址(百度网盘)】
目 录 Geek Uninstaller官网 Geek Uninstaller介绍 Geek 使用演示--卸载"格式工厂" 软件包下载地址--百度网盘 Geek Uninsta ...
- rpm包制作介绍及实战操作讲解01(学生分享)
说明:本文来自老男孩linux运维实战培训-高级架构师班学生分享内容,本文分为两部分,此为第一部分. 第一次观看本视频前,建议博友先观看:人人都是讲师的教学培训体系介绍 http://oldboy.b ...
- 十一.激光惯导LIO-SLAM框架学习之LIO-SAM框架---框架介绍和运行演示
专栏系列文章如下: 一:Tixiao Shan最新力作LVI-SAM(Lio-SAM+Vins-Mono),基于视觉-激光-惯导里程计的SLAM框架,环境搭建和跑通过程_goldqiu的博客-CSDN ...
- 【云原生】Grafana 介绍与实战操作
文章目录 一.概述 二.Grafana 安装 1)下载安装 2)安装包信息 3)启动服务 4)Grafana 访问 三.Grafana 功能介绍 四.使用mysql存储 1)安装mysql 2)修改g ...
- Ansible介绍、安装、远程执行命令、拷贝文件或者目录、远程执行脚本
Ansible介绍 不需要安装客户端,通过sshd去通信 基于模块工作,模块可以由任何语言开发 不仅支持命令行使用模块,也支持编写yaml格式的playbook,易于编写和阅读 安装十分简单,cent ...
- linux下的fgetc()与fputc()函数详细介绍及代码演示
linux下的标准I/O的fgetc()与fputc()函数详细介绍及代码演示 文章目录 前言 一.fgetc()用法介绍 二.fputc()用法介绍 代码演示 总结 前言 在C语言中,读写文件比较灵 ...
- ansible介绍、安装、远程执行命令、拷贝文件或目录、远程执行脚本、管理任务计划、安装包和管理服务、playbook、变量、循环、条件判断、handlers、安装nginx、管理配置文件
24.15 ansible介绍 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系 ...
- Ansible介绍与安装
Ansible介绍与安装 文章目录 Ansible介绍与安装 介绍 Ansible 什么是 Ansible? Ansible 无需代理 Ansible方式 ansible工作模式 Ansible的作用 ...
最新文章
- PostgreSQL on XFS 性能优化 - 1
- 上班第一天(1)--一个程序员的成长史(10)
- [Go] Cookie 使用简介
- Python之sklearn:GridSearchCV()和fit()函数的简介、具体案例、使用方法之详细攻略
- 【pmcaff】产品经理必知改善用户体验的基本方法
- react跳转url,跳转外链,新页面打开页面
- 理解lua中 . : self
- [转载] 列表、元组及通用序列操作
- HTML+CSS+JS实现 ❤️响应式图文卡片滑块展示特效❤️
- snprintf()返回值的陷阱
- msgpack php 安装,在ubuntu16.04下编译安装php7的扩张msgpack2.0.1
- refresh-刷新
- 瞒不住了!超过4000人都在这里死磕3D视觉技术
- web网页设计期末课程大作业~超高仿英雄联盟LOL游戏官网设计与实现(HTML+CSS+JavaScript)
- Python代码调试
- 《Hidden Markov Map Matching Through Noise and Sparseness》读书笔记
- Afnetworking访问遇到3840_错误
- 15首中秋诗词,有2首你肯定熟悉
- python中blit的意思,pygame中的surface.blit()函数是什么?它有什么作用?它是如何工作的?...
- 港府拟申拨175亿港元进行西九文化区综合地库余下工程
热门文章
- 如何给GPhone安装软件
- C语言实现一个根据学生成绩设置其等级,并完成统计不及格人数的函数
- 文件格式和扩展名不匹配。文件可能已损坏或不安全。除非您信任其来源,否则请勿打开。是否仍要打开它?--解决
- Java中的Hash碰撞是什么?该如何解决?
- windows 文件分隔符
- 相机组成、镜头焦距、视场角、清晰度的概念(一)
- error while loading shared libraries: libcrypto.so.1.1
- idea项目导出出现 in module XXX File is included in 4 contexts
- 带你十分钟快速入门画图绘图作图神器 Matplotlib_各种画图小结
- 十万美元的悬赏——互联网梅森素数大搜索