Linux--Ansible 自动化运维

部署配置实验

实验环境

虚拟机 3台 centos7.9

网卡NAT模式 数量 1

组件包 ansiblerepo

|----------|----------------|--------|
| 设备 | IP | 备注 |
| Centos01 | 192.168.161.11 | node01 |
| Centos02 | 192.168.161.12 | node02 |
| Centos03 | 192.168.161.13 | node03 |

14.2.1 Ansible安装

  1. 通过YUM安装Ansible 复制提供的ansiblerepo文件夹到Linux本地目录,并设置为yum仓库。然后安装软件。

    [root@node01 ~]# yum -y install createrepo

    [root@node01 ~]# mv ansiblerepo/ /usr/local/src/

    [root@node01 ~]# cd /usr/local/src/ansiblerepo/

    [root@node01 ansiblerepo]# createrepo ./

    [root@node01 ansiblerepo]# ls

    [root@node01 ansiblerepo]# cd

    [root@node01 ~]# vim /etc/yum.repos.d/local.repo

    [local]
    name=CnetOS 7.3
    baseurl=file:///mnt/
    enabled=1
    gpgcheck=0

    [ansiblerepo]
    name=ansiblerepo
    baseurl=file:///usr/local/src/ansiblerepo/
    gpgcheck=0

    [root@node01 ~]# yum repolist //查看yum源是否可用

    [root@node01 ~]# yum -y install ansible

    [root@node01 ~]# ansible --version //验证安装结果

  1. 创建SSH免交互登录

Ansible通过SSH 对设备进行管理,而SSH包含两种认证方式:一种是通过密码认证,另一种是 通过密钥对认证。前者必须和系统交互,而后者是免交互登录。如果希望通过Ansible自动管理设备 应该配置为免交互登录被管理设备。

复制代码
[root@node01 ~]# ssh-keygen -t rsa   //生成密钥对,后面操作为默认路径,直接回车

[root@node01 ~]# ssh-copy-id root@192.168.161.12  //复制公钥到远端192.168.161.12

[root@node01 ~]# ssh-copy-id root@192.168.161.13  //复制公钥到远端

[root@node01 ~]# ssh 192.168.161.12               //可以免密码登录到192.168.161.12

[root@node02 ~]# exit

[root@node01 ~]# ssh 192.168.161.13

[root@node03 ~]# exit

到此,已经完成Ansible的部署,下面就可以通过Ansible对设备进行管理了。

14.2.2 Ansible配置

linventory 是 Ansible管理主机信息的配置文件,相当于系统Hosts 文件的功能,默认存放在 /etc/ansible/hosts。在hosts文件中,通过分组来组织设备,Ansible通过Inventory来定义主机和分 组,通过在ansible命令中使用选项-i或--inventory-file指定Inventory。

Ansible通过将设备列表以分组的方式添加到/etc/ansible/hosis文件来实现对设备的管理,所以 在正式管理之前,首先要编写 hosts 文件。hosts文件中,以]包含的部分代表组名,设备列表支持 主机名和IP地址,默认情况下。通过访问22端口(SSH)来管理设备。着目标主机使用了非默认的 SSH端口,还可以在主机名称之后使用雷号加端口号标明,以行为单位分隔配置。另外,hosts 文件 还支持通配符,

复制代码
[root@node01 ~]# vim /etc/ansible/hosts 

[web]
192.168.161.12
192.168.161.13
[test01]
www.bdqn.cn:222  //通过222端口管理设备
[mail]
zsl.kgc.cn
zs[2:5].kgc.cn

可以将同一个主机同时归置在多个不同的组中。

配置完成后,可以针对 hosts 定义的组进行远程操作,也可以针对组中指定的某一个或多个主机操作。下面介绍如何针对特定的服务器操作。

(1)只对 web组中192.168.161.12主机操作。通过--limit参数限定主机的变更。

复制代码
[root@node01 ~]# ansible web -m command -a "systemctl status firewalld" --limit "192.168.161.12"

(3) 只对192.168.161.0网段主机操作。通过通配符限定主机的变更。

14.2.5 playbook 配置文件

1、执行配置文件

playbook 配置文件使用YAML语法,具有简洁明了、结构清晰等特点。playbook配置文件类似于Shell 脚本,是一个YAM_ 格式的文件,用于保存针对特定需求的任务列表。前面介绍的ansible命令 虽然可以完成各种任务。但是当配置一些复杂任务时,逐条输入命令就显得效率非常低下。更有效 的方案是在playbook配置文件中放置所有的任务代码,利用 ansible-playbook命令执行该文件,可以 实现自动化运维。YAM_文件的扩展名通常为 yeml 或 yml。

YAML语法和其他高级语言类似,其结构通过缩进来展示,通过"-"来代表项,通过冒号 ":" 来分隔键和值,整个文件以"---"开始并以"..."结束,如下所示。

复制代码
[root@node01 ~]# vim /etc/ansible/hosts 

[web1]
192.168.161.12
[web2]
192.168.161.13

[root@node01 ~]# vim /etc/ansible/a.yml

---
- hosts: web1
  remote_user: root
  tasks:
        - name: adduser
          user: name=user2 state=present
          tags:
          - aaa
        - name: addgroup
          group: name=root system=yes
          tags:
          - bbb
- hosts: web2
  remote_user: root
  tasks:
       - name: copy file to web
         copy: src=/etc/passwd dest=/home
         tags:
                      - ccc

所有的 "-" 和 ":" 后面均有空格,而且要注意缩进和对齐。

playbook 的核心元素包含:

> hosts:任务的目标主机,多个主机用冒号分隔,一般调用/etc/ansible/hosts 中的分组信息。

> rernote_user:远程主机上,运行此任务的身份默认为root 。

> tasks:任务,即定义的具体任务,由模块定义的操作列表。

> handlers:触发器,类似tasks,只是在特定的条件下才会触发的任务。某任务的状态在运行 后为changed时,可通过 "notify" 通知给相应的 handlers进行触发执行。

> roles:角色。将hosts剥离出去,由tasks、handlers等所组成的一种特定的结构集合。

执行pleybook的示例如下。

复制代码
[root@node01 ~]# ansible-playbook --syntax-check /etc/ansible/a.yml

[root@node01 ~]# ansible-playbook -C /etc/ansible/a.yml  //预测试

[root@node01 ~]# ansible-playbook --list-hosts /etc/ansible/a.yml  //列出主机

[root@node01 ~]# ansible-playbook --list-tasks /etc/ansible/a.yml  //列出任务

[root@node01 ~]# ansible-playbook --list-tags /etc/ansible/a.yml   //列出标签

[root@node01 ~]# ansible-playbook /etc/ansible/a.yml               //执行任务

预测试结果

列出主机

执行任务结果

确认结果

复制代码
[root@node01 ~]# ssh 192.168.161.12 tail -2 /etc/passwd

[root@node01 ~]# ssh 192.168.161.13 ls -1 /home/passwd
  1. 触发器

需要触发才能执行的任务,当之前定义在tasks中的任务执行成功后,若希望在此基础上触发其他的任务,这时就需要定义handlers。例如,当通过 ansible 的模块对目标主机的配置文件进行修改之 后,如果任务执行成功,可以触发一个触发器,在触发器中定义目标主机的服务重启操作,以使配置文件生效。handlers触发器具有以下特点。

> handlers是Ansible提供的条件机制之一。handlers 和 task 很类似,但是它只在被task通知的时候才会触发执行。

> handlers 只会在所有任务执行完后执行。而且即使被通知了多次,它也只会执行一次,handlers 按照定义的顺序依次执行。

handlers触发器的使用示例如下。

复制代码
[root@node01 ~]# ssh 192.168.161.12 netstat -lnupt | grep 80

[root@node01 ~]# vim /etc/ansible/httpd.yml

---
- hosts: web1
  remote_user: root
  tasks:
       - name: change port     //修改端口
         command: sed -i 's/Listen\ 80/Listen\ 8080/g' /etc/httpd/conf/httpd.conf
         notify:               //配置触发条件
      - restart httpd server   //完成该任务后调用名为 restart httpd server 的触发器
 handlers:                     //配置触发器
 - name: restart httpd server  //指定触发器名字
   service: name=httpd state=restarted  //触发任务为重启httpd服务
...

[root@node01 ~]# ansible-playbook /etc/ansible/httpd.yml  //执行yml文件
相关推荐
专注API从业者6 分钟前
Python + 淘宝 API 开发:自动化采集商品数据的完整流程
大数据·运维·前端·数据挖掘·自动化
Lovyk1 小时前
Linux 正则表达式
linux·运维
Fireworkitte2 小时前
Ubuntu、CentOS、AlmaLinux 9.5的 rc.local实现 开机启动
linux·ubuntu·centos
sword devil9003 小时前
ubuntu常见问题汇总
linux·ubuntu
ac.char3 小时前
在CentOS系统中查询已删除但仍占用磁盘空间的文件
linux·运维·centos
中科米堆4 小时前
中科米堆CASAIM自动化三维测量设备测量汽车壳体直径尺寸
运维·自动化·汽车·视觉检测
淮北也生橘124 小时前
Linux的ALSA音频框架学习笔记
linux·笔记·学习
缘华工业智维5 小时前
CNN 在故障诊断中的应用:原理、案例与优势
大数据·运维·cnn
开航母的李大6 小时前
软件系统运维常见问题
运维·服务器·系统架构·运维开发
华强笔记7 小时前
Linux内存管理系统性总结
linux·运维·网络