Ansible极速入门

简介: 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_port
      ssh端口号.如果不是默认的端口号,通过此变量设置.
ansible_ssh_user
      默认的 ssh 用户名
ansible_ssh_pass
      ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)
ansible_sudo_pass
      sudo 密码(这种方式并不安全,我们强烈建议使用 --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_file
      ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 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系列(七):执行过程分析、异步模式和速度优化

目录
相关文章
|
7月前
|
存储 运维 Linux
Ansible自动化运维工具安装入门,看这一篇就够了(1)
Ansible自动化运维工具安装入门,看这一篇就够了(1)
|
Web App开发 Python
Ansible入门视频
介绍Ansible入门视频
1396 0
|
测试技术 Shell 网络安全
|
NoSQL Shell 应用服务中间件
|
应用服务中间件 网络安全 nginx
|
7月前
|
运维 Shell Linux
Ansible自动化运维工具之常用模块使用实战(5)
Ansible自动化运维工具之常用模块使用实战(5)
|
9月前
|
网络协议 网络安全
Ansible模块介绍——防火墙模块
Ansible模块介绍——防火墙模块
154 0