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入门》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

The Hard Thing About Hard Things

The Hard Thing About Hard Things

Ben Horowitz / HarperBusiness / 2014-3-4 / USD 29.99

Ben Horowitz, cofounder of Andreessen Horowitz and one of Silicon Valley's most respected and experienced entrepreneurs, offers essential advice on building and running a startup—practical wisdom for ......一起来看看 《The Hard Thing About Hard Things》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具