【运维知识进阶篇】Ansible自动化运维-PlayBook详解

这篇具有很好参考价值的文章主要介绍了【运维知识进阶篇】Ansible自动化运维-PlayBook详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这篇文章给大家介绍下PlayBook,我们叫它剧本,它是以一种固定的格式,将多个ad-hoc放入yml文件中。在Ansible中,剧本文件是yml结尾的,在SaltStack中剧本文件是sls结尾的,但是两者语法都是使用的yaml语法。

PlayBook与ad-hoc区别

1、PlayBook功能比ad-hoc全,是对ad-hoc的一种编排

2、PlayBook能很好的控制先后执行顺序,以及依赖关系

3、PlayBook语法展现更加直观

4、PlayBook可以持久使用,ad-hoc无法持久使用

YAML语法

语法 描述
缩进 YAML使用固定的缩进风格表示层级结构,每个缩进由两个空格组成,不能使用TAB
冒号 以冒号结尾的除外,其他所有冒号后面所有空格
短横线 表示列表项,使用一个短横线加一个空格,多个项使用同样的缩进级别作为同一列表

PlayBook部署实战

1、部署httpd

1、安装httpd服务
2、启动httpd服务并加入开机自启动
3、编写网站页面并启动
4、开启防火墙端口
5、不同的主机配置不同的网站
#创建剧本存放目录
[root@Ansible ~]# mkdir -p ansible/httpd

#编辑主机列表
[root@Ansible ~]# cat /etc/ansible/hosts

[web_group]
web01 ansible_ssh_host=10.0.0.7
web02 ansible_ssh_host=10.0.0.8

#编写剧本
[root@Ansible ~]# cat ansible/httpd/httpd.yml 
- hosts: web_group
  tasks:
    - name: Install httpd Server    #安装httpd
      yum: 
        name: httpd
        state: present
    - name: Start httpd Server      #开启httpd服务
      systemd:
        name: httpd
        state: started
        enabled: yes
    - name: Start Firewalld Server  #开启防火墙
      systemd: 
        name: firewalld
        state: started
        enabled: yes
    - name: Config Firewalld Server #配置防火墙服务
      firewalld:
        service: http
        immediate: yes
        permanent: yes
        state: enabled
- hosts: web01
  tasks: 
  - name: Config Httpd Server        #增加Web01页面
    copy:
        content: Web01
        dest: /var/www/html/index.html
- hosts: web02
  tasks:
  - name: Config Httpd Server        #增加Web02页面
    copy:
        content: Web02
        dest: /var/www/html/index.html   
[root@Ansible ~]# ansible-playbook --syntax-check ansible/httpd/httpd.yml    #检查语法

playbook: ansible/httpd/httpd.yml
[root@Ansible ~]# ansible-playbook ansible/httpd/httpd.yml    #执行剧本

#浏览器访问10.0.0.7和10.0.0.8即可

【运维知识进阶篇】Ansible自动化运维-PlayBook详解 【运维知识进阶篇】Ansible自动化运维-PlayBook详解

 2、Backup备份服务器和客户端的部署

#创建rsync剧本存放目录
[root@Ansible ~]# mkdir ansible/rsyncd

#编辑主机列表
[root@Ansible ~]# cat /etc/ansible/hosts 
[web_group]
web01 ansible_ssh_host=10.0.0.7
web02 ansible_ssh_host=10.0.0.8

[backup_group]
backup ansible_ssh_host=10.0.0.41

#准备rsync配置文件
[root@Ansible ~]# cat ansible/rsyncd/rsyncd.conf    #最好是与剧本放到同一目录
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
path = /backup

#编写剧本
[root@Ansible ~]# cat ansible/rsyncd/rsyncd.yml
- hosts: all
  tasks:
    - name: Install Rsyncd Server
      yum: 
        name: rsync
        state: present
    - name: Create www Group
      group:
        name: www
        gid: 666
    - name: Create www User
      user:
        name: www
        uid: 666
        group: www
        shell: /sbin/nologin
        create_home: false
- hosts: backup_group
  tasks:
    - name: Scp Rsync Config
      copy: 
        src: /root/ansible/rsyncd/rsyncd.conf
        dest: /etc/rsyncd.conf
        owner: root
        group: root
        mode: 0644
    - name: Create backup Directory
      file:
        path: /backup
        state: directory
        mode: 0755
        owner: www
        group: www
        recurse: yes
    - name: Start Rsyncd Server
      systemd:
        name: rsyncd 
        state: started

#检查剧本
[root@Ansible ~]# ansible-playbook --syntax-check ansible/rsyncd/rsyncd.yml 

playbook: ansible/rsyncd/rsyncd.yml

#运行剧本
[root@Ansible ~]# ansible-playbook ansible/rsyncd/rsyncd.yml

完成后还可以尝试给客户端推送数据,加入crontab做备份等等操作。 

3、NFS服务部署

#1、添加目标服务器到主机列表并做ssh免密钥
[root@Ansible ~]# cat /etc/ansible/hosts
[nfs_group]
nfs ansible_ssh_host=10.0.0.31

[web_group]
web01 ansible_ssh_host=10.0.0.7
web02 ansible_ssh_host=10.0.0.8

[backup_group]
backup ansible_ssh_host=10.0.0.41

[nfs_all:children]
nfs_group
web_group

[root@Ansible ~]# ssh-copy-id -i .ssh/id_rsa.pub root@10.0.0.31

#2、创建nfs的目录
[root@Ansible ~]# mkdir ansible/nfs/

#3、准备nfs配置文件添加到管理机中
[root@Ansible ~]# cat ansible/nfs/exports 
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

#4、编写nfs剧本
[root@Ansible ~]# cat ansible/nfs/nfs.yml 
- hosts: nfs_all
  tasks: 
    - name: Install nfs-utils
      yum:
        name: nfs-utils
        state: present
    - name: Create www Group
      group:
        name: www
        gid: 666
    - name: Create www user
      user:
        name: www
        uid: 666
        group: www        
        shell: /sbin/nologin
        create_home: false
- hosts: nfs_group
  tasks:
    - name: Scp NFS server exports
      copy: 
        src: exports
        dest: /etc/exports
        owner: root
        group: root
        mode: 0644
    - name: Create data Directory
      file:
        path: /data
        state: directory
        owner: www
        group: www
        mode: 0755
        recurse: yes
    - name: Start NFS server
      systemd:
        name: nfs-server
        state: started
        enabled: yes
- hosts: web_group
  tasks:
    - name: Mount NFS Server
      mount:
        path: /opt
        src: 10.0.0.31:/data
        fstype: nfs
        opts: defaults
        state: mounted

#5、检查语法
[root@Ansible ~]# ansible-playbook --syntax-check /root/ansible/nfs/nfs.yml 

playbook: /root/ansible/nfs/nfs.yml

#6、执行剧本
[root@Ansible ~]# ansible-playbook ansible/nfs/nfs.yml

#7、查看web01、web02挂载情况
[root@Web01 ~]# df -h
Filesystem       Size  Used Avail Use% Mounted on
10.0.0.31:/data   19G  2.0G   17G  11% /opt

[root@Web02 ~]# df -h
Filesystem       Size  Used Avail Use% Mounted on
10.0.0.31:/data   19G  2.0G   17G  11% /opt

4、Nginx服务部署

#1、添加目标服务器至主机列表并做免密钥
[root@Ansible ~]# cat /etc/ansible/hosts 
[web_group]
web01 ansible_ssh_host=10.0.0.7
web02 ansible_ssh_host=10.0.0.8

[root@Ansible ~]# ssh-copy-id -i .ssh/id_rsa.pub root@10.0.0.7
[root@Ansible ~]# ssh-copy-id -i .ssh/id_rsa.pub root@10.0.0.8

#2、创建剧本存放目录
[root@Ansible ~]# mkdir ansible/nginx

#3、准备nginx配置文件与代码文件
[root@Web01 ~]# scp /etc/nginx/nginx.conf /etc/nginx/conf.d/* 10.0.0.61:/root/ansible/nginx
[root@Web01 ~]# tar zcvf code.tar.gz /code
[root@Web01 ~]# scp code.tar.gz 10.0.0.61:/root/ansible/nginx

#4、写剧本
[root@Ansible ~]# cat ansible/nginx/nginx.yml
- hosts: web_group
  tasks: 
    - name: nginx.repo
      copy:
        src: nginx.repo
        dest: /etc/yum.repos.d/nginx.repo
    - name: install nginx
      yum:
        name: nginx
        state: present
    - name: start and enable nginx
      systemd:
        name: nginx
        state: started
        enabled: yes
    - name: copy nginx.conf to nginx
      copy:
        src: nginx.conf
        dest: /etc/nginx
    - name: copy 'wecenter.conf' to nginx
      copy:
        src: wecenter.conf
        dest: /etc/nginx/conf.d/wecenter.conf
    - name: copy 'wordpress.conf' to nginx
      copy: 
        src: wordpress.conf
        dest: /etc/nginx/conf.d/wordpress.conf
    - name: remove nginx defualt.conf 
      file:
        path: /etc/nginx/conf.d/defualt.conf
        state: absent
    - name: tar xf code.tar.gz
      unarchive:
        src: code.tar.gz
        dest: /
        creates: /code
    - name: Restart Nginx Server
      systemd:
        name: nginx
        state: restarted

#5、检查剧本语法
[root@Ansible ~]# ansible-playbook --syntax-check ansible/nginx/nginx.yml 

playbook: ansible/nginx/nginx.yml

#6、执行剧本
[root@Ansible ~]# ansible-playbook ansible/nginx/nginx.yml 

5、PHP服务部署

#1、将目标主机添加至主机列表
[root@Ansible ~]# cat /etc/ansible/hosts 
[web_group]
web01 ansible_ssh_host=10.0.0.7
web02 ansible_ssh_host=10.0.0.8

#2、创建剧本存放目录
[root@Ansible ~]# mkdir ansible/php

#3、准备必要文件:php71.tar.gz、php.ini、www.conf
[root@Ansible ~]# cd ansible/php/
[root@Ansible php]# rz -E
rz waiting to receive.

[root@Web01 ~]# scp /etc/php.ini /etc/php-fpm.d/www.conf 10.0.0.61:/root/ansible/php
root@10.0.0.61's password: 
php.ini          100%   61KB  16.5MB/s   00:00    
www.conf         100%   18KB   2.4MB/s   00:00 

#4、写剧本
[root@Ansible php]# cat php.yml 
- hosts: web_group
  tasks: 
    - name: tar xf php to web_group
      unarchive:
        src: php71.tar.gz
        dest: /root
    - name: localinstall rpm
      yum:
        name: 
          - /root/autoconf-2.69-11.el7.noarch.rpm
          - /root/automake-1.13.4-3.el7.noarch.rpm
          - /root/libevent-2.0.21-4.el7.x86_64.rpm
          - /root/libjpeg-turbo-1.2.90-8.el7.x86_64.rpm
          - /root/libmcrypt-2.5.8-13.el7.x86_64.rpm
          - /root/libmemcached-1.0.16-5.el7.x86_64.rpm
          - /root/libtool-ltdl-2.4.2-22.el7_3.x86_64.rpm
          - /root/libX11-1.6.7-3.el7_9.x86_64.rpm
          - /root/libX11-common-1.6.7-3.el7_9.noarch.rpm
          - /root/libXau-1.0.8-2.1.el7.x86_64.rpm
          - /root/libxcb-1.13-1.el7.x86_64.rpm
          - /root/libXpm-3.5.12-1.el7.x86_64.rpm
          - /root/libxslt-1.1.28-6.el7.x86_64.rpm
          - /root/mod_php71w-7.1.33-1.w7.x86_64.rpm
          - /root/pcre-devel-8.32-17.el7.x86_64.rpm
          - /root/perl-Data-Dumper-2.145-3.el7.x86_64.rpm
          - /root/perl-Test-Harness-3.28-3.el7.noarch.rpm
          - /root/perl-Thread-Queue-3.02-2.el7.noarch.rpm
          - /root/php71w-cli-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-common-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-devel-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-embedded-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-fpm-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-gd-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-mbstring-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-mcrypt-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-mysqlnd-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-opcache-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-pdo-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-pear-1.10.4-1.w7.noarch.rpm
          - /root/php71w-pecl-igbinary-2.0.5-1.w7.x86_64.rpm
          - /root/php71w-pecl-memcached-3.0.4-1.w7.x86_64.rpm
          - /root/php71w-pecl-mongodb-1.5.3-1.w7.x86_64.rpm
          - /root/php71w-pecl-redis-3.1.6-1.w7.x86_64.rpm
          - /root/php71w-process-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-xml-7.1.33-1.w7.x86_64.rpm
        state: present
    - name: create group
      group:
        name: www
        gid: 666
    - name: create user
      user:
        name: www
        uid: 666
        group: www
        shell: /sbin/nologin
        create_home: false  
    - name: copy php.ini to web_group  
      copy: 
        src: php.ini
        dest: /etc/php.ini
    - name: copy www.conf to web_group
      copy:
        src: www.conf
        dest: /etc/php-fpm.d/www.conf
    - name: start and enable php
      systemd:
        name: php-fpm
        state: started
        enabled: yes

#5、剧本语法检查
[root@Ansible php]# ansible-playbook --syntax-check php.yml

playbook: php.yml

#6、执行剧本
[root@Ansible php]# ansible-playbook php.yml

6、Mariadb服务部署

#1、添加服务器到我们的主机列表并做免密钥
[root@Ansible ~]# cat /etc/ansible/hosts
[mysql_group]
mysql ansible_ssh_host=10.0.0.51

[root@Ansible ~]# ssh-copy-id -i .ssh/id_rsa.pub root@10.0.0.51

#2、创建剧本目录
[root@Ansible ~]# mkdir ansible/mysql

#3、准备好数据库
[root@MySQL ~]# mysqldump -uroot -pkoten.vip -A > all.sql
[root@MySQL ~]# scp all.sql 10.0.0.61:/root/ansible/mysql

#4、写剧本
[root@Ansible ~]# cat ansible/mysql/mysql.yml 
- hosts: mysql_group
  tasks:
    - name: Install mariadb
      yum:
        name: 
          - mariadb-server
          - MySQL-python      
        state: present
    - name: Start httpd Server
      systemd:
        name: mariadb
        state: started
        enabled: yes
    - name: Copy all.sql to Mysql
      copy:
        src: all.sql
        dest: /root/all.sql
    - name: import all.sql
      mysql_db:
        login_host: localhost
        login_port: 3306
        login_user: root
        name: all
        state: import
        target: /root/all.sql
    - name: Restart MariaDB Server
      systemd:
        name: mariadb
        state: restarted

#5、检查
[root@Ansible ~]# ansible-playbook --syntax-check ansible/mysql/mysql.yml 

playbook: ansible/mysql/mysql.yml

#6、执行剧本
[root@Ansible ~]# ansible-playbook ansible/mysql/mysql.yml

 我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!

 文章来源地址https://www.toymoban.com/news/detail-463058.html

到了这里,关于【运维知识进阶篇】Ansible自动化运维-PlayBook详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从小白到大神之路之学习运维第61天--------Ansible自动化运维工具(playbook配置文件深入了解)

    第三阶段基础 时  间:2023年7月14日 参加人:全班人员 内  容: playbook配置文件 目录 playbook配置文件 一、playbook配置文件概念 修改hosts文件 建立playbook配置文件 yml脚本写法注释: 二、Playbook的核心元素 三、Playbook的用法 四、实验案例: (一)工作流程 1、语法检查   2.预测

    2024年02月16日
    浏览(71)
  • 自动化运维工具Ansible教程(二)【进阶篇】

    ansible 学习大纲 Ansible 是一个开源的自动化工具,用于配置管理、应用部署和任务执行。它以简单、可读性强的 YAML 格式的 Playbooks 为基础,使得自动化任务变得简单、可维护和可扩展。 简单易用 :Ansible 的设计目标之一是简单易用。它使用 YAML 语法定义任务和配置,无需编

    2024年02月09日
    浏览(35)
  • 【云原生】Ansible自动化批量操作工具&playbook剧本

    目录 1.playbook相关知识 1.1 playbook 的简介 1.2 playbook的 各部分组成 2. 基础的playbook剧本编写实例 2.1 playbook编写Apache安装剧本(yum方式安装)  报错集:  实例2:playbook编写nginx 的yum安装并且能修改其监听端口的剧本 实例3:定义、引用变量  实例4:指定远程主机sudu切换用户

    2024年02月10日
    浏览(37)
  • 【自动化运维】playbook剧本

    (1)Tasks:任务,即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行 (2)Variables:变量 (3)Templates:模板 (4)Handlers:处理器,当changed状态条件满足时,(notify)触发执行的操作 (5)Roles:角色 运行playbook Ansible提供了很多种循环结构,一般都命名为wi

    2024年02月15日
    浏览(34)
  • Ansible自动化运维

    目录 前言 一、概述 常见的开源自动化运维工具比较 二、ansible环境搭建 三、ansible模块 (一)、hostname模块 (二)、file模块 (三)、copy模块 (四)、fetch模块 (五)、user模块 (六)、group模块 (七)、cron模块 (八)、yum_repository模块 (九)、yum模块 (十)、service模块

    2024年02月09日
    浏览(46)
  • 自动化运维工具——Ansible

    Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个

    2024年02月14日
    浏览(47)
  • 自动化运维工具—Ansible

    Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 市面上其他自动化工具:pupet(ruby语言) saltstack(python) chef(C/S模式)等 Ansible能批量配

    2024年02月10日
    浏览(43)
  • Ansible 自动化运维工具

    目录 一: Ansible 简介   Ansible与其他自动化运维工具对比  二: ansible 环境安装部署   三:ansible 命令行模块 1、command 模块 2、 shell 模块 3、 cron 模块 4、 user 模块 5、 group 模块  6、copy 模块 7、 file 模块  8、hostname 模块 9、ping 模块 10、 yum 模块 11、 service/systemd 模块

    2024年02月15日
    浏览(42)
  • 自动化运维ansible(role)

    一、role的介绍 1、Roles称为角色,本质上是为简化playbook配置文件而产生的一种特殊的方法。 2、简单来说,roles就是将原本在一个yaml中的文件进行规则化分散,封装到不同的目录下,从而简化playbook的yaml配置文件大小。从其实现方法上来看,类似于软件开发上的代码封装。

    2024年02月07日
    浏览(33)
  • Ansible自动化运维工具

    Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 ansible 自动化运维工具(机器管理工具) 可以实现批量管理多台(成百上千)主机,应用级

    2024年02月14日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包