Kivi

没有什么远大理想,只是永远都不会满足而已


  • 首页

  • 关于

  • 标签

  • 归档

ansible入门

发表于 2017-02-24 更新于 2017-07-02 分类于 Automation 阅读次数:
本文字数: 4.5k 阅读时长 ≈ 4 分钟

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
4
ssh-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
7
test
├── hosts
├── roles
│   └── common
│   └── tasks
│   └── main.yml
└── site.yml

hosts

1
2
[test]
xxx.xxx.xxx.xxx

site.yml

1
2
3
4
---
- hosts: test
roles:
- role: common

roles/common/tasks/main.yml

1
2
3
---
- name: test connection
ping:

执行命令:

1
ansible-playbook -i hosts site.yml

运行结果:

1
2
3
4
5
6
7
8
9
10
PLAY [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
3
ansible 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
hosts                     # host配置文件

group_vars/
group1 # 组group1变量
group2 # 组group2变量
host_vars/
hostname1 # hostname1变量
hostname2 # hostname2变量

library/ # 目前我没有在项目中使用
filter_plugins/ # 目前我没有在项目中使用

site.yml # 主playbook,作用就是执行这个playbook将会完成当前项目所有的需要执行的任务
webservers.yml # 某个role的playbook
dbservers.yml # 某个role的playbook

roles/
common/ # 这是一个名字是common的role
tasks/ #
main.yml # <-- tasks file can include smaller files if warranted
handlers/ #
main.yml # <-- handlers file
templates/ # <-- files for use with the template resource
ntp.conf.j2 # <------- templates end in .j2
files/ #
bar.txt # <-- files for use with the copy resource
foo.sh # <-- script files for use with the script resource
vars/ #
main.yml # <-- variables associated with this role
defaults/ #
main.yml # <-- default lower priority variables for this role
meta/ #
main.yml # <-- role dependencies
library/ # roles can also include custom modules
lookup_plugins/ # or other types of plugins, like lookup in this case

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的字符串,因为这个信息比较重要
# ansible # devops # automation
ansible调研
mongodb2.6.9热升级至3.0.7
  • 文章目录
  • 站点概览
kivi

kivi

nodejs | server
58 日志
17 分类
32 标签
RSS
  1. 1. 5分钟造火箭
    1. 1.1. 环境说明
    2. 1.2. 安装
    3. 1.3. 配置ssh免密登录
    4. 1.4. 开始测试
    5. 1.5. 复杂一点的例子
    6. 1.6. 更多优质例子分享
  2. 2. 基础知识补充说明
    1. 2.1. ansible可执行命令
    2. 2.2. ansible基本项目结构
    3. 2.3. inventory概念
    4. 2.4. role概念
  3. 3. ansible高质量入门资料分享
    1. 3.1. 入门简介
    2. 3.2. 文档
    3. 3.3. 原理语法
  4. 4. 使用经验分享
    1. 4.1. 目前使用ansbile主要做两个方面的事情:
    2. 4.2. 目前使用ansbile过程中遇到的一些坑
© 2019 kivi | 173k | 2:37
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Pisces v7.3.0
|