ansible——简单介绍,命令使用及模块介绍

1、自动化运维应用场景

文件传输;应用部署;配置管理;任务流编排

2、常用自动化运维工具

Ansible:python,Agentless,中小型应用环境

Saltstack:python,一般需部署agent,执行效率更高

Puppet:ruby, 功能强大,配置复杂,重型,适合大型环境

Fabric:python,agentless

Chef: ruby,国内应用少

3、ansible好处/作用:

模块化:调用特定的模块,完成特定任务

有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块;支持自定义模块

部署简单:基于python和ssh(默认已安装)

无代理:无需在客户端安装额外的agent;

简单易读,Playbook基于yaml格式构建的;

安全:基于OpenSSH,通过ssh来与远程主机通信

幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况

功能强大:可用于管理配置/软件安装/流程自动化;

跨平台支持:控制节点只能在linux上,被控节点支持多平台(linux/windows/网络设备/主机设备);

其他:ansible系统由控制端和被控端组成;基于python语言编写;

4、Ansible主要组成部分

ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件
INVENTORY:Ansible管理主机的清单/etc/anaible/hosts
MODULES:Ansible执行命令的功能模块,多数为内置核心模块,也可自定义
PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用
API:供第三方程序调用的应用程序编程接口
ANSIBLE:组合INVENTORY、API、MODULES、PLUGINS的绿框,可以理解为是ansible命令工具,其为核心执行工具
  
    Ansible命令执行来源:
        USER,普通用户,即SYSTEM ADMINISTRATOR
        CMDB(配置管理数据库) API 调用
        PUBLIC/PRIVATE CLOUD API调用
        USER-> Ansible Playbook -> Ansibile
    利用ansible实现管理的方式:
        ansible命令:主要用于临时命令使用场景
        Ansible-playbook:主要用于长期规划好的,大型项目的场景,需要有前提的规划
    
    Ansible-playbook(剧本)执行过程:
        将已有编排好的任务集写入Ansible-Playbook
        通过ansible-playbook命令分拆任务集至逐条ansible命令,按预定规则逐条执行
    Ansible主要操作对象:
        HOSTS主机
        NETWORKING网络设备
    注意事项
        主控端:执行ansible的主机,又称为中控/master/堡垒机;Python版本需要2.6或以上
        被控端:Python版本小于2.4且需要安装python-simplejson;如开启SELinux需要安装libselinux-python

相关文件

#rpm -ql ansible|less
#配置文件
/etc/ansible/ansible.cfg #主配置文件,配置ansible工作特性
/etc/ansible/hosts #主机清单
/etc/ansible/roles/ #存放角色的目录
#程序
/usr/bin/ansible #主程序,临时命令执行工具
/usr/bin/ansible-doc #查看配置文档,模块功能查看工具
/usr/bin/ansible-galaxy #下载/上传优秀代码或Roles模块的官网平台
/usr/bin/ansible-playbook #定制自动化任务,编排剧本工具
/usr/bin/ansible-pull #远程执行命令的工具
/usr/bin/ansible-vault #文件加密工具
/usr/bin/ansible-console #基于Console界面与用户交互的执行工具

主配置文件/etc/ansible/ansible.cfg

#vim /etc/ansible/ansible.cfg  #一般保持默认即可
[defaults]
#inventory = /etc/ansible/hosts # 主机列表配置文件
#library = /usr/share/my_modules/ #库文件存放目录
#remote_tmp = $HOME/.ansible/tmp #临时py命令文件存放在远程主机目录
#local_tmp = $HOME/.ansible/tmp #本机的临时命令执行目录
#forks = 5 #默认并发数
#sudo_user = root #默认sudo用户
#ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码
#ask_pass = True 
#remote_port = 22
#host_key_checking = False #检查对应服务器的host_key,建议取消注释
#log_path=/var/log/ansible.log #日志文件
#module_name = command #默认模块

主机清单/etc/ansible/hosts

#vim /etc/ansible/hosts
#inventory文件遵循INI文件风格,中括号中的字符为组名;
#可以将同一个主机同时归并到多个不同的组中;
#主机名命名模式相似时可用列表的方式标识;
[test]
192.168.227.[129:132]

#[dbsrvs]
#db-[a:f].example.com

#默认端口22,非默认端口时需使用冒号指明端口号
#www1.magedu.com:2222

ansible-doc常见用法

#ansible-doc #显示模块帮助
#ansible-doc -l #列出所有可用的模块
#ansible-doc ping #显示指定模块的playbook片段
#ansible-doc -s ping #某模块简要帮助用法

/etc/ansible/roles/ 存放角色的目录

ansible-galaxy常见用法

从网站安装roles:连接https://galaxy.ansible.com下载相应的roles

#ansible-galaxy list #列出所有已安装的galaxy
#ansible-galaxy install geerlingguy.redis #安装galaxy
#ansible-galaxy remove geerlingguy.redis #删除galaxy

ansible-playbook

[root@etc-2 ansible]#vim hello.yml
#hello world yml file
- hosts: test2
  remote_user: root
  tasks:
    - name: hello world
      command: /usr/bin/wall hello world
[root@etc-2 ansible]#ansible-playbook hello.yml 
#远程机器验证:
[root@k8s-master1 zydx-yaml]#
                                                                               
Broadcast message from root@k8s-master1 (somewhere) (Mon Mar 21 19:30:53 2022):
                                                                               
hello world
#ansible-playbook hello.yml

ansible-vault

管理加密解密yml文件

#ansible-vault [create|decrypt|edit|encrypt|rekey|view]
#ansible-vault encrypt hello.yml 加密
#ansible-vault decrypt hello.yml 解密
#ansible-vault view hello.yml 查看
#ansible-vault edit hello.yml 编辑加密文件
#ansible-vault rekey hello.yml 修改口令
#ansible-vault create new.yml 创建新文件

ansible用法

ansible <host-pattern> [-m module_name] [-a args]
    --version #显示版本
    -m module #指定模块,默认为command
    -a MODULE_ARGS #指定模块参数,执行的命令
    -v #详细过程 –vv -vvv更详细
    --list #显示主机列表
    -k, --ask-pass #提示输入ssh连接密码,默认Key验证
    -C, --check #检查,并不执行
    -T, --timeout=TIMEOUT #执行命令的超时时间,默认10s
    -u, --user=REMOTE_#USER 执行远程执行的用户
    -b, --become #代替旧版的sudo切换
    --become-user=USERNAME #指定sudo的runas用户,默认为root
    -K, --ask-become-pass #提示输入sudo时的口令
     
<host-pattern>匹配主机的列表
     All
         #ansible all –m ping #表示所有Inventory中的主机
     * :通配符
         #ansible “*” -m ping 
         #ansible 192.168.1.* -m ping
         #ansible “*srvs” -m ping
     或关系
         #ansible “websrvs:appsrvs” -m ping 
         #ansible “192.168.1.10:192.168.1.20” -m ping        
    逻辑与
         #ansible “websrvs:&dbsrvs” –m ping #在websrvs组并且在dbsrvs组中的主机
    逻辑非
         #ansible ‘websrvs:!dbsrvs’ –m ping #在websrvs组不在dbsrvs组的主机 #注意:此处为单引号
    综合逻辑
         #ansible ‘websrvs:dbsrvs:&appsrvs:!ftpsrvs’ –m ping
    正则表达式
         #ansible “websrvs:&dbsrvs” –m ping 
         #ansible “~(web|db).*\.magedu\.com” –m ping    

ansible常见模块

[-m module_name]ansible常见模块

0、ping:#测试网络连通性
#ansible all -m ping -u wang -k #以wang用户执行ping存活检测
#ansible all -m ping -u wang –b -k #以wang sudo至root执行ping存活检测
#ansible all -m ping -u wang –b -k --become-user mage #以wang sudo至mage用户执行ping存活检测


1、Command:#在远程主机执行命令,默认模块,可忽略-m选项
#ansible all -m command -u wang --become-user=root -a 'ls /root' -b –k -K #以wang sudo至root用户执行ls
#ansible srvs -m command -a ‘echo magedu |passwd --stdin wang’

2、Shell:#和command相似,此外支持 $VARNAME < > | ; & 等
#ansible srv -m shell -a 'echo magedu |passwd --stdin wang' 
#一些复杂命令比如 cat /tmp/stanley.md | awk -F'|' '{print $1,$2}' &> /tmp/example.txt等,即使使用-m shell模块也可能会失败,解决办法是将其写到脚本中到远程执行。
#可用于批量执行单条简单命令

3、Script:#在远程主机上运行ansible服务器上的脚本
#ansible websrvs -m script -a /data/f1.sh
#可用于批量执行启动脚本,备份脚本等
 
4、Copy:#从主控端复制文件到远程主机
#ansible test -m copy -a "src=/etc/ansible/hosts dest=/root/test/ backup=yes mode=600" #如目标存在,默认会被覆盖,此处backup=yes指定为先备份
#ansible test -m copy -a "content='/etc/ansible/hosts content\n' dest=/root/test/f2.sh backup=yes mode=600" #指定内容,直接生成目标文件
#可用于批量修改并推送配置文件等

5、Fetch:#从远程主机提取文件至主控端,copy相反,目前不支持目录
#ansible test -m fetch -a 'src=/root/a.sh dest=/data/scripts' 

6、File:#设置文件属性
#ansible web -m file -a "path=/root/a.sh owner=wang mode=755"
#ansible web -m file -a 'src=/app/testfile dest=/app/testfile-link state=link'
#可用于批量修改文件属性,如软链接,修改用户组权限等
 
7、unarchive:#解包解压缩,有两种用法:
#一是将ansible主机上的压缩包在本地解压缩后传到远程主机上,设置copy=yes. 
#二是将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no 
#ansible srv -m unarchive -a 'src=foo.tgz dest=/var/lib/foo'
#ansible srv -m unarchive -a 'src=/tmp/foo.zip dest=/data copy=no mode=0777'
#ansible srv -m unarchive -a 'src=https://example.com/example.zip dest=/data copy=no'
#可用于安装部署时批量解压包至多个远程主机的指定目录
 
8、Archive:#打包压缩
#ansible all -m archive -a 'path=/etc/sysconfig dest=/data/sysconfig.tar.bz2 format=bz2 owner=wang mode=0777'
 
9、Hostname:#管理主机名
#ansible node1 -m hostname -a "name=websrv"
#可用于批量修改主机名

10、Cron:#计划任务
#支持时间:minute,hour,day,month,weekday
#ansible srv -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.16.0.1 &>/dev/null' name=Synctime" #创建任务
#ansible srv -m cron -a 'state=absent name=Synctime' #删除任务
#可用于批量执行计划任务

11、Yum:#管理包
#ansible srv -m yum -a 'name=httpd state=present' #安装
#ansible srv -m yum -a 'name=httpd state=absent' #删除
#可用于批量执行安装卸载等

12、Service:#管理服务
#ansible srv -m service -a 'name=httpd state=stopped'
#ansible srv -m service -a 'name=httpd state=started enabled=yes'
#ansible srv -m service -a 'name=httpd state=reloaded'
#ansible srv -m service -a 'name=httpd state=restarted' 
#可用于批量启停服务

13、User:#管理用户
#ansible srv -m user -a 'name=user1 comment="test user" uid=2048 home=/app/user1 group=root'
#ansible srv -m user -a 'name=sysuser1 system=yes home=/app/sysuser1 '
#ansible srv -m user -a 'name=user1 state=absent remove=yes' #删除用户及家目录等数据

14、Group:#管理组
#ansible srv -m group -a "name=testgroup system=yes"
#ansible srv -m group -a "name=testgroup state=absent"

ansible命令执行过程

 1. 加载自己的配置文件 默认/etc/ansible/ansible.cfg
  2. 加载自己对应的模块文件,如command
  3. 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
  4. 给文件+x执行
  5. 执行并返回结果
  6. 删除临时py文件,退出 

执行状态:

 绿色:执行成功但受控端状态不变,如-a ping
  黄色:执行成功且受控端状态发生改变,如-a ls
  红色:执行失败

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值