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系列(七):执行过程分析、异步模式和速度优化

目录
相关文章
|
存储 运维 Linux
Ansible自动化运维工具安装入门,看这一篇就够了(1)
Ansible自动化运维工具安装入门,看这一篇就够了(1)
135 0
|
3月前
|
运维 自然语言处理 安全
自动化运维的利器:Ansible入门与实践
【8月更文挑战第33天】在现代IT基础设施的管理中,自动化运维已成为提高效率、减少错误的关键技术。Ansible作为一款开源的自动化配置管理和应用部署工具,以其简洁性、易用性和强大的功能受到广泛欢迎。本文将介绍Ansible的基本概念、安装步骤和简单使用,通过实际案例展示其在自动化运维中的应用。
|
4月前
|
运维 Devops 应用服务中间件
自动化运维的利器:Ansible入门与实践
【8月更文挑战第27天】在这个数字化时代,高效的系统管理变得尤为重要。Ansible,作为一个简单而强大的自动化运维工具,正逐渐成为DevOps工程师的首选。本篇文章将带你了解Ansible的基本概念,通过实际操作演示其如何简化日常任务,以及它如何帮助你实现自动化部署和配置管理。无论你是初学者还是有经验的运维人员,这篇文章都将为你提供有价值的信息和启示。
|
1月前
|
运维 负载均衡 Ubuntu
自动化运维的利器:Ansible入门与实践
【10月更文挑战第31天】在当今快速发展的信息技术时代,高效的运维管理成为企业稳定运行的关键。本文将引导读者了解自动化运维工具Ansible的基础概念、安装步骤、基本使用,以及如何通过实际案例掌握其核心功能,从而提升工作效率和系统稳定性。
|
2月前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible入门与实践
【10月更文挑战第21天】在现代IT基础设施的管理中,自动化运维已成为提升效率、降低错误率的关键。Ansible,作为一种简单而强大的自动化工具,正被广泛应用于配置管理、应用部署和任务自动化等领域。本文将引导你了解Ansible的基本概念,通过实际案例展示如何利用Ansible简化日常运维工作,并探讨其在现代IT运维中的应用价值。无论你是新手还是有经验的系统管理员,这篇文章都将为你开启Ansible的高效之旅提供指导。
|
3月前
|
运维 Ubuntu Devops
自动化运维工具的魅力:Ansible入门
【9月更文挑战第5天】在快速变化的IT世界里,自动化运维不再是可选项,而是必需品。Ansible,一款简单却强大的自动化工具,正成为众多DevOps工程师的首选。本文将带你了解Ansible的基本概念、安装步骤以及如何编写简单的Playbook,从而开启你的自动化之旅。
85 36
|
3月前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible入门与实践
【9月更文挑战第28天】在追求高效、稳定的IT运维时代,自动化工具Ansible凭借其简洁性、易用性和强大的功能脱颖而出。本文旨在通过实际案例引导读者理解Ansible的核心概念和操作流程,并分享如何通过Ansible简化日常运维任务,提升工作效率。从基础安装到高级应用,我们将一步步揭开Ansible的神秘面纱,让初学者也能轻松掌握自动化运维的要诀。
|
3月前
|
运维 关系型数据库 MySQL
自动化运维工具:Ansible入门与实践
【9月更文挑战第23天】本文将带你进入自动化运维的世界,以Ansible为例,从基础概念到实际操作,让你轻松掌握自动化运维技能。我们将一起探索如何通过代码实现批量部署、配置管理和任务执行等功能,提高运维效率,减轻工作压力。让我们一起开启自动化运维之旅吧!
|
3月前
|
存储 运维 网络安全
自动化运维工具:Ansible入门与实践
【9月更文挑战第17天】本文将介绍Ansible的基本概念、安装和简单使用,以及如何编写一个简单的Ansible playbook。通过本文,您可以了解到Ansible的基本原理和使用方法,以及如何在实际工作中应用Ansible进行自动化运维。
|
3月前
|
运维 应用服务中间件 nginx
自动化运维的利器:Ansible入门与实践
【9月更文挑战第13天】在这个快速发展的IT时代,自动化运维已成为提升效率、减少失误的关键。本文将带你了解Ansible,一个强大的自动化工具,它简化了配置管理、应用部署和任务自动化。通过实际案例,我们将探索Ansible的基本概念、安装步骤、关键组件以及如何编写Playbook来自动化日常任务。无论你是新手还是有经验的运维专家,这篇文章都将为你提供宝贵的见解和技巧,让你在自动化运维的道路上更进一步。