首页 网维知识库 自动化运维工具ansible实战

自动化运维工具ansible实战

ansible描述 官网:https://docs.ansible.com ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfen…

ansible描述

官网:https://docs.ansible.com

自动化运维工具ansible实战插图

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。

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

自动化运维工具ansible实战插图1

准备实验环境
服务器名称 服务器ip
master 192.168.1.20
node01 192.168.1.21
node02 192.168.1.22
1.0各节点配置本地hosts
  • 方便后期配置服务
cat    << EOF >> /etc/hosts
192.168.1.20       master
192.168.1.21       node01
192.168.1.22       node02
EOF
2.0 master节点安装ansible并配置
yum -y install  ansible

ansible主配置常见说明

cat               /etc/ansible/ansible.cfg
inventory                 = /etc/ansible/host   #ansible主机管理清单
forks                      = 5  #并发数量
sudo_user                 = root  #提权
remote_port               = 22   #操作主机的端口
host_key_checking         = False  #第一次交互目标主机,需要输入yes/no,改成False不用输入
timeout                   = 10    #连接主机的超时时间
log_path = /var/log/ansible.log    #设置日志路径
private_key_file = /root/.ssh/id_rsa  #指定认证密钥的私钥

ansible hosts主机清单配置文件说明

自动化运维工具ansible实战插图2

根据不同服务类型可以对主机清单进行分类,例如web/db等

验证ansible对主机的远程操作

2.1 对分组的主机操作
ansible web   -a  "df -h"  #查看web分组磁盘使用情况

自动化运维工具ansible实战插图3

2.2对分组内主机操作,精确匹配

自动化运维工具ansible实战插图4

2.3 对所有主机操作all

自动化运维工具ansible实战插图5

官方文档https://docs.ansible.com/ansible/latest/index.html

2.4 定义变量,并验证
mkdir /etc/ansible/group_vars/
cat  /etc/ansible/group_vars/web.yml #文件命名和组名一致
http_port: 8090
server_name: www.baidu.com

打印变量

ansible web   -a "echo {{server_name}}"

自动化运维工具ansible实战插图6

ansible 常见的选项
-vvv 打印详细输出
ansible web -vvv -a 'cat  /tmp/123'
-f 指定并发数
ansible web -vvv -a 'cat  /tmp/123'  -f 10
-i 指定别的位置的主机清单hosts
ansible web -a  'cat  /tmp/123'  -i /root/hosts
-m 指定模块
ansible  web   -m  shell -a  'echo hello-zhangfan >>  /tmp/123'
3.0配置免密登录认证
#生成密钥
ssh-keygen
将密钥发送到目标主机
ssh-copy-id  root@192.168.1.21
ssh-copy-id  root@192.168.1.22
3.1修改主机清单文件,并测试
cat  /etc/ansible/hosts

自动化运维工具ansible实战插图7

ansible web   -a  "ls  /tmp"

自动化运维工具ansible实战插图8

验证成功

4.0 ansible常用的模块
- 执行shell命令  (command和shell)
- 文件传输  (copy和file)
- 管理软件包 (yum )
- 用户和组(user)
- 从源代码管理系统部署(git)
- 管理服务(service)
- 目标主机信息(setup)
4.1使用shell模块,sudo提权测试
#node01,node02执行
useradd   zhangfan 
echo 123456  |passwd --stdin zhangfan
#node02配置sudo权限
vim  /etc/sudoers

自动化运维工具ansible实战插图9

  • node01不配置sudo权限

master测试

ansible  web   -m  shell  -a 'ls /root'   -u  zhangfan -k --become  --become-user root -K
ansible  web 
-m  shell \           #指定模块
-a 'ls /root' \         #执行的命令
-u  zhangfan  -k \ 指定远程连接的用户并输入密码
--become  --become-user root \ 提权的用户
-K #sudo提权用户输入的密码
```bash

![](https://img-blog.csdnimg.cn/20210530232429448.png)

发现提权的node02节点正常node01权限不足

##### 4.2 使用copy模块

```bash
ansible  web   -m copy -a  "src=/root/nginx-1.12.tar  dest=/tmp"   -u root

自动化运维工具ansible实战插图10

4.3使用file模块
ansible  web  -m  file  -a "dest=/opt/hello  mode=600 state=directory" -u root

文件状态

absent          #卸载/删除
directory       #目录
file,           #文件
hard            #硬连接
link            #软连接
touch           #空文件

自动化运维工具ansible实战插图11

说明创建目录成功

删除目录

ansible  web  -m  file  -a "dest=/opt/hello   state=absent" 

创建一个文件

ansible  web  -m  file  -a "dest=/opt/hello mode=755  state=touch"
4.3 Yum模块
状态
absent  #卸载
present  #安装
ansible web   -m yum  -a  'name=memcached  state=present'
ansible web   -m yum  -a  'name=memcached  state=absent'
4.4创建用户模块
 ansible  web   -m user  -a   "name=lisi password=123.com"
 ansible  web   -m user  -a   "name=php password=123456  shell=/sbin/nologin"  #指定shell创建

自动化运维工具ansible实战插图12

删除用户

ansible  web   -m user  -a   "name=lisi  state=absent"
4.5git 模块

需要提前创建一个空目录

ansible  web -m  git -a "repo=https://github.com/ansible/ansible.git  dest=/mnt/ansible"
4.6 service模块

启动nginx服务

 ansible web  -m  service  -a "name=nginx state=started"

自动化运维工具ansible实战插图13

加入开机自启

ansible web  -m  service  -a "name=nginx enabled=true"
4.7 setup模块获取相应模块信息

打印所有信息

ansible  web   -m  setup

获取系统版本

ansible  web   -m  setup  -a  "filter=ansible_os_family*"

自动化运维工具ansible实战插图14

获取内存信息

ansible  web   -m  setup  -a  "filter=ansible_*_mb"
免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

作者: 3182235786a

为您推荐

Windows系统怎么保持远程桌面长时间链接不会自动断开呢?

Windows系统怎么保持远程桌面长时间链接不会自动断开呢?

大家经常会遇到正在远程桌面连接如果不进行一些操作,过上个几分钟一会儿之后远程桌面连接就会需要登录,有时还是直接断开需要重...
Win11预览版 Builds 22572.100更新补丁KB5012817发布(附更新修复内容汇总)

Win11预览版 Builds 22572.100更新补丁KB5012817发布(附更新修复内容汇总)

据系统之家小编了解,微软公司于今日凌晨面向Windows预览频道发布了新的Win11 KB5012817补丁,内部版本2...
Win11预览版全新标签式文件资源管理器上手体验:快速切换窗口,还可以滚动标签

Win11预览版全新标签式文件资源管理器上手体验:快速切换窗口,还可以滚动标签

据 Windows Latest 报道,如果你是众多要求微软为文件资源管理器添加标签页的用户之一,现在终于等到了好消息。...
微软 Win11 22H2“太阳谷 2”重大版本将全面改造升级传统经典 UI

微软 Win11 22H2“太阳谷 2”重大版本将全面改造升级传统经典 UI

据 Windows Latest 报道,Windows 11 太阳谷 2 更新预计将对 UI 进行大修,并在 WinUI...
电脑升级win11后怎么退回win10?win11退回win10系统操作方法

电脑升级win11后怎么退回win10?win11退回win10系统操作方法

方法一 1.当我们升级win11后需要退回win10系统时,首先进入开始菜单页面,找到【设置】。 2.在设置的操作页面中...

发表回复

返回顶部