Ansible入门

栏目: 服务器 · 发布时间: 6年前

内容简介:ansible是一个用于自动化运维的配置管理和应用部署工具。基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric.SaltStack )的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署能力的是ansible所运行的模块。ansible的基本架构:

《Ubuntu16使用Kolla安装OpenStack》 一文中,用到了ansible。本文,我们就来研究一下ansible的基本用法。

Ansible简介

ansible是一个用于自动化运维的配置管理和应用部署工具。基于 Python 开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric.SaltStack )的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署能力的是ansible所运行的模块。

ansible的基本架构:

  • 连接插件(connectior plugins)用于连接管理端和被管理端。
  • 核心模块(core modules)连接主机实现操作,它依赖于具体的模块来做具体的事情。
  • 自定义模块(custom modules)根据自己的需求编写具体的模块。
  • 插件(plugins)完成模块功能的补充。
  • 剧本(playbooks)ansible的配置文件,将多个任务定义在剧本中,由ansible自动执行。
  • 主机清单(host inventory)定义ansible需要操作主机的范围。

上述简介摘自 ansible基础

实验环境

两台主机,都是ubuntu14.04.4 server版,用户都是voidking。一台作为管理机,IP为192.168.56.101,一台作为被管理机(以下称为客户机),IP为192.168.56.102。

在管理机上安装ansible,一条命令搞定: sudo apt install ansible 。不过,安装的ansible版本很低,默认1.5.4。这里我们通过添加源来安装最新版ansible:

sudo apt remove ansible
sudo apt-get install software-properties-common
sudo apt-add-repository ppa:ansible/ansible
sudo apt-get update
sudo apt-get install ansible

这样,就能安装好最新版的ansible。

连接准备

1、在管理机生成密钥

ssh-keygen ,连续回车即可。

2、将公钥写入客户机

ssh-copy-id -i .ssh/id_rsa.pub -p 22 voidking@192.168.56.102

3、添加客户机到hosts

sudo vim /etc/ansible/hosts ,在文档最后添加:

[commonservers]
192.168.56.102

4、第一条命令

ansible all -m ping

ssh-agent

ansible可能使用到ssh-agent,那就顺便学习一下,参考 了解ssh代理:ssh-agent

ssh-agent是ssh代理程序,ssh-agent可以帮助我们管理私钥。

那么什么时候需要ssh代理帮助我们管理私钥呢?当遇到如下情况时,我们会需要ssh代理。

  • 使用不同的密钥连接到不同的主机时,需要手动指定对应的密钥,ssh代理可以帮助我们选择对应的密钥进行认证,不用手动指定密钥即可进行连接。

  • 当私钥设置了密码,我们又需要频繁的使用私钥进行认证时,ssh代理可以帮助我们免去重复的输入密码的操作。

  • 管理机可以通过密钥连接到客户机A和客户机B,但是客户机A无法通过密钥连接到客户机B,ssh代理可以帮助我们在客户机A也能通过密钥连接到客户机B。

我们以添加.ssh/id_rsa私钥给ssh代理为例,查看一下使用流程。

1、启用ssh-agent

ssh-agent bash

2、把.ssh/id_rsa添加到ssh代理

ssh-add ~/.ssh/id_rsa

3、测试登录

ssh voidking@192.168.56.102

登录成功。

切换到root用户,ssh-agent失效。重新使用voidking登录,ssh-agent失效。想要重新登录依然生效,那就创建个脚本登录时自动执行。

常用命令:

ssh-agent $SHELL
ssh-agent -k
ssh-add ~/.ssh/key_name
ssh-add -l
ssh-add -L
ssh-add -d /path/of/key/key_name
ssh-add -D
ssh-add -x
ssh-add -X

ansible命令

基本命令

  • ansible,主程序,临时命令执行工具
  • ansible-doc,查看配置文档,模块功能查看工具
  • ansible-galaxy,下载/上传优秀代码或Roles模块的官网平台
  • ansible-lint,对playbook的语法进行检查的一个工具。
  • ansible-playbook,定制自动化任务,编排剧本工具
  • ansible-pull,远程执行命令的工具
  • ansible-vault,文件加密工具。
  • ansible-console,基于console界面与用户交互的执行工具。

配置文件

  • /etc/ansible/ansible.cfg,主配置文件,配置ansible工作特性
  • /etc/ansible/hosts,主机清单
  • /etc/ansible/roles/,存放角色的目录

1、ansible.cfg的配置参考 Configuring Ansible ,主要留意inventory、forks、poll_interval、remote_port、log_path等参数。

2、hosts文件有一个特性很棒,可以指定变量,例如:

[commonservers]
192.168.56.102
[commonservers:vars]
ansible_ssh_pass='123456'
ansible_ssh_port=22

[commonservers1]
192.168.56.103
[commonservers:children]
commonservers1

内置变量小结:

# 主机名
ansible_ssh_host 
# 端口号
ansible_ssh_port
# 用户名 
ansible_ssh_user 
# 密码
ansible_ssh_pass 
# 使用sudo连接用户时的密码
ansible_sudo_pass 
# 秘钥文件如果不想使用ssh-agent管理时可以使用此选项
ansible_ssh_private_key_file 
# shell的类型默认sh
ansible_shell_type 
# SSH 连接的类型
ansible_connection 
# 指定python解释器的路径
ansible_python_interpreter

ansible

格式: ansible <host-pattern> [-m module_name] [options]

ansible是指令核心部分,其主要用于执行ad-hoc命令,即单条命令。默认后面需要跟主机和选项部分,默认不指定模块时,使用的是command模块。

例子:

# 查看所有主机
ansible all --list-hosts
# 查看commonservers组的主机
ansible commonservers --list-hosts
# 测试连通
ansible all -m ping
# 查看客户机的内存
ansible all -m command -a "free -h"
# 在客户机执行管理机脚本
cp /bin/echo ~/echo.sh
ansible all -m script -a "~/echo.sh hello" -vvv
# 在客户机执行客户机脚本
ansible all -m command -a "cp /bin/echo /home/voidking/echo.sh"
ansible all -m shell -a "/home/voidking/echo.sh hello"
# 向客户机拷贝文件
ansible all -m copy -a "src=/home/voidking/echo.sh dest=/tmp/ owner=voidking group=voidking mode=0755"
# 后台执行命令
ansible all -m ping -B 3600 -P 0
ansible all -m async_status -a "jid='182829279182.2094'"

ansible-doc

格式: ansible-doc [options] [module...]

例子:

ansible-doc ping
ansible-doc -s ping
ansible-doc -l
ansible-doc -a

通配符

# 匹配所有主机,相当于all
ansible '*' -m ping
# 匹配含有common的主机组
ansible '*common*' -m ping
# 匹配IP为100-109的主机
ansible '192.168.56.10?' -m ping
# 匹配IP段
ansible '192.168.56.101:192.168.56.200' -m ping
# 逻辑与
ansible 'commonservers:&dbservers' --list
# 逻辑非
ansible 'commonservers:!dbservers' --list
# 正则表达式
ansible '~192\.168\.56\.[1-254]' --list

以上所述就是小编给大家介绍的《Ansible入门》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

精通EJB

精通EJB

罗曼 / 第1版 (2005年9月1日) / 2005-9 / 69.0

本书是EJB组件技术教程,专注于EJB的概念、方法、开发过程的介绍。全书共分为4个部分,首先对EJB编程基础进行介绍,其次重点关注EJB编程的具体内容和过程,然后对高级EJB进行了阐述,最后的附录收集了EJB组件技术相关的其他内容。作为一本交互性好、读起来有趣、涉及到EJB中各方面知识的书籍,本书确信这正是你所寻找的。  本书是关于EJB 2.1的经典书籍,是EJB开发者必备的参考书。全书共分为3......一起来看看 《精通EJB》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器