Ansible极速入门
官方定义:"Ansible is Simple IT Automation"——简单的自动化IT工具
Ansible 为运维自动化工具,一种集成 IT 系统的配置管理、应用部署、执行特定任务的开源平台,是 AnsibleWorks 公司名下的项目,该公司由 Cobbler 及 Func 的作者于 2012 年创建成立。
Ansible 基于 Python 语言实现,由 Paramiko 和 PyYAML 两个关键模块构建。
Ansible 特点:
部署简单,只需在主控端部署 Ansible 环境,被控端无需做任何操作。
默认使用 SSH(Secure Shell)协议对设备进行管理。
主从集中化管理。
配置简单、功能强大、扩展性强。
支持 API 及自定义模块,可通过 Python 轻松扩展。
通过 Playbooks 来定制强大的配置、状态管理。
对云计算平台、大数据都有很好的支持。
提供一个功能强大、操作性强的 Web 管理界面和 REST API 接口 —- AWX 平台。
Ansible 与 SaltStack:
最大的区别是 Ansible 无需在被监控主机部署任何客户端代理,默认通过 SSH 通道进行远程命令执行或下发配置。
相同点是都具备功能强大、灵活的系统管理、状态配置,都使用 YAML 格式来描述配置,两者都提供丰富的模板及 API,对云计算平台、大数据都有很好的支持。
如何安装
yum install -y ansible
如果安装不成功,提示 No package ansible available,可能需要安装前置依赖包epel-release
yum install -y epel-release
并且不能一起写,否则也还会触发这个问题 ,比如如下写法:
yum install -y epel-release ansible
如何配置minion
vi /etc/ansible/hosts
[gameservers]
106.53.236.78 ansible_ssh_user=root ansible_ssh_port=3737[backendservers]
106.53.236.198 ansible_ssh_user=root ansible_ssh_port=3737
如果要一劳永逸的配置多台,可以用如下格式
192.168.1.[1:100]
其他参数如以下列表:
ansible_ssh_host将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置ansible_ssh_portssh端口号.如果不是默认的端口号,通过此变量设置.ansible_ssh_user默认的 ssh 用户名ansible_ssh_passssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)ansible_sudo_passsudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)ansible_sudo_exe (new in version 1.8)sudo 命令路径(适用于1.8及以上版本)ansible_connection与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行.ansible_ssh_private_key_filessh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.ansible_shell_type目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh' 或 'fish'.ansible_python_interpreter目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如 \*BSD, 或者 /usr/bin/python不是 2.X 版本的 Python.我们不使用 "/usr/bin/env" 机制,因为这要求远程用户的路径设置正确,且要求 "python" 可执行程序名不可为 python以外的名字(实际有可能名为python26).
ansible_ruby_interpreter与 ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径
让我们来远程执行下指令:
[root@VM_0_11_centos script]# ansible 106.53.236.195 -m shell -a "df -h"
106.53.236.198 | UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", "unreachable": true
}
原因分析:没有在ansible管理节点(即安装ansible的节点)上添加目标节点(即需要管理的节点)的ssh认证信息。
解决步骤:
1:管理节点生成SSH-KEY
ssh-keygen
成功后在~/.ssh/路径下将生成ssh密钥文件:id_rsa及id_rsa.pub
2:添加目标节点的SSH认证信息
cd ~/.ssh/
[root@VM_0_11_centos .ssh]# ls
id_rsa id_rsa.pub
ssh-copy-id -p 3737 root@106.53.236.198
会让你输入密码,添加认证信息后,目标节点主机的~/.ssh/目录下将会出现一个authorized_keys文件,里面包含了ansible管理节点的公钥信息,可以检查一下是否存在。
3:在确定目标主机的SSH认证信息都已正确添加且目标主机的~/.ssh/目录都存在管理节点的公钥信息后,再执行之前出错的ansible指令,有效:
[root@VM_0_11_centos .ssh]# ansible 106.53.236.198 -m shell -a "df -h"
106.53.236.198 | SUCCESS | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 50G 3.7G 44G 8% /
/dev/vdb 50G 462M 47G 1% /data
Ansible远程执行命令
指令指令格式
ansible [主机组] -m [模块方法] -a [指令]
ansible 106.53.236.198 -m command -a 'w' #对单个IP
ansible gameservers -m shell -a "df -h" #对服务器组
ansible 106.53.236.198 -m shell -a "df -h"
ansible all -m ping #对所有minion
Ansible远程执行脚本
ansible gameservers -m shell -a "cd /data/server/logger/;sh start.sh"
Ansible拷贝文件或者目录
对主机组拷贝文件,目标中的文件不存在时就会创建,存在时就会覆盖原来的内容,写入新的内容
ansible gameservers -m copy -a "src=/data/server/data/version.properties dest=/data/server/data owner=root group=root mode=0755"
ansible gameservers -m copy -a "src=/data/server/data/version.properties dest=/data/server/data"
ansible gameservers -m copy -a "src=/data/server/router/lib/game-common.jar dest=/data/server/router/lib"
复制目录,定义所属组,当data不存在时就会创建,并把data传入到/data/server/下
ansible gameservers -m copy -a "src=/data/server/data/ dest=/data/server/data/"
进阶篇
ansible默认是同步阻塞模式,它会等待所有的机器都执行完毕才会在前台返回。可以采取异步执行模式。
如何提速?
vi /etc/ansible/ansible.cfg
pipelining=False
SSH pipelining 是一个加速 Ansible 执行速度的简单方法。ssh pipelining 默认是关闭,修改为 pipelining=True
DOCKERFILE里添加ansible
RUN yum makecache && yum install -y ansible && yum update -y; yum clean all
ADD ./devops/hosts /etc/ansible/
RUN sed -i 's/^#pipelining.*/pipelining = True/g' /etc/ansible/ansible.cfg
RUN sed -i 's/^#host_key_checking.*/host_key_checking = False/g' /etc/ansible/ansible.cfg
参考文献:
saltstack与ansible对比
Ansible系列(七):执行过程分析、异步模式和速度优化
Ansible极速入门相关推荐
- 云计算网络极速入门-混合云网络
目录 1.混合云组网技术 1.1.WAN 1.2.VPN 1.3.BGP 1.4.SD-WAN 2.混合云组网方案 3.混合云管理 4.混合云的应用场景 本文是<云计算网络极速入门>三部曲 ...
- 慕课网_《RabbitMQ消息中间件极速入门与实战》学习总结
慕课网<RabbitMQ消息中间件极速入门与实战>学习总结 时间:2018年09月05日星期三 说明:本文部分内容均来自慕课网.@慕课网:https://www.imooc.com 教学源 ...
- 九十分钟极速入门Linux——Linux Guide for Developments 学习笔记
转载自: 九十分钟极速入门Linux--Linux Guide for Developments 学习笔记 http://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA ...
- PyTorch 深度学习: 60 分钟极速入门
PyTorch 深度学习: 60 分钟极速入门 2019年年初,ApacheCN组织志愿者翻译了PyTorch1.2版本中文文档(github地址),同时也获得了PyTorch官方授权,我相信已经有许 ...
- Knative 初体验:CICD 极速入门
Knative 社区很早就在讨论用 Tekton 替换 Build 模块的相关事宜.Knative Build 官方已经正式说明不再建议使用 Knative Build 了. 如果你知道 Knativ ...
- 60 分钟极速入门 PyTorch
2017 年初,Facebook 在机器学习和科学计算工具 Torch 的基础上,针对 Python 语言发布了一个全新的机器学习工具包 PyTorch. 因其在灵活性.易用性.速度方面的优秀表现,经 ...
- 24小时学会python_零基础python24小时极速入门学习
本篇文章是 Python 入门必须掌握的知识点,24小时极速入门,是针对那些没有任何编程经验,从零开始学习 Python 的同学 想要快速学会python的6个关键点. 分别是:数据类型. 条件判断. ...
- Ansible Tower 入门 1 - 配置主机清单和访问凭证
Ansible Tower 入门 1 - 配置主机清单和访问凭证 Ansible Tower 入门 2 - 通过模板运行 Git 上的 Playbook 和 Role Ansible Tower 入门 ...
- 极速入门Gamemaker编程语言
极速入门Gamemaker编程语言 开篇废话 这文档适合已经会使用其他编程语言(C#.C\C++.java.python等)的游戏开发爱好者学习 (逛CSDN怎么会有不会编程的人呢) ,如果不会其他语 ...
最新文章
- c语言实现指定路径文件读取_C语言实现文件复制功能(包括文本文件和二进制文件)...
- CryptoAPI与openssl数字签名与验证交互
- 2014第3周四杂记
- react native loading动画_React高级进阶指南
- Bailian3728 Blah数集【数学+set】
- Java中int数字_java int 比较数值里面是否有某个数字
- Linux-MySQL主从配置
- ios tabtar 使用方法_Appium界面自动化测试(13)(iOS/Python):元素定位及操作
- MYSQL Day03~MySQL 常用命令汇总
- [echarts] 柱状图 改变划过柱子时的阴影颜色
- 使用Unity3D编写ARPG游戏——角色属性的定义与实现(一)
- Kanzi 记录:界面整体介绍(一),自己理解,绝非生搬硬套。
- oracle numa map size mismatch,Oracle启动时提示map size mismatch; abort
- 洛谷P2678 Java解法
- python numpy 子数组_详解:Python 取numpy数组的某几行某几列方法(含对与错示例)...
- setMouseTracking(true)
- 前端js手写日历相关函数(附demo)
- iOS前期OC训练OC_10Block
- 未来五年最有前景的编程语言是什么?
- 大数据导论习题_2020智慧树答案 大数据概论 最新知到章节测试答案