Ansible:概述和使用
什么是'Ansible ? 如何使用它? 哪些竞争对手? 针对一段时间以来给人留下深刻印象的新产品的一个小技巧。
Ansible 出现于2012年。2015年XNUMX月,Red Hat宣布收购Ansible,Ansible随后成为其堆栈中的旗舰产品。 这完全符合解决方案 红帽 并强化了关于管理服务器场的便利性的论点。
Ansible 是同时在多台机器上执行部署、任务执行和配置管理的解决方案。 他是 少代理 和用途 SSH的 执行要执行的操作,它们自己写在 Yaml.
在 Ansible, 有许多产品在开始时可能会令人不安。 你可能听说过 Ansible 剧本, Ansible金库 et Ansible星系.
Ansible 和模块
需要知道的两件事:
- 当你使用 Ansible,你使用模块。 已经编写了一个模块列表,但您也可以编写自己的模块。 您将需要用 Python 编写它。
- 您必须提供一个域/IP 组或应该使用该操作的组。
例如:
我们会检查我们的机器是否完好 up 与模块 平.
1
2
3
4
5
|
$ ansible localhost -m ping
本地主机 | 成功=> {
“改变了”: false,
“砰”: “乒乓球”
}
|
使用其他东西 本地,例如一组域,您必须完成该文件 /etc/ansible/主机.
1
2
3
|
[baptiste-donaux.fr]
www.baptiste-donaux.fr
me.baptiste-donaux.fr
|
1
2
3
4
5
6
7
8
9
10
|
$ ansible -m ping baptiste-donaux.fr
我.baptiste-donaux.fr | 成功 >> {
“改变了”: false,
“砰”: “乒乓球”
}
www.baptiste-donaux.fr | 成功 >> {
“改变了”: false,
“砰”: “乒乓球”
}
|
这就是我们如何验证 池 良好的服务器 up . 这是存在的基本模块的列表。
一旦了解了模块的工作原理,就可以以相同的方式使用所有其他模块。 使用模块时,您可以给出参数(argument -a).
例如,如何在多个命令上运行一个命令。
1
2
3
4
5
6
|
$ ansible -m 外壳 -a “泊坞窗-版本” baptiste-donaux.fr
我.baptiste-donaux.fr | 成功 | rc=0 >>
Docker 版本 1.12.1,构建 23cf638
www.baptiste-donaux.fr | 成功 | rc=0 >>
Docker 版本 1.12.1,构建 23cf638
|
但也要确保安装了一个包。
1
2
3
4
|
$ ansible -m 贴切 -a “名称=vim 状态=现在” www.baptiste-donaux.fr
www.baptiste-donaux.fr | 成功 >> {
“改变了”: false
}
|
或者只是更新一台或多台服务器。
1
2
3
4
5
6
7
8
9
10
11
12
|
$ ansible -m 贴切 -a “更新缓存=是” www.baptiste-donaux.fr
www.baptiste-donaux.fr | 成功 >> {
“改变了”: false
}
$ ansible -m 贴切 -a “升级=分发” www.baptiste-donaux.fr
www.baptiste-donaux.fr | 成功 >> {
“改变了”: false,
“消息”: “正在读取包列表……正在构建依赖树……正在读取状态信息……已升级 0 个,新安装 0 个,删除 0 个,未升级 0 个。n”,
“标准错误”: ”,
“标准输出”: “正在读取包列表……正在构建依赖树……正在读取状态信息……已升级 0 个,新安装 0 个,删除 0 个,未升级 0 个。n”
}
|
Ansible 和 Playbooks(欢迎来到真实世界)
管理一个有订单的机器车队已经很好了,它首先是Ansible. 尽管如此,很难想象通过一个接一个地执行命令来玩一个场景。 对我们来说幸运的是, ansible-剧本 就是为了这个!
场景是用 YAML 编写的。 这是一个小例子。
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
36
37
38
|
– 主持人: baptiste-donaux.fr
任务:
- 姓名: 为 Docker 存储库添加 APT 密钥
apt_key:
密钥服务器: “hkp://p80.pool.sks-keyservers.net:80”
ID: 58118E89F3A912897C070ADBF76221572C52609D
- 姓名: 添加 APT Docker 存储库
apt_repository: 回购='deb https://apt.dockerproject.org/repo debian-jessie main' 状态=现在
- 姓名: 使用新存储库更新 APT 缓存
易于: 更新缓存=含
- 姓名: 如果没有安装 docker-engine 包'存在
apt:名称=docker-engine state=present
– 名称:启用并启动 Docker 服务
systemd: enabled=yes state=started name=docker
– 名称:InstallPython
恰当的:名称=蟒蛇状态=现在
– 名称:安装 PIP
apt: 名称=python-pip state=present
– 名称:docker-py 依赖项
pip: 名称=docker-py
– 名称:拉取 Nginx 镜像
docker_image: 名称=nginx pull=yes
– 名称:创建一个 Nginx 容器
码头集装箱:
名称:代理
图片:nginx
published_ports:
– “80:80”
状态:现在
|
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
|
$ ansible my_playbook.yml
播放 [baptiste-donaux.fr] ***************************************** * ***********
任务 [设置] ************************************************* ************************
好的:[baptiste-donaux.fr]
任务 [添加 APT 密钥 用于 Docker存储库] *******************************************
好的:[baptiste-donaux.fr]
任务 [添加 APT Docker 存储库] ********************************************** ****
好的:[baptiste-donaux.fr]
任务 [使用新存储库更新 APT 缓存] ***************************************
好的:[baptiste-donaux.fr]
任务 [安装 docker-engine 包 if 它没有'存在] ***********************
好的:[baptiste-donaux.fr]
任务 [安装 Python] ************************************************ *************
好的:[baptiste-donaux.fr]
任务 [安装 PIP] ********************************************* *******************
好的:[baptiste-donaux.fr]
任务 [docker-py 依赖项] ********************************************** *********
好的:[baptiste-donaux.fr]
任务 [Nginx 图像拉取] ************************************************ * ************
好的:[baptiste-donaux.fr]
任务 [创建 Nginx 容器] ********************************************** *****
好的:[baptiste-donaux.fr]
播放回顾*************************************************** ** *********************
baptiste-donaux.fr: ok=10 changed=0 unreachable=0 failed=0
|
这再简单不过了。 除了在一组服务器上运行一个完整的场景外,如果发现其中一个服务器出错,一个文件 。重试 将被创建并通过重新启动命令,场景将从您离开的地方恢复。
Ansible Galaxy 和 Vault
Galaxy 和在哪里存储你的模组
Ansible-Galaxy 是一个共享模块的中心。 它有点像 Docker中心 对于 Docker 图像。
保管库以及如何保护敏感信息
在某些情况下,您需要在场景中存储敏感信息(密码等)。 您可以对其文件进行编码/解码,而不是将此信息存储为纯文本。
一个小例子不会造成伤害。
1
2
3
4
|
# my_playbook.yml
– 主持人: 本地
任务:
- 壳: ssh密码-p “噗” scp -r /bar baz@localhost:/qux
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# 使用 Vault 编码你的文件
$ansible-vault 加密 my_playbook.yml
新的保险柜密码:
确认新保管库密码:
加密成功
# 显示编码的剧本
$ 猫 my_playbook.yml
$ANSIBLE_VAULT;1.1;AES256
34396264333338636331323838386331393664623065383463663661373436643764336536326662
6238626432373334356436613935306630376461633136650a316561316531323937633963643032
64643239616561653864346132356537656536313030656532373733316262663536396438383262
3463373265636232640a626364306666373665303633663630353132383764323530646438383737
31336163633631373162356339633739356461656130353533306137613436663333383137376366
62383533393262376362393565386133306432323266393034616331333932663266613739653538
36663666333938323961343231366266323430376234376363353662386366373061636434613763
35653139316465613562613834373434636238643661633434326661303438666233313732653338
3264
# 使用编码的剧本而不先解码它
$ ansible-playbook my_playbook.yml –ask-vault-pass
保险柜密码:
...
|
总结
本文旨在呈现 Ansible 并展示它如何简化您的任务。 请随时提供反馈、改进和/或更正这篇文章。