文章目录

  • 一、ansible简介
  • 1.定义
  • 2. 优点
  • 3. 安装
  • 二、部署ansible
  • 1. ansible清单基础知识
  • 2.构建ansible清单
  • 3. 管理ansible配置文件
  • 三、ansible模块
  • 四、 运行临时命令(ad-hoc)
  • 1. 格式
  • 2. 检查能否在受管主机上运行python模块
  • 3. 使用临时命令通过模块执行任务
  • 3.1 使用user模块
  • 3.2 使用command模块
  • 3.3 使用copy模块
  • 3.4 使用命令更改Apache默认发布页面



实验环境: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模块验证python:ansible -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

什么是ansible剧本_什么是ansible剧本


(5)默认清单位置/etc/ansible/hosts

(6)动态清单:可以从开源社区的脚本中获取

2.构建ansible清单

  1. 默认清单:在默认清单位置【/etc/ansible/hosts】编写受管主机即可
    注意:为了便于管理一般不使用,而是采用自定义方式新建清单
    (1)列出清单中所有受管主机:ansible  all  --list-hosts
    ansible  ungrouped  --list-hosts
    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

什么是ansible剧本_自定义_02


(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】对指定的受管主机进行免密设定。

什么是ansible剧本_主机名_03


什么是ansible剧本_配置文件_04


(4)使用sudo进行权限下放: 以超级用户身份编辑文件(建议写在/etc/sudoers.d目录下)

什么是ansible剧本_主机名_05

以上,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文件中,添加受管主机的解析:

什么是ansible剧本_配置文件_06


(2)简单测试,在默认清单文件,添加受管主机:

什么是ansible剧本_主机名_07


(3)使用命令进行测试:ansible all -m ping

什么是ansible剧本_什么是ansible剧本_08

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

什么是ansible剧本_什么是ansible剧本_09

3.2 使用command模块

(1)在受管主机上运行(hostname)命令: ansible webservers -m command -a /usr/bin/hostname -o

什么是ansible剧本_配置文件_10


注意:此时的默认清单里面添加了主机组

什么是ansible剧本_主机名_11


(2)查看本机当前用户的id: ansible localhost -m command -a ‘id’

(3)通过-u选项使用student进行连接并执行id命令: ansible localhost -m command -a ‘id’ -u student

注意:在执行上面两条命令时,需要在新建的目录中执行,否则结果不会变
本机的两种用户【root、student】也都要进行免密操作

什么是ansible剧本_配置文件_12


什么是ansible剧本_自定义_13


什么是ansible剧本_配置文件_14


(4)使用shell和command的区别:

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

什么是ansible剧本_配置文件_15

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’

什么是ansible剧本_主机名_16


什么是ansible剧本_配置文件_17