ansible——ansible的简介、模块介绍、部署、ad-hoc


实验环境:RHEL8
ansible管理主机:主机名为workstation,IP为192.168.1.104
受管主机1:主机名为servera.lab.example.com,IP为192.168.1.114
受管主机2:主机名为serverb.lab.example.com,IP为192.168.1.116

一、ansible简介

1.定义

  1. ansible是一款开源自动化平台,是一个配置管理工具,自动化运维工具,可以用来批量管理多台机器。
  2. ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。

2. 优点

  1. 跨平台支持
  2. 人类可读自动化: ansible提供linux,Windows,unix和网络设备的无代理支持,适用于物理、虚拟、云和容器环境
  3. 完美描述应用:playbook
  4. 轻松管理版本控制:playbook是纯文本,可视作源代码
  5. 支持动态清单
  6. 编排可与其他系统轻松集成:puppet、jenkins
  7. 基础架构即代码
  8. 减少人为错误

注意:任务、play和playbook设计为具有幂等性,所以在运行playbook时,如果目标主机处于正确状态,则不会进行任何更改。

3. 安装

  1. 在服务端主机上安装ansible,充当控制节点:yum install -y ansible
    在这里插入图片描述
  2. 查看ansible版本信息ansible --version
  3. 使用setup模块验证pythonansible -m setup localhost | grep ansible_python_version
    setup模块主要用于获取主机信息
    在这里插入图片描述
    在这里插入图片描述

二、部署ansible

1. ansible清单基础知识

清单:定义了ansible将要管理的一批主机
(1)静态清单: 每行一个,填写主机名或ip;也可以定义主机组。注意:一台主机可以存在于多个主机组

www.westos.org		#主机名
172.25.254.250		#IP
###################主机组###################
[webservers]
server1.westos.org
server2.westos.org
172.25.0.1

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

(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.1.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

(4)验证清单 : 查看受管主机 ansible  workstation  --list-hosts
在这里插入图片描述
(5)默认清单位置/etc/ansible/hosts
(6)动态清单:可以从开源社区的脚本中获取

2.构建ansible清单

  1. 默认清单:在默认清单位置【/etc/ansible/hosts】编写受管主机即可
    注意:为了便于管理一般不使用,而是采用自定义方式新建清单
    (1)列出清单中所有受管主机:ansible  all  --list-hosts
    (2)列出不属于某个组的主机:ansible  ungrouped  --list-hosts
    (3)列出属于webservers组的主机:ansible  webservers  --list-hosts
    在这里插入图片描述在这里插入图片描述
  2. 自定义清单:
    (1)建立清单目录:mkdir  deploy-inventory
    (2)在清单目录里面自定义清单:vim  inventory
    在这里插入图片描述
    (3)列出自定义清单的受管主机:ansible  all  -i  inventory  --list-hosts
    (4)列出不属于组的受管主机:ansible  ungrouped  -i  inventory  --list-hosts
    (5)列出属于dbservers组的受管主机:ansible  dbservers  -i  inventory v–list-hosts
    在这里插入图片描述

3. 管理ansible配置文件

(1)三种配置文件:

配置文件说明
/etc/ansible/ansible.cfg基本配置文件,如果找不到其他配置文件,使用这个
~/.ansible.cfg如果存在此配置并且当前工作目录中也没有ansible.cfg,此文件替代/etc/ansible/ansible.cfg
./ansible.cfg执行ansible命令的目录中如果有ansible.cfg,就用它,不使用上面两个(推荐使用,上面两个不常用)

(2)显示使用的配置文件:ansible dbservers -i inventory --list-hosts -v
在这里插入图片描述
(3)管理配置文件中的设置:vim ./ansible.cfg

参数含义
[defaults]部分设置ansible操作的默认值
[privilege_escalation]配置ansible如何在受管主机上执行特权升级
[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

注意:为了后续运行命令方便执行,要在ansible管理主机上使用【ssh-keygen】对指定的受管主机进行免密设定。
在这里插入图片描述
在这里插入图片描述


(4)使用sudo进行权限下放: 以超级用户身份编辑文件(建议写在/etc/sudoers.d目录下)
在这里插入图片描述以上,ansible部署就算完成了:设定清单、编辑配置文件、进行权力下放。此时,就可以使用ansible模块运行命令。

三、ansible模块

列出所有模块:ansible-doc -l
查看ping模块帮助文档:ansible-doc ping

模块类型模块名称模块作用
文件模块copy将本地文件复制到受管主机
file设置文件的权限和其他属性
lineinfile确保特定行是否在文件中
synchronize使用rsync同步内容
系统模块firewalld使用firewalld管理任意端口和服务
reboot重启
service管理服务
user添加、删除和管理用户账户
Net Tools模块get_url通过http、https、或者ftp下载文件
nmcli管理网络
uri与web服务交互

四、 运行临时命令(ad-hoc)

为什么要使用临时命令:使用临时命令可以快速测试和更改,无需编写playbook

1. 格式

ansible host -m module [-a 'module arguments'] [-i inventory]	#host表示受管主机名称,module表示模块,-a表示模块参数,-i指定清单

2. 检查能否在受管主机上运行python模块

(1)在/etc/hosts文件中,添加受管主机的解析:
在这里插入图片描述
(2)简单测试,在默认清单文件,添加受管主机:
在这里插入图片描述
(3)使用命令进行测试:ansible all -m ping
在这里插入图片描述

3. 使用临时命令通过模块执行任务

3.1 使用user模块

用途:使用user模块确保student用户存在于servera.lab.example.com且uid为1000
命令:ansible -m user -a ‘name=student uid=1000 state=present’ servera.lab.example.com
注意: 此时默认清单里面还是servera.lab.example.com
在这里插入图片描述

3.2 使用command模块

(1)在受管主机上运行(hostname)命令: ansible webservers -m command -a /usr/bin/hostname -o
在这里插入图片描述
注意:此时的默认清单里面添加了主机组
在这里插入图片描述
(2)查看本机当前用户的id: ansible localhost -m command -a ‘id’
(3)通过-u选项使用student进行连接并执行id命令: ansible localhost -m command -a ‘id’ -u student
注意:在执行上面两条命令时,需要在新建的目录中执行,否则结果不会变
本机的两种用户【root、student】也都要进行免密操作

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

3.3 使用copy模块

使用copy模块将本地文件复制到受管主机

  1. 首先使用student用户,因为student用户没有写权限,会失败:
    ansible localhost -m copy -a ‘content=“hello hello\n” dest=/etc/motd’ -u student在这里插入图片描述
  2. 使用特权升级
    注意:此处使用特权升级需要先编辑/etc/sudoers.d/student文件,进行权力下放
    以root用户身份执行:ansible localhost -m copy -a ‘content=“hello hello\n” dest=/etc/motd’ -u student --become
    在这里插入图片描述
    在这里插入图片描述
  3. 使用all参数一次更改servera和localhost: ansible all -m copy -a ‘content=“westos ansible\n” dest=/etc/motd’ -u student --become
    注意:更改的前提是需要在servera.lab.example.com主机上设定权力下放
    在这里插入图片描述
    在这里插入图片描述
    查看:ansible all -m command -a ‘cat /etc/motd’ -u student
    在这里插入图片描述

3.4 使用命令更改Apache默认发布页面

更改servera.lab.example.com主机的Apache默认发布页面,注意,在servera主机中要求已经安装了Apache服务,并且设定好了火墙和selinux。具体步骤不再赘述。
使用命令:ansible servera.lab.example.com -m copy -a ‘content=“hello apache!\n” dest=/var/www/html/index.html’
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值