ansible自动化运维平台(部署+模块+playbook)介绍

ansible自动化运维平台部署

目录

一、安装ansible

二、验证ansible是否安装成功    ansible -m ping group1 

三、ansible语法格式

四、ansible常用模块

五、playbook(剧本)介绍


 

一、安装ansible

#安装ansible有源码安装和yum源安装
yum install ansible -y

#备份ansible配置文件
cd /etc/ansible/hosts && cp hosts hosts.default

#修改hosts文件,ansible在执行任务的时候,会去读取该文件
vim /etc/ansible/hosts

[group1]
192.168.161.80
192.168.161.90
192.168.161.100


 

二、验证ansible是否安装成功

 

验证ansible是否安装成功

 

三、ansible语法格式

#ansible命令语法
ansible 机器 -m 模块 -a ‘模块参数’
    
#查看ansible现有的模块
ansible-doc -l

#给80机器设置主机名
ansible 192.168.161.80 -m hostname -a "name=tyschool"

四、ansible常用模块

 

4.1 hostname模块:修改主机名

ansible 192.168.161.80 -m hostname -a "name=node1"


4.2 file模块:远程主机上文件操作

参数说明:

group:定义文件/目录的属组

mode:定义文件/目录的权限(注意:文件权限为4位数,第一位为uid/gid,后面表示ugo权限)

owner:定义文件/目录的属主

path:必选项,定义文件/目录的路径

recurse:递归的设置文件的属性,只对目录有效

src:要被链接的源文件的路径,只应用于state=link的情况

dest:被链接到的路径,只应用于state=link的情况

state: (link|hard|touch|absent)

    link:创建软链接

    hard:创建硬链接

    touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间

    absent:删除目录、文件或者取消链接文件

    directory:创建的是目录

实操案例:

    1、创建文件
    ansible group1 -m file -a "path=/tmp/ansible.txt state=touch"
    2、文件删除
    ansible group1 -m file -a "path=/tmp/ansible.txt state=absent"
    3、文件链接
      3.1 软连接
      ansible group1 -m file -a "src=/tmp/ansible.txt path=/tmp/ansible.ggg state=link"
      3.2 硬链接
      ansible group1 -m file -a "src=/tmp/ansble.txt path=/tmp/ansible_hard state=hard"
    4、修改用户属主和属组,权限
    ansible 192.168.161.80 -m file -a "path=/tmp/ansible.txt owner=bob group=bob mode=0600"
    5、创建目录
        ansible group1 -m file -a "path=/tmp/ansible state=directory"
    6.目录删除
        ansible group1 -m file -a "path=/tmp/ansible state=absent"
    7、递归
        recurse :yes /no 


4.3 copy模块:本地文件拷贝到目标机器上

常用参数说明:
src :文件源路径
dest :目标路径
content :指定文件的内容复制到远程机器文件内
force   : 强制 yes/no
backup   : 是否备份有冲突的源文件 yes/no
checksum:拷贝完整性校验
owner   : 目标文件所有者
group    :目标文件所属组
mode    :目标文件权限

案例:
1、拷贝本地文件到业务机器
    ansible group1 -m copy -a "src=/tmp/huangshi.txt dest=/tmp/"
2、拷贝目录
    ansible group1 -m copy -a "src=/etc/yum.repos.d/ dest=/tmp"     #加/,是拷贝的目录下的文件
    ansible group1 -m copy -a "src=/etc/yum.repos.d dest=/tmp"      #拷贝的是文件夹

4.4 fetch模块(节点文件拷贝到本地)
    ansible group1 -m fetch -a "src=/etc/passwd dest=/tmp"    #管理机器目录中创建节点机器的ip目录中存放

   注意:因为业务节点有多个,当从业务节点获取到文件到管理节点后,会在目的目录生成业务机器ip目录,业务节点对应的文件存放在该ip目录中

4.5  user模块:主要用于操作系统用户、组、权限、密码等操作
常用参数:
name
password                      指定密码,密码必须为密文 (注意:在终端先生成密钥对:echo 123456 |openssl passwd -1 -stdin
state=absent|present    删除或创建
system=yes|no             是否为系统用户
shell=""                         指定登录shell
group=                          用户组
create_home=yes|no    是否建立家目录
remove=yes|no             删除家目录
案例:
ansible group1 -m user -a "name=tianxian password=$1$1iBVoy.z$EB79SOJQ/u3HM.d98q7vV/ uid=4423 create_home=yes shell=/bin/bash state=present"    

4.6 group模块 :创建组
案例:ansible group1 -m group -a "name=admin system=yes state=present"

4.7 cron模块:给节点机器管理周期性的时间任务
参数:
name        计划任务名称        (为了删除的时候方便去指定)
user        执行计划任务用户
job        计划任务命令
minute
hour
day
month
week        
state=absent    删除计划任务
注意:不指定user的话,默认就是root(你在管理端执行创建的用户)
案例:
ansible group1 -m cron -a "name=test user=root job='echo haha >/tmp/test.txt' minute=12 hour=23"

4.8 yum_repository模块:yum_repository模块用于配置yum仓库
name        仓库名 name.repo
description    描述
baseurl        下载路径
gpgcheck=1|0    
enabled=yes|no
state=absent    删除源
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/
案例:给业务机增加清华园的yum
ansible group1 -m yum_repository -a "name=qinghua baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/ description='qinghua yum repo' gpgcheck=0 enabled=yes"

4.9 yum模块:用来使用yum命令实现软件包的安装和卸载,只能安装单个包, 安装多个包需要使用playbook
参数
name                需要安装软件包的名称
list=installd,updates,available repos    列出已经安装、需要更新、可获得、和yum源
state=absent/removed installed present latest    删除,移除、安装确认,安装最新版
ansible group1 -m yum -a "name=vsftpd state=latest"

4.10 service模块:用于控制服务的启动、关闭、开机自启动等
参数:
name                服务名称
state=reloaded restarted started stopped    服务管理    
enabled yes|no            开机是否启动
案例:设置vsftp开机自启动并启动服务
ansible group1 -m service -a "name=vsftpd state=started enabled=yes"

4.11 script模块:用于在远程机器上执行本地脚本
备注:只有一个参数,指定脚本路径,不用给权限
案例:ansible group1 -m script -a "/root/haha.sh"

4.12 ansible command 和shell模块
两个模块都欧式用于执行Linux命令
shell模块和command模块差不多,但是command模块不能执行一些类似$HOME < > |等符号,但是shell可以
shell模块和command模块都只只能执行非交互式命令交互式命令无法执行,例如:vim

4.13 setup模块:收集远程主机的基本信息(操作系统类型,主机名、ip、cpu、内存信息等)
常用的过滤条件:
ansible_all_ipv4_address:显示ipv4的信息
ansible_devices:显示磁盘设备信息
ansible_distribution_major_version:显示系统主版本
ansible_distribution_version:显示系统版本
ansible_machine:显示系统类型
ansible_lvm:显示lvm相关信息
ansible_memtotal_mb:显示系统总内存
ansible_memfree_mb:显示系统可用内存
ansible_swaptotal_mb:显示总的swap内存
ansible_swapfree_mb:显示swap内存的可用内存
ansible_processor:显示cpu个数
ansible_mounts:显示系统磁盘挂载情况

五、playbook(剧本)介绍

ansible用来配置,部署、和管理控制节点的剧本
使用格式为yaml格式,包括elk、docker等都会使用yaml格式
简单来说:playbook是ansible格式的脚本,将需要执行的操作按照ansible的编程语法,放到文件中执行
替代方案:1、完全可以使用shell脚本来替代playbook,shell中使用ansible模块
                  2、使用ansible+shell脚本,使用script模块


yaml格式规则
1、文件的第一行必须以'---'开始,表示这是yaml文件的开始,...表示结束,单个文档可以省略
2、#号为注释
3、列表中所有成员都开始于相同的缩进级别,并且使用一个- 作为开头(一个横杠和一个空格)
4、一个字典是由一个简单的键:值的形式组成(这个冒号后面必须是一个空格)
    子集两个空格缩进
5、注意:写yaml文件不要使用tab键,都使用空格
yaml数据结构
1、标量--》相当于数据类型
2、序列--》数组和列表    - + 单个空格表示单个列表项 []表示一组数据
3、键值对--》相当于map    :+ 空格表示单个键值对

playbook批量安装Apache过程分析:
1.安装Apache并启动
    需要模块:1、yum模块  2、service模块来启动 3、copy模块来把本地修改好的Apache配置文件复制过去
2、创建过程
    1、创建playbook脚本目录
    2、修改好Apache配置文件
    3、编写playbook脚本

playbook基础组件:
hosts:任务执行的远程目标主机
remote_user:在远程主机上执行任务的用户
tasks:需要在远程主机上执行的任务列表
variables:变量,变量可以在hosts中定义,可以在playbook中定义,也可以直接使用setup模块获取变量内容
handlers:任务处理器,当满足某些条件时才会触发任务操作
templates:使用模块语言的文本文件
tags:playbook中一般有多个任务,我们可以给每个任务打上标签,当我们只需执行某个任务时,执行的时候
ansible-playbook install_nginx -t tag3
那么,将只会执行第三个任务
如果一个hosts执行任务失败,整个tasks都会做回滚,重新修改playbook,重新执行即可

测试playbook脚本是否有错误:
  ansible-playbook -C apache_init.yml

andlers也是一些task的列表,和一般的task并没有什么区别。
是由通知者进行的notify,如果没有被notify,则Handlers不会执行,假如被notify了,则Handlers被执行
不管有多少个通知者进行了notify,等到play中的所有task执行完成之后,handlers也只会被执行一次

 

playbook案例一:重启sshd服务

#restart sshd
---                 #开始
- hosts: group1     #指定hosts业务机
  remote_user: root #指定远程操作用户
  tasks:            #任务列表
    - name: restart sshd
      command: 'systemctl restart sshd' #使用的模块
#备注:一定要注意对齐方式

案例二:安装Apache服务并初始化

---
#install and init apache
#date:2020-08-13

- hosts: group1
  remote_user: root
  tasks:
    #第一步:创建运行Apache服务的用户
    - name: create user for httpd
      user: name=tyschool state=present
    #安装Apache
    - name: yum install httpd
      yum: name=httpd state=latest
    #复制配置文件
    - name: copy httpd configure 
      copy: src=/etc/ansible/playbook/httpd.conf dest=/etc/httpd/conf/
    #启动服务
    - name: start httpd
      service: name=httpd state=started enabled=yes

案例三:对Apache剧本进行进一步加深,添加notice和handler

---
#install and init apache
#date:2020-08-13

- hosts: group1
  remote_user: root
  tasks:
    - name: create user for httpd
      user: name=tyschool state=present

    - name: yum install httpd
      yum: name=httpd state=latest

    - name: copy httpd configure 
      copy: src=/etc/ansible/playbook/httpd.conf dest=/etc/httpd/conf/
      notify: #当Apache配置文件修改时,会触发handler,执行handler任务
        - restart httpd

    - name: start httpd
      service: name=httpd state=started enabled=yes

  handlers:
    - name: restart httpd
      service: name=httpd state=restarted

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值