自动化运维ansible

ansible简介:

  • ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
  • ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。

特性:

  • 模块化:调用特定的模块,完成特定任务,有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块
  • 支持自定义模块
  • 基于Python语言实现
  • 部署简单,基于python和SSH(默认已安装),agentless
  • 安全,基于OpenSSH
  • 支持playbook编排任务
  • 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
  • 无需代理不依赖PKI(无需ssl)
  • 可使用任何编程语言写模块
  • YAML格式,编排任务,支持丰富的数据结构
  • 较强大的多层解决方案

工作原理:

  • 管理端支持local 、ssh、zeromq 三种方式连接被管理端,默认使用基于ssh的连接---这部分对应基本架构图中的连接模块;
  • 可以按应用类型等方式进行Host Inventory(主机群)分类,管理节点通过各类模块实现相应的操作---单个模块,单条命令的批量执行,我们可以称之为ad-hoc;
  • 管理节点可以通过playbooks 实现多个task的集合实现一类功能,如web服务的安装部署、数据库服务器的批量备份等。playbooks我们可以简单的理解为,系统通过组合多条ad-hoc操作的配置文件 。

安装

  • 试验环境
  • rhel7.3
sever1172.25.60.1
server2172.25.60.2
server3172.25.60.3
  • ansible的配置文件
/etc/ansible/ansible.cfg/主配置文件,配置ansible工作特性
/etc/ansible/hosts/主机清单
/etc/ansible/roles/存放角色的目录

##ansible的安装部署

  • 在server1上下载相应的安装包并安装:yum install -y ansible-2.7.8-1.el7.noarch.rpm python* sshpass-1.06-1.el7.x86_64.rpm libt*
    在这里插入图片描述

  • 在三台虚拟机上分别创建普通用户devops,并设置密码
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 在server1上进入devops用户

  • 创建文件夹: mkdir ansible

  • 在该目录下创建ansible的配置文件 cd ansible

    vim ansible.cfg
     	[defaults]
     	inventory   =   inventory  ###创建一个文件
    

在这里插入图片描述

  • 在该目录下创建文件 vim inventory
    [test]  ##创建test组
	server2    ##test组下面的用户
	[db]
	server3
	[webservers:children]  ##将两个组联系起来
	test
	db

在这里插入图片描述
7.给三台虚拟机作免秘连接:

ssh-keygen 
ssh-copy-id server2
ssh-copy-id server3

在这里插入图片描述
在这里插入图片描述

  • 测试:
     ansible all --list-hosts
     ansible all -m ping   ##-m    调用模块
     ansible test -a 'df -h'

在这里插入图片描述

  • 测试copy命令,将server2下的/etc/passwd copy到文件 /tmp/passwd
     ansible test -m copy -a 'src=/etc/passwd dest=/tmp/passwd'
  • 查看是否成功 :
 ansible test -a 'ls /tmp/passwd'
 ansible test -a 'ls -l /tmp/passwd'

在这里插入图片描述

  • 更改文件的权限 ansible test -m file -a 'dest=/tmp/passwd mode=600'
  • 查看是否更改:ansible test -a 'ls -l /tmp/passwd'
    在这里插入图片描述
  • 给server2安装httpd: ansible test -m yum -a 'name=httpd state=present' -b
    -b 切换成root用户的权限。此时是失败的
    在这里插入图片描述
  • 这时要在server2和server3上配置
 vim /etc/sudoers
	devops  ALL=(ALL)       NOPASSWD: ALL

在这里插入图片描述

  • 再次推送
    在这里插入图片描述
  • 测试server2上是否安装成功: ansible test -a ‘rpm -q httpd’
    在这里插入图片描述
  • 将become写入文件中因为-b代表的是become,将该模块的配置文件写入ansible.cfg中后,则不需要再次调用-b
vim ansible.cfg 
	[privilege_escalation]
	become=True
	become_method=sudo
	become_user=root
	become_ask_pass=False  ##可以从文件复制vim /etc/ansible/ansible.cfg    

在这里插入图片描述

  • 这时安装不需要-b ansible test -m yum -a 'name=httpd state=present'
    在这里插入图片描述
  • 给webservers组内的主机安装httpd: ansible webservers -m yum -a 'name=httpd state=present' == 默认的是一种状态,如果安装过则不会重复安装==
    在这里插入图片描述
    卸载的时候,只卸载了安装包,并没有恢复环境,一些依赖性并没有改变
  • 给test组的主机将httpd卸载掉: ansible test -m yum -a 'name=httpd state=absent'
    在这里插入图片描述
  • 将db组的主机开启httpd: ansible db -m service -a 'name=httpd state=started'
    在这里插入图片描述
  • 测试: curl server3
    在这里插入图片描述
  • 修改server3的测试页面
    ansible db -m copy -a 'content="server3\n" dest=/var/www/html/index.html'
  • 推送后测试:curl server3
    在这里插入图片描述
  • 开启db’组主机的防火墙:ansible db -m service -a 'name=firewalld state=started'
    并设置开机自启:ansible db -m service -a 'name=firewalld state=started enabled=true'
    在这里插入图片描述
    可以通过在server3上查看端口测试防火墙是否开启
    在这里插入图片描述
    此时测试年并不能访问server3的httpd服务
    在这里插入图片描述
  • 将httpd策略加入:
    ansible db -m firewalld -a 'service=http state=enabled permanent=yes immediate=yes'
  • 测试 curl server3可以访问
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值