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
sever1 | 172.25.60.1 |
---|---|
server2 | 172.25.60.2 |
server3 | 172.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可以访问