ansible入门1——简介、部署、介绍


记得看官方文档,直接百度ansible即可。

一.ansible简介

1.什么是ansible
ansible是一款开源自动化平台,是一个配置管理工具,自动化运维工具

2.ansible的优点
(1).跨平台支持
(2).人类可读自动化: ansible提供linux,Windows,unix和网络设备的无代理支持,适用于物理、虚拟、云和容器环境
(3).完美描述应用:通过playbook(剧本)
(4).轻松管理版本控制:playbook是纯文本,可视作源代码
(5).支持动态清单
(6).编排可与其他系统轻松集成:puppet、jenkins
(7).基础架构即代码
(8).减少人为配置时的错误
任务、play和playbook设计为具有幂等性,所以在运行playbook时,
如果目标主机处于正确状态,则不会进行任何更改。

二.安装ansible

1.在rhel8虚拟机上安装ansible,充当控制节点

yum install -y ansible

注意:如果主机上没有需要的软件包,常用下载软件包的网站:rpmspkgs,可以去这两个网站下载软件包从而解决所需要的依赖性。

在这里插入图片描述
2.查看ansible版本信息

ansible --version

3.ansible中有很多模块,比如可使用setup模块验证python

ansible -m setup localhost | grep ansible_python

在这里插入图片描述

三.部署ansible

1.构建ansible清单

问:什么是清单?
答:清单定义了ansible将要管理的一批主机,将这批主机都写到清单里,当ansible要管理主机时会去清单里读取这些主机。

1.静态清单

编写清单文件

清单文件格式如下,每行一个,可以写主机名或ip地址
www.weiwei.org				#主机名
192.168.0.109				#主机ip
							#这两台主机不属于任何主机组

[webservers]				#定义主机组
server1.weiwei.org
server2.weiwie.org
172.25.0.1					#这三台主机都属于webservers组

[dbservers]
node1.weiwei.org
node2.weiwei.org			#这三台主机都属于dbserver组

注意:一台主机可以存在于多个主机组

2.定义嵌套组
ansible主机清单可以包含多个主机组构成的组,如:

[webservers]
server1.westos.org
server2.westos.org
172.25.0.1

[dbservers]
node1.westos.org
node1.westos.org

[servers:children]			#servers为父组,名字随意,后面的名字必须为children
webservers
dbservers

3.通过范围简化主机规格
可以指定主机名称或ip范围或者数字和字母范围

语法规则:[START:END]
例如:
172.25.[0:4].[0:254]		#匹配172.25.0.0/24——172.25.4.0/24
server[01:10].example.com	#匹配server01.example.com到server10.example.com所有主机
注意:此方式不匹配server1,只匹配server01
[a:c].example.com			#匹配a.example.com到c.example.com

2.清单的相关信息

1、ansible node1.wei.com --list-hosts	#查看node1.wei.com主机所管理的主机	

2、默认ansible的清单位置:/etc/ansible/hosts	
#一般不使用该文件,而是自己新建清单,因为在工作中,一台服务器有好多人在用

3、mkdir deploy-inventory 		#自定义清单,建立自己的清单目录

4、动态清单--> 可以从开源社区的脚本中获取

1、查看node1.wei.com主机所管理的主机
在这里插入图片描述
2、默认ansible的清单位置
在这里插入图片描述
可在该文件中写清单,例如:
在这里插入图片描述
查看所写的清单:

	ansible all --list-hosts		#列出清单中所有受管主机
	ansible ungrouped --list-hosts	#列出不属于某个组的主机
	ansible webservers --list-hosts	#列出属于webservers组的主机

在这里插入图片描述

3、自定义清单
在这里插入图片描述
查看清单:

 ansible all -i inventory --list-hosts			#列出inventory清单中的受管主机,-i:指定清单
 ansible ungrouped -i inventory --list-hosts	#列出不在主机组中的主机
 ansible www -i inventory --list-hosts			#列出www组中的主机

在这里插入图片描述
在这里插入图片描述

2.管理ansible配置文件

1.ansible文件

配置文件:
1、 /etc/ansible/ansible.cfg	
#基本(默认)配置文件,如果找不到其他配置文件才使用这个(即,优先级最低)
2、~/.ansible.cfg		
#如果存在此配置文件并且当前工作目录中也没有ansible.cfg,此文件替代/etc/ansible/ansible.cfg
3、./ansible.cfg		
#执行ansible命令的目录中如果有ansible.cfg文件,就用它,不使用上面两个
(推荐使用该文件,上面两个不常用,对于管理来说会比较方便和安全)

查看当前清单使用的配置文件:
ansible all -i inventory --list-hosts -v 		#-v:显示细节

在这里插入图片描述
显示使用的配置文件
在这里插入图片描述
2、管理配置文件中的设置:
以默认的配置文件/etc/ansible/ansible.cfg为例:

[defaults]		#该部分设置ansible操作的默认值,里面的设置基本都是通用的,不用修改

[privilege_escalation]	#权限提升部分,配置ansible如何在受管主机上执行特权升级

在这里插入图片描述
自己写清单文件(参考默认配置文件):

例:
vim ansible.cfg
文件内容:
[defaults]
inventory = ./inventory
remote_user = student	#指定登录受管主机的用户,如不指定则使用当前用户名称
ask_pass = false		#是否提示输入ssh密码,做了免密就可以设置为false,否则需为true

[privilege_escalation]
become = true			#连接到受管主机上是否可以进行身份切换
become_method = sudo	#切换方式,默认为sudo
become_user = root		#切换到的用户
become_ask_pass = false #是否需要为become_method提示输入密码,默认为false

使用sudo进行权限下放:
使用超级用户身份编辑文件:
vim /etc/sudoers.d/westos
westos		ALL=(ALL)	NOPASSWD: ALL	#westos可以进行所有操作并且不需要密码

在这里插入图片描述
例如:修改一些参数
在这里插入图片描述

四.运行临时命令

如果要做的操作很简单(比如ls命令),就不需要再去写一个剧本,直接在命令行里敲入命令即可,使用临时命令可以快速测试和更改,无需编写playbook
ansible在编辑命令时有两种方式:
ad-hoc(即命令行方式)和playbook(即把命令写在文件中)

ad-hoc方式:

1.格式:
	ansible host-pattern -m module [-a 'module arguments'] [-i inventory]
	#host-pattern:要操作的主机	-m:模块

2.检查能否在受管主机上运行python模块
ansible all -m ping
serverb.lab.example.com | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}

3.使用临时命令通过模块执行任务
ansible-doc -l		#列出ansible的所有模块

ansible-doc ping	#查看ping模块帮助文档

ansible-doc -s yum 	#在终端中输出yum模块中各参数的用法 

在这里插入图片描述

五.ansible模块

文件模块:

-copy:	将本地文件复制到受管主机
(应用场景:假设要更新所有受管主机的默认发布页面,需要将新的页面拷贝到受管主机上)
-file:设置文件的权限和其他属性
-lineinfile:确保特定行是否在文件中
-synchronize:使用rsync同步内容

系统模块:

-firewalld:使用firewalld服务管理任意端口和服务
-reboot:重启
-service:管理服务(较常用,配置开机自启、一键启动等)
-user:添加、删除和管理用户账户

Net Tools模块:

-get_url:通过http、https、或者ftp下载文件时使用
-nmcli:管理网络
-uri:与web服务交互

例:
1、使用user模块确认student用户存在于rhel7.wei.com主机且uid为1001

ansible -m user -a 'name=student uid=1001 state=present' rhel7.wei.com

在这里插入图片描述

2、在管理主机上运行命令:

ansible rhel7.wei.com -m command -a /usr/bin/hostname
rhel7.wei.com | CHANGED | rc=0 >>	#状态报告,显示主机名称和操作结果
rhel7.wei.com						#命令输出
ansible rhel7.wei.com -m command -a /usr/bin/hostname -o	#加上-o参数,单行显示
rhel7.wei.com | CHANGED | rc=0 | (stdout) rhel7.wei.com

在这里插入图片描述
注意:command模块允许执行远程命令,但这些命令不是shell处理,所以无法访问shell的环境变量,所以不能执行重定向、传送等操作

使用shell和command的区别:

例如:set:查看系统中的环境变量

ansible localhost -m command -a set
localhost | FAILED | rc=2 >>
[Errno 2] No such file or directory: 'set': 'set'

ansible localhost -m shell -a set
localhost | CHANGED | rc=0 >>
BASH=/bin/sh
...

在这里插入图片描述

3、使用command模块执行临时命令

 ansible 192.168.0.109 -m command -a 'id'
 ansible 192.168.0.109 -m command -a 'id' -u westos	
 #通过 -u选项使用student进行连接并执行id命令
执行上面两条命令时,需要在新建的目录deploy-adhoc中执行,因为在目录外面执行时读取的配置文件不同

在这里插入图片描述
4、copy模块示例:
例如,修改服务的默认发布页面时,先将文件写好,再使用ansible将文件一键复制到其他主机

1.首先使用student用户,因为student用户没有写权限,会失败
ansible 192.168.0.109 -m copy -a 'content="hello rhel7\n" dest=/etc/motd' -u westos
content后面跟的是要修改的文件的内容,/etc/motd本来是空的

2.使用特权升级
注意:此处使用特权升级需要先编辑/etc/sudoers.d/student文件下放权限
vim /etc/sudoers.d/westos
文件内容:
westos		ALL=(ALL)	NOPASSWD: ALL

#以root身份运行
ansible  192.168.0.109 -m copy -a 'content="hello rhel7\n" dest=/etc/motd' -u student --become

3、用ssh登录到受管主机后可以看到/etcmotd目录下出现了内容
cat /etc/motd
hello rhel7

注意:
使用all参数可以一次更改所有的受管主机:
ansible all -m copy -a 'content="hello rhel7\n" dest=/etc/motd' -u westos --become
可以看到localhost显示SUCCESS,servera显示CHANGED,因为localhost已经处于正确状态

查看
ansible all -m command -a 'cat /etc/motd' -u westos

在这里插入图片描述
ssh登录到受管主机:
在这里插入图片描述
结束!!!

猜你喜欢

转载自blog.csdn.net/weixin_46138661/article/details/105292336
今日推荐