网站集群批量管理-Ansible(playbook)

1.剧本概述

  1. playbook 文件,用于长久保存并且实现批量管理,维护,部署的文件. 类似于脚本存放命令和变量

  2. 剧本yaml格式,yaml格式的文件:空格,冒号

2. 区别

|-----|--------------|-------------|
| | ans-playbook | ans ad-hoc |
| 共同点 | 批量管理,使用模块 | 批量管理,使用模块 |
| 区别 | 重复调用 | 不是很方便,不容易重复 |
| 场景 | 部署服务,多个步骤的任务 | 测试使用 |

  1. 剧本书写格式
bash 复制代码
##书写剧本
---
- hosts: all
  tasks:
   - name: 这是第1个
     shell: echo '1' >/tmp/xzb66.txt
   - name: 这是第2个
     shell: echo '2'>/tmp/xzb66.txt
   - name: 这是第3个
     shell: echo '3'>/tmp/xzb66.txt
##执行剧本 -i 指定你的/etc/ansible/hosts的文件地址
ansible-playbook -i hosts 01-playbook-yml 

执行的时候有奶牛:

可以删除软件或修改ansible.cfg配置进行关闭 #nocows = 1 去掉注释即可
书写Ans playbook注意事项:

  1. 同一个层级的内容对齐的

  2. 不同层级的通过2个空格对齐

  3. 不能使用tab键

3.剧本案例

案例01: 创建目录并分发文件

bash 复制代码
##1. 创建目录/server/files/
##2. /etc/hosts文件发送过去/server/files/
---
- hosts: all
  tasks:
   - name: 01创建目录
     file:
      path: /server/file/
      state: directory
   - name: 02创建文件
     copy:
      src: /etc/hosts
      dest: /server/file/
##3. 执行剧本,查看结果
ansible-playbook -i hosts 02-playbook.yml

案例02: 分发软件包,安装软件包,启动服务

bash 复制代码
- hosts: all
  tasks:
    - name: 01 下载软件包
      get_url:
        url: https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-agent2-6.0.7-1.el7.x86_64.rpm
        validate_certs: no
        dest: /tmp/

    - name: 02 安装软件包
      yum:
        name: /tmp/zabbix-agent2-6.0.7-1.el7.x86_64.rpm
        state: present

    - name: 03 配置
      debug:
        msg: "进行配置zabbix-agent"

    - name: 04 开机自启
      systemd:
        name: zabbix-agent2
        enabled: yes
        state: started
bash 复制代码
##运行剧本
ansible-playbook -i hosts 03-playbook.yml 
##查看结果
ansible all -i hosts -m shell -a 'ps -ef|grep zabbix'

案例03: 部署NFS服务

bash 复制代码
##nfs服务端:在backup上部署nfs服务,共享/backup-nfs目录,all_squash,匿名用户:nfsnobody 
##nfs客户端:web挂载 /ans-upload目录挂载nfs服务端共享的/backup-nfs(永久挂载)
- hosts: backup
  tasks:
    - name: 01 在backup上部署nfs,rpcbind服务端
      yum:
        name: nfs-utils,rpcbind
        state: present
    - name: 02 修改配置文件 
      lineinfile: 
        path: /etc/exports
        line: "backup-nfs 172.16.1.0/24(rw,all_squash)"
        create: true
    - name: 03 创建共享目录并修改所有者
      file:
        path: backup-nfs
        owner: nfsnobody
        group: nfsnobody
        state: directory
    - name: 04-1 启动服务(注意顺序)
      systemd:
        name: rpcbind
        enabled: yes
        state: started
    - name: 04-02 启动服务
      systemd:
         name: nfs
         enabled: yes
         state: started

- hosts: nfs
  tasks:
    - name: 01 部署nfs-utils
      yum:
        name: nfs-utils
        state: present
    - name: 02 挂载
      mount:
        src: 172.16.1.41:/backup-nfs
        path: /ans-upload
        fstype: nfs
        state: mounted
bash 复制代码
##运行剧本,查看结果
ansible-playbook -i hosts 05-playbook-yml
##查看
ansible nfs -i hosts -a 'df -h'

4. Ansible中的变量

  1. 变量无处不在,在ans中大部分地方都可以定义变量

  2. 比较常用的创建变量的地方:剧本中,类似于命令行 ` `(反引号)的 功能,共用的变量文件.

|-----------------------|------------------------------------------------------------|
| 可以定义变量的地方 | 说明 |
| 在剧本文件中定义 | 比较常用. 仅仅限于当前的play使用 |
| register变量(注册变量) | ip=`hostname -I` 实现脚本中反引号的功能,可以获取命令结果 |
| 变量文件(根据主机清单分分组进行定义变量) | 如果多个剧本,使用相同的变量,大型的剧本roles |
| inventory主机清单中定义变量 | 未来可以用于批量修改主机使用,其他很少用了 |
| facts变量 | 一般用于获取主机基本信息:ip,主机名,系统 (centos/ubuntu) 如果不需要可以关闭,用于加速剧本的执行 |

4.1 剧本中使用变量

批量创建/oldboy/xzb/upload/
复制代码
- hosts: all
  vars:
    dir: /oldboy/xzb996/upload/
  tasks:
    - name: 创建目录
      file:
        path: "{{dir}}"
        state: directory

##运行剧本,查看结果
ansible-playbook -i hosts 05-vars-yml

提示:

  1. 使用变量的时候如果变量是某个选项的开头,则变量引用的时候需要加上双引号

  2. 在剧本play中定义变量应用:仅仅在当前play生效,一般用来存放路径,用户名,ip地址,类似于之前使用的脚本,注意引号使用

复制代码
dir: /oldboy/xzb/upload/
file:
  path: "{{ dir }}"#这种要添加,变量是开头.
file:
  path: /oldboy-new/{{ dir }}  #这种可以不加引号,变量不是开头.

4.2 共用变量-变量文件

复制代码
##创建变量文件
dir: /tmp/
file: xzb.txt
user: xzb996
##创建剧本
- hosts: all
  vars_files: ./vars.yml  ##也可以写变量文件的绝对路径
  tasks:
    - name: 变量文件
      file:
        path: "{{dir}}/{{user}}-{{file}}"
        state: touch

##运行剧本,查看结果
ansible-playbook -i hosts 06-vars.yml

4.3 共用变量-根据主机组使用变量

group_vars/

lb/vars.yml #存放lb组的变量

web/vars.yml #存放web组的变量

data/vars.yml #存放xxx组的变量

all/vars.yml #所有主机共用的变量

未来一般使用all分组即可,把所有变量存放在一起,供剧本使用

bash 复制代码
##在剧本的统计目录下创建group_vars/all/vars.yml
[root@ansible_xing /server/scripts/playbook]# mkdir -p /group_vars/all/
vim vars.yml
user: www
nfs_dir: /nfs_backup
web_mount_dir: /web_nfs
nfs_server: 172.16.1.41
rsync_pass: 1
##创建剧本
[root@ansible_xing /server/scripts/playbook]# vim 07-group-vars.yml
- hosts: all
  tasks:
   - name: 测试group变量
     debug:
       msg: "变量内容 {{user}} {{rsync_pass}}"

- hosts: backup
  tasks:
   - name: 测试web组是否被识别到
     debug:
        msg: "web组识别的变量内容为{{user}} {{rsync_pass}}"
bash 复制代码
##运行剧本
ansible-playbook -i hosts 07-group-vars.yml 

4.4 register变量注册变量

  1. 本质上就是用来实现脚本中的反引号功能. ip=`hostname -I`

  2. 用户通过命令获取的内容都存放到Register变量中

bash 复制代码
- hosts: all
  tasks:
   - name: get data
     shell: date +%F
     register: result

   - name: print result 变量内容
     debug: 
       msg: "register变量的全部内容是{{result.stdout}}"
bash 复制代码
##运行脚本查看结果
ansible-playbook -i hosts 08-reg-vars.yml 

4.5 facts变量

  1. 运行剧本的时候ans会收集每个主机的基本信息,这些信息形成的变量叫做facts变量.

  2. facts变量setup模块获取,可以通过ansible -i hosts nfs -m setup查看.

bash 复制代码
##常用fact变量
ansible_hostname               #主机名 
ansible_memtotal_mb            #内存大小(总计) 单位mb 
ansible_processor_vcpus        #cpu数量 
ansible_default_ipv4.address   #默认的网卡ip eth0
ansible_distribution           #系统发行版本名字
bash 复制代码
- hosts: all
  tasks:
    - name: 显示系统信息
      debug:
        msg: |
           你的系统是:{{ansible_hostname}}
           内存大小:{{ansible_memtotal_mb}}
           cpu数量:{{ansible_processor_vcpus }}
           默认网卡ip:{{ansible_default_ipv4.address}}
           系统发行版本:{{ansible_distribution}}
bash 复制代码
##运行脚本,查看结果
ansible-playbook -i hosts  09-facts.yml
相关推荐
风清再凯16 小时前
自动化工具ansible,以及playbook剧本
运维·自动化·ansible
IT乌鸦坐飞机16 小时前
ansible部署数据库服务随机启动并创建用户和设置用户有完全权限
数据库·ansible·centos7
遇见火星14 天前
如何使用Ansible一键部署MinIO集群?
ansible
粥周粥14 天前
ANSIBLE
ansible
码农101号14 天前
Linux中ansible模块补充和playbook讲解
linux·运维·ansible
码农101号14 天前
Linux的Ansible软件基础使用讲解和ssh远程连接
ansible
烟雨书信15 天前
ANSIBLE运维自动化管理端部署
运维·自动化·ansible
碎碎-li15 天前
ANSIBLE(运维自动化)
运维·自动化·ansible
@donshu@18 天前
Linux运维-ansible-python开发-获取inventroy信息
linux·运维·ansible
Kendra91921 天前
Ansible
ansible