5分钟造火箭
环境说明
- centos 6
- python 2.6.6
- 一个控制节点,若干被管理节点
安装
1 | yum install -y ansible |
这里安装的版本是2.2.1.0,当前官网上的最新release也是2.2.1.0所以我们选择这个版本
默认的配置文件: /etc/ansible/ansible.cfg
默认的host文件: /etc/ansible/hosts
配置ssh免密登录
在真正使用前面,配置ssh免密登录是第一步
这里有篇博客分享了相关内容
执行的命令是下面这些1
2
3
4ssh-keygen
ssh-agent bash
ssh-add ~/.ssh/id_rsa
ssh-copy-id user@xxx.xxx.xxx.xxx
注意
如果被管理节点的ssh启动端口不是22,分发key的命令这样:ssh-copy-id " -p 10022 xujw@xxx.xxx.xxx.xxx"
详情参考这篇文章
而且,ansible默认ssh端口也需要被修改,看这里
开始测试
1 | ansible -m ping all |
有sudo权限的话,可以获取管理员权限1
ansible all -m ping -u user -b --become-user root
复杂一点的例子
新建以下项目结构的文件夹1
2
3
4
5
6
7test
├── hosts
├── roles
│ └── common
│ └── tasks
│ └── main.yml
└── site.yml
hosts1
2[test]
xxx.xxx.xxx.xxx
site.yml1
2
3
4---
- hosts: test
roles:
- role: common
roles/common/tasks/main.yml1
2
3---
- name: test connection
ping:
执行命令:1
ansible-playbook -i hosts site.yml
运行结果:1
2
3
4
5
6
7
8
9
10PLAY [test] ********************************************************************
TASK [setup] *******************************************************************
ok: [xxx.xxx.xxx.xxx]
TASK [common : test connection] ************************************************
ok: [xxx.xxx.xxx.xxx]
PLAY RECAP *********************************************************************
xxx.xxx.xxx.xxx : ok=2 changed=0 unreachable=0 failed=0
更多优质例子分享
建议在看这些例子之前,写歇会,看看下面的基础知识补充说明
- examples(官方的例子)
- ansible-tuto(开源朋友的例子,值得一看)
基础知识补充说明
ansible可执行命令
安装完ansible后,发现ansible一共为我们提供了七个指令:ansible、ansible-doc、ansible-galaxy、ansible-lint、ansible-playbook、ansible-pull、ansible-vault 。命令详情请参考这篇博客
实际使用中用的比较多的是ansible
和ansible-playbook
这两个命令
1、ansible
ansible是指令核心部分,其主要用于执行ad-hoc命令,即单条命令。默认后面需要跟主机和选项部分,默认不指定模块时,使用的是command模块。如:1
2
3ansible 192.168.0.102 -a 'date'
192.168.0.102 | success | rc=0 >>
Tue May 12 22:57:24 CST 2015
2、ansible-playbook
该指令是使用最多的指令,其通过读取playbook 文件后,执行相应的动作。
ansible基本项目结构
1 | hosts # host配置文件 |
inventory概念
简单来说就是host配置,host文件里面至少包含所有服务器的ip(或域名)信息
这里面有几个概念:
- vars 全局变量
- group host组
- group_vars host变量
- host 被管理服务器
- host_vars 单个服务器变量
一个最简单的配置1
2[group_name]
xxx.xxx.xxx.xxx
role概念
理解参考剧本里的角色,playbook是剧本,role是执行剧本的角色,role是一系列任务的集合,role通过配置执行一系列任务,实现特定的功能。
github上有很多开源的role,帮你实现一些特定功能,例如一键启动mongodb集群,一键启动consul集群等等
ansible给出了一个role的best practice,使用这个命令可以新建一个role: ansible-galaxy init common --offline
重要文件夹介绍:
- tasks 里面放的是role的playbook,会默认执行main.yml,最佳实践是功能拆开,在main.yml中引入
- templates 这个放的是文件模板,例如nginx的配置模板,可以根据相关信息生成配置文件
- defaluts 这里main.yml是role相关的默认配置
- files 这里面放的是静态文件,例如要复制到远程服务器的工具安装包
总结来说,ansible项目就是通过一定的目录结构(经过实践检验的最佳实践),通过playbook定义任务,通过host相关文件进行ip配置,最后由ansible统一执行,实现自动化运维的功能
ansible高质量入门资料分享
入门简介
- ansible超详细使用指南 确实详细,看了这篇,不需要看我的了
- 入门博客1
- 入门博客2
文档
原理语法
- ansible小结(二)ansible架构
- ansible原理2
- jinja2语法 之前没接触过py的我刚开始对这个语法不算太能接受(templates语法)
使用经验分享
目前处于技术准备阶段,也就是在方案确定之后,需要验证是否确实可行,如果可行,需要构建一个可用的原型。
目前使用ansbile主要做两个方面的事情:
- 基础工具安装
- 服务部署
目前使用ansbile过程中遇到的一些坑
- hosts文件中,group列表,当在列表中的服务器上执行命令的时候,所有服务器是并行的,你没有简单的方法去控制执行的先后顺序(例如,按照列表先后顺序执行命令),所以在方案设计的时候,尽量不要让自己处在这种情况下
- hosts文件配置命名不要用中划线,要用下划线
- hosts文件中各个group的hostname最好不要重复,否则有可能导致意想不到的问题
- hosts文件中各个group的hostname最好写成ip,如果配置可访问域名也可以,最好不要写成最终无法解析成ip的字符串,因为这个信息比较重要