博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自动化运维工具之Ansible
阅读量:5275 次
发布时间:2019-06-14

本文共 6391 字,大约阅读时间需要 21 分钟。

特性

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

Ansible 主要组层部分

  • Ansible Playbooks: 任务剧本(任务集) ,编排定义 Ansible 任务集的配置文件, 由 Ansible 顺序依次执行,桐城市 Json格式的 YML文件
  • Inventory: Ansible 管理主机的清单 /etc/anaible/hosts
  • Modules: ansible 执行命令的功能模块,多数为内置的核心模块,也可自定义
  • Plugins: 模块功能的补充,如链接类型插件,循环插件,变量插件,过滤插件等,不常用
  • API: 提供第三方程序调用的应用程序编程接口
  • Ansible: 组合Inventopy,API,modules,plugins的绿框,可以理解为是 ansible 命令工具,其为核心执行工具
  • Ansible 命令执行来源:
    • User, 普通用户, 即 system administrator
    • CMDB(资产管理系统) API 调用
    • PUBLIC/PRIVATE Cloud API调用
    • USER - Ansible Playbook - Ansibile
  • 利用ansible 管理的方式
    • Ad-Hoc 即 ansible命令,主要用于临时命令使用场景
    • Ansible-Playbook 主要用于长期规划好的,大型项目的场景,需要有前提的规划

 相关文件

  • 配置文件
    • /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  文件加密工具
    • /ust/bin/ansible-console  基于Console界面与用户交互的执行工具

Ansible 文件配置

  ansible 通过 ssh 实现配置管理,应用部署,任务执行等功能,因此,需要实现配置 ansible 端能基于秘钥认证的方式联系各被管理节点

  ansible 命令用法

ansible 
[-m module_name] [-a args] --version #显示版本 -m module # 指定模块,默认为 command -v # 详细过程 -vv -vvv 更详细的 --list-hosts # 显示主机列表,可简写 --list -k, --ask-pass # 显示连接密码,默认key验证 -C,--check # 检查,并不执行 -T, --timeout=TIMEOUT # 执行命令的超时时间,默认10s -u, --user = REMOTE_USER # 执行远程执行的用户 -b, --become # 代替旧版的 sudo 切换

主配置文件ansible.cfg 配置

[default]inventory  = /etc/ansible/host        # 主机列表配置文件library = /usr/share/my_modules    # 哭文件存放目录remote_tmp = $HOME/.ansible/tmp    # 临时py命令文件存放在运城主机目录local_tmp    =  $HOME/.ansible/tmp     # 本机的临时命令执行目录forks = 5        # 默认并发数sudu_user    = root # 默认sudo用户ask_sudo_pass = True    # 每次执行 ansible 命令是否询问ssh密码ask_pass = Trueremote_port = 22host_key_checking = False # 检查对应服务器的host_key,建议取消注释 log_path = /var/log/ansible.log  # 默认日志 建议开启

主机清单 hosts 配置

# 分组配置,一台主机可以再多个组内, 默认 分组 all 全部主机[web]172.16.0.40[db]172.16.0.40172.16.0.41# www[001:006].example.com

ansible 命令执行过程

1. 加载自己的配置文件 默认/etc/ansible/ansible.cfg2. 加载自己对应的模块文件 如: command3. 通过 ansible 将模块或命令生成对应的临时 py 文件,并将该文件传输至远程服务器的对应执行用户 $HOME/.ansible/tmp/ansible-tmp-数字/xxx.py 文件4. 给文件 +x 执行权限5. 执行并返回结果6. 删除临时 py 文件, sleep 0 退出# 执行状态绿色: 执行成功并且不需要做改变的操作黄色: 执行成功并且对目标主机做变更红色: 执行失败

模块

# command    #在远程主机执行命令,默认模块,可忽略 -m 选项,变量 重定向 管道符等有问题,需要使用 shell模块    - chdir    # 改变工作目录~]# ansible all -m command -a "chdir=/var/log/ ls"    - creates    # 如果文件存在 则不执行后续命令~]# ansible all -m command -a "creates=/etc/fstab ls /" 172.16.0.40 | SUCCESS | rc=0 >>skipped, since /etc/fstab exists172.16.0.41 | SUCCESS | rc=0 >>skipped, since /etc/fstab exists    - removes    # 如果文件存在 则执行后续命令 ~]# ansible all -m command -a "removes=/etc/fstab ls /"# shell     # 和 command 相似,用shell 执行命令 命令要用单引号~]# ansible all -m shell -a 'echo $HOSTNAME'# Script : 运行脚本, 本机脚本在远程主机上运行~]# ansible all -m script -a '/data/test.sh'# copy 从服务器复制文件到客户端~]# ansible all -m copy -a 'src=/data/test.sh dest=/data/ backup=yes mode=600 owner=test' ~]# ansible all -m copy -a 'content="df -h\nhostname\nls\n" dest=/data/f1.sh'# src 源文件# dest 目标文件# backup=yes  如果存在同名文件是否备份# mode 文件权限# owner 所有者 # content 把内容写到某个文件
  • Fetch
    • 从客户端去文件至服务器
和 copy 模块相反,不能抓取目录,目录可先tar~]# ansible all -m fetch -a 'src=/etc/passwd dest=/data'~]# tree /data//data/├── 172.16.0.40│   └── etc│       └── passwd├── 172.16.0.41│   └── etc│       └── passwd
  • file  
    • 设置文件属性,管理文件
# 创建一个空文件~]# ansible all -m file -a 'path=/data/testfile state=touch mode=600 owner=test group=test'# 创建连接文件~]# ansible all -m file -a 'src=/data/testfile path=/tmp/testfile-link state=link'# 创建空文件夹~]# ansible all -m file -a 'path=/data/test1 state=directory'# 删除文件夹~]# ansible all -m file -a 'path=/data/test1 state=absent'
  • Hostname
    • 管理主机名
~]# ansible 172.16.0.41 -m hostname -a 'name=test-node1'
  • cron 
    • 定时任务模块 
# 支持时间 minute,  hour, day, month, weekday# 周六周日 每隔五分钟 打印一条消息~]# ansible all -m cron -a 'minute=*/5 weekday=0,6 job="/usr/bin/wall cron job" name="test cronjob"'# 禁用 定时任务~]# ansible all -m cron -a 'disabled=true job="/usr/bin/wall cron job" name="test cronjob"'# 取消禁用~]# ansible all -m cron -a 'disabled=no job="/usr/bin/wall cron job" name="test cronjob"'# 删除计划任务~]# ansible all -m cron -a 'state=absent job="/usr/bin/wall cron job" name="test cronjob"'
  • yum
    • 软件包管理
# 安装软件包~]# ansible all -m yum -a 'name=httpd state=present'# 删除软件包~]# ansible all -m yum -a 'name=httpd state=absent'# 安装最新版本~]# ansible all -m yum -a 'name=httpd state=latest'# 临时禁用 gpg 检查 ~]# ansible all -m yum -a 'name=httpd state=present disable_gpg_check=yes'# 更新缓存~]# ansible all -m yum -a 'name=httpd,vsftpd state=present disable_gpg_check=yes update_cache=yes'
  • service
    • 管理服务
~]# ansible all -m service -a 'name=httpd state=stopped enabled=yes'~]# ansible all -m service -a 'name=httpd state=started'~]# ansible all -m service -a 'name=httpd state=restarted'
  • user
    • 管理用户
# 添加用户,指定: 备注,uid,家目录,主组,附属组~]# ansible all -m user -a 'name=test2 comment="test user2" uid=2000 home=/data/test2 group=test groups=root,bin'~]# ansible all -a 'getent passwd test2'172.16.0.40 | CHANGED | rc=0 >>test2:x:2000:1001:test user2:/data/test2:/bin/bash# 添加系统用户 ,shell 类型 ~]# ansible all -m user -a 'name=sysuser system=yes shell=/sbin/nologin'# 删除用户~]# ansible all -m user -a 'name=sysuser state=absent'# 删除用户同时删除家目录~]# ansible all -m user -a 'name=test2 state=absent remove=yes'
  • group
    • 管理组
# 添加组~]# ansible all -m group -a 'name=group1'# 查看组~]# ansible all -a 'getent group group1'# 删除组~]# ansible all -m group -a 'name=group1 state=absent'

Playbook

ansible-galaxy

  • 连接 https://galaxy.ansible.com 下载相应的 roles
  • 列出所有已经安装的 galaxy
    • ansible-galaxy list
  • 安装 galaxy
    • ansible-galaxy install geerlingguy.nginx
  • 删除 galaxy
    • ansible-galaxy remove geerlingguy.nginx

ansible-pull

  • 推送命令至远程, 效率无限提升,对运维要求比较高

ansible-playbook

  • ansible-playbook hello.yml
  • ansible-playbook --check hello.yml # 测试执行

ansible-vault

  • 功能: 管理加密解密 yml文件
  • ]# 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 hello.yml    # 创建新文件

 

转载于:https://www.cnblogs.com/yanshicheng/p/10671155.html

你可能感兴趣的文章
项目置顶随笔
查看>>
Redis的安装与使用
查看>>
P1970 花匠
查看>>
java语言与java技术
查看>>
NOIP2016提高A组五校联考2总结
查看>>
iOS 项目的编译速度提高
查看>>
table中checkbox选择多行
查看>>
Magento开发文档(三):Magento控制器
查看>>
性能调优攻略
查看>>
ie6解决png图片透明问题
查看>>
瞬间的永恒
查看>>
2019-8-5 考试总结
查看>>
JS中实现字符串和数组的相互转化
查看>>
web service和ejb的区别
查看>>
Windows Azure Cloud Service (29) 在Windows Azure发送邮件(下)
查看>>
CS61A Efficiency 笔记
查看>>
ArcGIS Server Javascript 多图对比功能
查看>>
微信上传素材返回 '{"errcode":41005,"errmsg":"media data missing"}',php5.6返回
查看>>
div或者p标签单行和多行超出显示省略号
查看>>
Elasticsearch 滚动重启 必读
查看>>