自动化运维之ansible入门

写博客主要是为了自己方便看,在这个过程中顺便把看到的一些技术点记录下来,加强自己的记忆。

Ansible基本知识

简介

高度模块化,调用特定的模块,完成特定的任务,基于Yaml,来完成批量任务的模板化,来支持playbook。基于Python语言实现,主要使用Paramiko、PyYAML和JinJa2三个关键模块,部署简单(agentless),主从模式,支持自定义模块,支持playbook,幂等性:允许重复执行N次,没有变化时,只会执行第一次。

基本组

主要由模块、插件、主机群、以及剧本的组成,各部分含义如下:
1.核心模块(core modules):Ansible 自带的模块。
2.自定义模块(custom Modules):如果核心模块不足以完成某种功能,可以自行添加自定义模块(支持市面上大部分的编程语言)。
3.插件(Plugins):支持使用插件的方式对ansible本身的功能进行扩展。模块是用来实现任务的,增强ansible平台自己的功能就需要使用插件(loggin插件记录日志,email插件发送邮件)
  - 其中最常用是:连接插件(Connectior Plugins) :ansibile基于连接插件连接到各个主机上,虽然默认情况下ansible使用ssh连接到各个主机上,但它还支持其他的连接方法(mq)。
4.主机群(Host Inventory): 主机清单,定义ansible管理的主机,还可以存放一下针对不同主机的变量,也可以写入主机的用户名和密码
5.剧本(playbooks):ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行

运行原理:把命令翻译成shell命令,拷贝到目标主机(/root/.ansible/tmp/下),再执行,执行完毕后删除tmp文件。ansible底层给予Python,以简单著称,配置文件格式也以INI和yaml为主。

下载方式

CentOs系列主机:

apt-get install  -y ansible

RedHat系列主机:

yum install -y ansible

Mac下载:

brew install ansible
//也可以使用python的安装命令pip安装:
pip install ansible

Ansible配置文件解析

Inventory用于定于Ansible的主机列表配置,Ansible的自身配置文件只有一个,即ansible.cfg,Ansible安装好之后默认存放在/etc/ansible/目录下。

ansible 查找 Ansible.cfg 文件遵循以下顺序:

1、ANSIBLE_CONFIG环境变量指定的配置文件
2、当前目录下的ansible.cfg文件
3、当前用户home目录下的.ansible.cfg文件
4、Ansible默认的/etc/ansible/ansible.cfg文件

ansible.cfg中常用的配置

- inventory:指定inventory文件的路径
- remote_user:SSH连接时使用的用户名
- remote_port:SSH连接时使用的端口号
- private_key_file:SSH连接时使用的私钥文件
- roles_path:查找roles的路径,可以指定多个查找路径,多个路径之间用冒号分隔
- log_path:Ansible的日志文件路径
- host_key_checking:类似于ssh命令中的StrictHostKeyChecking选项,当等于False时,不检查远程主机是否存在于Konw_hosts文件中
- forks:并行进程的数量
- gathering:控制收集Facts变量的策略

ssh相关

- ssh_args:可以通过这个参数控制Ansible的ssh连接
- pipelining: 多个task之间共享SSH连接,开启pipelining能够有效提升Ansible的执行速度
- control_path:保存ControlPath socket的路径

权限相关

- become:是否进行权限提升
- become_method:权限提升的方式,默认为sudo
- become_user:提升为哪个用户的权限,默认为root
- become_ask_pass:默认为False,表示权限提升时不需要密码(设置为true时,手动输入密码,或者配置ansible_become_pass变量)

Inventory文件配置的变量及参数:

[nginx]
127.0.0.1 ansible_ssh_user=root ansible_ssh_host=web1 # 更细致的配置
 
    - ansible_ssh_user : 用于指定管理远程主机的帐号
    - ansible_ssh_host : 用于指定被管理的主机
    - ansible_ssh_port :用于指定ssh的端口
    - ansible_ssh_private_key_file :指定key文件
    - host_key_checking=False :当第一次连接主机时,会提示yes/no,跳过此次环节
[test]                    # 用于定义主机组,all表示所有主机,所以尽量避免使用all作为组名
127.0.0.1                 # 该组的主机列表,可以是主机名(dns解析)或者IP地址,或者用符号来表示连续的主机
192.168.1.[80:88]         # 表示 192.168.1.80 - 192.168.1.88<br><br>[web:children]            # 表示子组<br>nginx                     # nginx组<br>test                      # test组


Ansible命令用法

Ansible命令行的执行方式有Ad-Hoc、Ansible-playbook两种方式,Web化执行方式官方提供了付费产品Tower(10台内免费),个人的化可以基于其提供的API开发类似的Web化产品。这里我们详细说命令后执行的两种方式。

Ad-Hoc主要用于临时命令的执行,Ansible可以理解为Ad-Hoc的集合,通过一定的规则编排在一起。

ansible Ad-Hoc命令主要参数信息

-v, --verbose:输出更详细的执行过程信息,-vvv可以得到执行过程所有信息。
-u : remote user,默认使用root用户登陆
-i : Inventory,指定主机,默认是/etc/ansible/hosts
-m :指定模块的名称(不指定-m,那么默认是command模块)
-a : 模块的参数(比如使用command模块,那么-a参数就是要执行的命令)
-k : 用来提示输入远程主机的密码(基于用户密码登录)
-f : 一次执行几个进程(并发数量),默认为5个
--sudo : 执行命令时使用 sudo 权限(需要用户具有sudo权限)
--key-file: 建立SSH链接的私钥文件
--list-hosts: 列出匹配到的服务器列表
# 基于主机清单:
ansible -i /etc/ansible/hosts test -u root -m command -a 'ls /home' -k (ansible 依赖 sshpass)
|
--> ansible test -a 'ls /home' -k    #ansible不指定-m参数,会默认使用command模块
 
# 上面两条命令默认状态下效果相同
 
# 我们知道ansible通过ssh的方式来远程管理多台主机,所以我们需要使用ssh key的方式来进行ssh认证,当然你也可以使用ansible的时候加上-k,来通过交互式输入密码。当有了ssh key以后,那么我们就可以直接使用ansbile来执行任务了,比如:ansible all -m ping
 
# 基于主机:
ansible 127.0.0.1 -m ping


Ansible系列命令用法详解及使用场景介绍

在终端输入ansible后连续按两次Tab键,会补全所以ansible字母开头的命令,主要有下列命令:

  • absible
  • ansible-galaxy
  • ansible-pull
  • ansible-doc
  • ansible-playbook
  • ansible-vault
  • ansible-console

我们主要说ansible、ansible-playbook两个命令,其余的后续再讲解。

Ansible

ansible命令是日常工作中使用率非常高的命令之一,主要在一下场景中使用:

  • 非固化需求
  • 临时一次性操作
  • 二次开发调用接口

那么什么是非固化需求和临时一次性操作呢?简单来讲,工作中临时想查看某一组服务器是否存活,或者想临时复制本地的文件到服务器组上做测试,类如这些没有规律的、临时需要做的任务,我们称为非固化需求、临时一次性操作。

//检查服务器存活
ansible web -m ping
//复制文件到远程服务器
ansible web -m copy -a "src=/etc/fstab dest=/tmp/fstab ower=root group=root mode=644 backup=yes"


ansible-playbook

ansible-playbook是日常应用中使用频率最高的命令,其工作机制是:通过读取预先编写好的playbook文件实现批量管理。实现的功能与命令ansible一样,可以理解为按照一定条件组成的ansible任务集。

ansible-play命令使用方式如下:

//执行playbook.yml这个playbook中定义的所以任务集
ansible-playbook playbook.yml
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容