ansible讲解介绍原装基础

目录

常用自动化运维工具

Ansible 功能 

Ansible 特点 

优点

缺点 

Ansible 架构 

Ansible 命令执行来源 

注意事项 

Ansible 安装和常见模块 

ansible-doc

ansible

都支持

 *:通配符

或关系         #ansible "webservers:appservers" -m ping

逻辑与        #ansible "webservers:&dbservers" -m ping

逻辑非        #ansible 'all:!dbservers:!webservers' -m ping     有!号必须用单信号

综合逻辑        #ansible 'webservers:dbservers:&appservers:!ftpsrvs' -m ping

正则表达式   

command 系统默认模块 允许后面加linux命令   -v越多越详细4顶

 shell   #就可以多和执行了

ansible-console   集体交互式执行命令


常用自动化运维工具

  • Ansible:python,Agentless,中小型应用环境
  • Saltstack:python,一般需部署agent,执行效率更高
  • Puppet:ruby, 功能强大,配置复杂,重型,适合大型环境
  • Fabric:python,agentless
  • Chef:ruby,国内应用少
  • Cfengine
  • func

Ansible 功能 

  • 批量执行远程命令,可以对远程的多台主机同时进行命令的执行
  • 批量安装和配置软件服务,可以对远程的多台主机进行自动化的方式配置和管理各种服务
  • 编排高级的企业级复杂的IT架构任务, Ansible的Playbook和role可以轻松实现大型的IT复杂架构
  • 提供自动化运维工具的开发API, 有很多运维工具,如jumpserver就是基于 ansible 实现自动化管理功能

Ansible 特点 

优点

  • 功能丰富的模块:提供了多达数千个的各种功能的模块,完成特定任务只需调用特定模块即可,还支
  • 持自定义模块,可使用任何编程语言写模块
  • 使用和部署简单: 无需安装专用代理软件,基于python和SSH(默认已安装)实现
  • 安全: 基于OpenSSH实现安全通讯无需专用协议
  • 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况,此特性和模块有关
  • 支持playbook编排任务,YAML格式,编排任务,支持丰富的数据结构
  • 较强大的多层解决方案 Role
  • Python语言实现, 基于Paramiko(python对ssh的实现),PyYAML,Jinja2(模板语言)三个关键模块
  • 属于红帽(IBM)公司产品,背景强大,未来发展前景光明

缺点 

  • 如果管理的主机较多时,执行效率不如saltstack高
  • 当前还不支持像MySQL数据库一样的事务回滚

Ansible 架构 

组合INVENTORY、API、MODULES、PLUGINS的绿框,为ansible命令工具,其为核心执行工具

  •  INVENTORY:Ansible管理主机的清单文件,默认为 /etc/ansible/hosts
  • MODULES:Ansible执行命令的功能模块,多数为内置核心模块,也可自定义
  • PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用
  • API:供第三方程序调用的应用程序编程接口

Ansible 命令执行来源 

  • USER 普通用户,即SYSTEM ADMINISTRATOR
  • PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执
  • 行,通常是JSON格式的YML文件
  • CMDB(配置管理数据库) API 调用
  • PUBLIC/PRIVATE CLOUD API调用
  • USER-> Ansible Playbook -> Ansibile

ansible 的执行过程及介绍

  1. 加载自己的配置文件,默认/etc/ansible/ansible.cfg
  2.  查找主机清单中对应的主机或主机组
  3.  加载自己对应的模块文件,如:command
  4.  通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户     Python文件
  5. $HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
  6.  给文件+x执行
  7.  删除临时py文件,退出
  8. 可以加-v最多四 看的更详细

 颜色分类

黄色:成功执行并伴随着状态的改变

绿色:成功执行并且没有发生状态的改变

红色: 执行失败

配置文件 

ansible --version  可以看到主机清单文件的地方,以及版本型号等
 

注意事项 

  • 执行ansible的主机一般称为管理端, 主控端,中控,master或堡垒机
  • 主控端Python版本需要2.6或以上
  • 被控端Python版本小于2.4,需要安装python-simplejson
  • 被控端如开启SELinux需要安装libselinux-python
  • windows 不能做为主控端,只能做为被控制端

Ansible 安装和主客实验

[root@ubuntu2004 ~]#apt install ansible -y    #下载安装

100为管理端

[root@ubuntu2004 ~]#vim /etc/ansible/ansible.cfg    #主机清单文件

[root@ubuntu2004 ~]#vim /etc/ansible/hosts             #在最下面加进去,就是你的客户端

生产中环境太多的话可以用Excet(WPS表格) 拉出来导进去

[webservers]
10.0.0.101
10.0.0.102

[appservers]
10.0.0.[7:8]
10.0.0.101

ssh-keygen  生成本机密钥

 [root@ubuntu2004 ~]#vim ssh_key.sh    #把这个执行下 在执行下面脚本用来key链接认证

#!/bin/bash
# 
#********************************************************************
#Author:            wangxiaochun
#QQ:                29308620
#Date:              2022-09-27
#FileName:          ssh_key.sh
#URL:               http://www.wangxiaochun.com
#Description:       The test script
#Copyright (C):     2022 All rights reserved
#********************************************************************
IPLIST="
10.0.0.8
10.0.0.7
10.0.0.101
10.0.0.102"
#rpm -q sshpass &> /dev/null || yum -y install sshpass
[ -f /root/.ssh/id_rsa ] || ssh-keygen -f /root/.ssh/id_rsa -P ''
export SSHPASS=123456
for IP in $IPLIST;do
{ sshpass -e ssh-copy-id -o StrictHostKeyChecking=no $IP; } &
done
wait

[root@ubuntu2004 ~]#ssh 10.0.0.8
Last login: Tue Sep 27 09:32:26 2022 from 10.0.0.1
[root@rocky8 ~]#exit
logout
Connection to 10.0.0.8 closed.

[root@ubuntu2004 ~]#ansible all  --list-hosts  #查看全部链接
  hosts (4):
    10.0.0.101
    10.0.0.102
    10.0.0.7
    10.0.0.8
 

[root@ubuntu2004 ~]#ansible appservers --list-hosts    #查看组链接
  hosts (3):
    10.0.0.7
    10.0.0.8
    10.0.0.101

ansible-doc  -l   查看所有的模块列表    

ansible-doc -l |grep mysql   也可以这搜索你想要的模块

nsible-doc nginx_status_info  详细查看模块作用

nsible-doc -s nginx_status_info 简要查看模块作用

ansible

Ansible Ad-Hoc 的执行方式的主要工具就是 ansible
特点: 一次性的执行,不会保存执行命令信息,只适合临时性或测试性的任务 

ansible 命令用法

格式:

ansible <host-pattern> [-m module_name] [-a args]

选项说明:

--version #显示版本
-m module #指定模块,默认为command
-v #详细过程 -vv -vvv更详细
--list-hosts #显示主机列表,可简写 --list
-C, --check #检查,并不执行
-T, --timeout=TIMEOUT #执行命令的超时时间,默认10s
-k, --ask-pass #提示输入ssh连接密码,默认Key验证
-u, --user=REMOTE_USER #执行远程执行的用户,默认root
-b, --become #代替旧版的sudo实现通过sudo机制实现提升权限
--become-user=USERNAME #指定sudo的runas用户,默认为root
-K, --ask-become-pass #提示输入sudo时的口令
-f FORKS, --forks FORKS #指定并发同时执行ansible任务的主机数
-i INVENTORY, --inventory INVENTORY #指定主机清单文件 

   测试       用密码验证链接只有一次机会

#以wang用户执行ping存活检测     
ansible all -m ping -u wang -k
#以wang sudo至root执行ping存活检测
ansible all -m ping -u wang -k -b
#以wang sudo至mage用户执行ping存活检测
ansible all -m ping -u wang -k -b --become-user=mage
#以wang sudo至root用户执行ls
ansible all -m command -u wang -a 'ls /root' -b --become-user=root -k -K 

  范例: 并发执行控制

#分别执行下面两条命令观察结果
[root@ansible ~]#ansible all -a 'sleep 5' -f1    #并发执行一台    可以再配置文件里forks更改
[root@ansible ~]#ansible all -a 'sleep 5' -f10   #并发执行10台 默认·为·5 

 sudo授权, 切换不需要输密码

 [root@rocky8 ~]#vim /etc/sudoers   

## Allow root to run any commands anywhere 
root    ALL=(ALL)   ALL
wang   ALL=(ALL)   NOPASSWD: ALL
## Allows members of the 'sys' group to run networking, software, 
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)   ALL

都支持

 *:通配符

或关系         #ansible "webservers:appservers" -m ping   有1也有去2


逻辑与        #ansible "webservers:&dbservers" -m ping    同时有


逻辑非        #ansible 'dbservers:!webservers' -m ping     有!号必须用单信号

就是只属于dbservers的文件别的里面没有

综合逻辑        #ansible 'webservers:dbservers:&appservers:!ftpsrvs' -m ping

正则表达式   

ansible "webservers:dbservers" -m ping
ansible "~(web|db).*\.magedu\.com" -m ping

案例

[root@ubuntu2004 ~]#ansible "10.0.0.*" -m ping
10.0.0.8 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
10.0.0.7 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"

相关命令都是以python为执行的。第一步就是把python程序命令拷到远程主机。在上面执行,执行完自己删除 在隐藏文件夹 ls -a .ansible/tmp/下

command 系统默认模块 允许后面加linux命令   没幂等性最好别用

功能:在远程主机执行命令,此为默认模块,可忽略 -m 选项
注意:此命令不支持 $VARNAME < > | ; & 等,可以用shell模块实现
注意:此模块不具有幂等性

linux命令仅支持单个  

chdir=dir #执行命令前,先切换至目录dir
creates=file #当file不存在时才会执行
removes=file #当file存在时才会执行

[root@ubuntu2004 ~]#ansible all -a 'pwd'         #-a 后面加命令 command默认可不写

10.0.0.7 | CHANGED | rc=0 >>
/root
10.0.0.8 | CHANGED | rc=0 >>
/root
10.0.0.102 | CHANGED | rc=0 >>
/root
10.0.0.101 | CHANGED | rc=0 >>
/root

 [root@ubuntu2004 ~]#ansible webservers -a 'chdir=/tmp pwd'    #chdir(改文件夹)改到tmp下执行  不能cd或短路与

10.0.0.102 | CHANGED | rc=0 >>
/tmp
10.0.0.101 | CHANGED | rc=0 >>
/tmp

creates判断文件是否存在,存在不执行, removes相反

  • ansible webservers -a 'creates=/etc/hosts pwd'   不执行
  • ansible webservers -a 'removes=/etc/hosts pwd'  执行

 shell   #就可以支持等多个执行之类的了    迫不得已可以用(不幂等)

不修改默认注释,手动-m    ,修改完则是默认

[root@ubuntu2004 ~]#ansible webservers -m shell -a 'chdir=/tmp pwd  

[root@ubuntu2004 ~]#ansible webservers -m shell -a 'echo hehe:123456|chpasswd'    默认

shell:

     cmd: rpm -qa nginx | wc -l        #cmd输出命令

vim /etc/ansible/ansible.cfg      #改后就是默认shell了

#log_path = /var/log/ansible.log

# default module name for /usr/bin/ansible
module_name = shell                                      #把注释的这行去掉注释,给成shell

# use this shell for commands executed under sudo
                                                                                                                          114,20    22%

  • 绿色:执行成功并且对目标主机不需要做改变的操作
  • 黄色:执行成功并且对目标主机做变更
  • 红色:执行失败

ansible-console   集体交互式执行命令

提示符格式

执行用户@当前操作的主机组 (当前组的主机数量)[f:并发数]$

root@ansible ~]#ansible-console   连进来
Welcome to the ansible console.
Type help or ? to list commands.
root@all (3)[f:5]$ ping    ping所有
10.0.0.7 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
10.0.0.6 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
10.0.0.8 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
root@all (3)[f:5]$ list    查看
10.0.0.8
10.0.0.7
10.0.0.6 

root@all (3)[f:5]$ cd webservers     切换
root@webservers (2)[f:5]$ list
10.0.0.7
10.0.0.8
root@webservers (2)[f:5]$ forks 10    切换10并发
root@webservers (2)[f:10]$ cd appservers
root@appservers (2)[f:5]$ yum name=httpd state=present
root@appservers (2)[f:5]$ service name=httpd state=started

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值