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文件
相关推荐
热爱嵌入式的小许1 小时前
Linux基础项目开发1:量产工具——显示系统
linux·运维·服务器·韦东山量产工具
韩楚风5 小时前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
陈苏同学5 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
Ambition_LAO5 小时前
解决:进入 WSL(Windows Subsystem for Linux)以及将 PyCharm 2024 连接到 WSL
linux·pycharm
Pythonliu75 小时前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
你疯了抱抱我5 小时前
【RockyLinux 9.4】安装 NVIDIA 驱动,改变分辨率,避坑版本。(CentOS 系列也能用)
linux·运维·centos
追风赶月、5 小时前
【Linux】进程地址空间(初步了解)
linux
栎栎学编程6 小时前
Linux中环境变量
linux
挥剑决浮云 -6 小时前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记
小O_好好学7 小时前
CentOS 7文件系统
linux·运维·centos