Ansible 安装&使用入门

1. Ansible 概念

  • Control node
    任何安装了 Ansible 的机器。可以通过从任何控制节点调用ansibleoransible-playbook命令来运行 Ansible 命令和 playbook 。可以使用任何安装了 Python 的计算机作为控制节点——笔记本电脑、共享桌面和服务器都可以运行 Ansible, 并可以控制多个控制节点。但是,不能将 Windows 机器用作控制节点。
  • Managed nodes
    使用 Ansible 管理的网络设备(和/或服务器)。受管节点有时也称为“主机”。Ansible 未安装在受管节点上。
  • Inventory
    受管节点列表。清单文件有时也称为“主机文件”。您的清单可以为每个受管节点指定 IP 地址等信息。清单还可以组织受管节点,创建和嵌套组以便于扩展。要了解有关库存的更多信息,请参阅使用库存部分。
  • Collections
    集合是 Ansible 内容的分发格式,可以包括剧本、角色、模块和插件。您可以通过Ansible Galaxy安装和使用集合。要了解有关集合的更多信息,请参阅使用集合
  • Modules
    Ansible 执行的代码单元。每个模块都有特定的用途,从管理特定类型数据库上的用户到管理特定类型网络设备上的 VLAN 接口。可以使用任务调用单个模块,或调用剧本中的多个不同模块。从 Ansible 2.10 开始,模块被分组到集合中。有关 Ansible 包含多少集合的想法,请查看集合索引
  • Tasks
    Ansible 中的动作单元。可以使用临时命令执行一次单个任务。
  • Playbooks
    已保存的有序任务列表,以便可以按该顺序重复运行这些任务。剧本可以包括变量和任务。Playbooks 是用 YAML 编写的,易于阅读、编写、共享和理解。要了解有关 playbook 的更多信息,请参阅playbook 简介

2. 安装 Ansible

2.1 控制节点要求

控制节点(运行 Ansible 的机器), 建议使用任何安装了 Python 3.8 或更新版本的机器。这包括 Red Hat、Debian、CentOS、macOS、任何 BSD 等等。控制节点不支持 Windows。

2.2 受控节点要求

尽管托管节点上不需要守护进程,但需要一种 Ansible 与它们进行通信的方式。对于大多数受管节点,Ansible 通过 SSH 建立连接并使用 SFTP 传输模块。如果 SSH 有效但 SFTP 在您的某些受管节点上不可用,您可以在ansible.cfg 中切换到 SCP 。对于任何可以运行 Python 的机器或设备,您还需要 Python 2(版本 2.6 或更高版本)或 Python 3(版本 3.5 或更高版本)。

2.3 在特定系统上安装 Ansible

Fedora:  $ sudo dnf install ansible
RHEL: $ sudo yum install ansible
CentOS: $ sudo yum install epel-release 
        $ sudo yum install ansible
Ubuntu:
    $ sudo apt update
    $ sudo apt install software-properties-common
    $ sudo add-apt-repository --yes --update ppa:ansible/ansible
    $ sudo apt install ansible

2.4 pip 安装 Ansible

2.4.1 通过 ansible 用户安装

$ python -m pip install --user ansible

2.4.2 全局安装

sudo python -m pip install ansible

3. Ansible 配置设置

3.1 配置文件介绍

Ansible 支持多种来源来配置其行为,包括名为 的 ini 文件ansible.cfg、环境变量、命令行选项、剧本关键字和变量。有关每个源的相对优先级的详细信息,请参阅控制 Ansible 的行为:优先级规则

3.2 配置文件查看&浏览

ansible-config 命令 允许用户查看所有可用的配置设置、默认值、设置方式以及当前值的来源。有关更多信息,请参阅ansible-config

3.3 配置文件查找顺序

Ansiblw将按以下顺序搜索的配置文件中进行和使用更改:

  • ANSIBLE_CONFIG (如果设置了环境变量)
  • ansible.cfg (在当前目录中)
  • ~/.ansible.cfg (在主目录中)
  • /etc/ansible/ansible.cfg

Ansible 将处理上面的列表并使用找到的第一个文件,所有其他文件都将被忽略。

3.4 配置文件覆盖优先级

Ansible 提供了四种控制其行为的来源。按照从最低(最容易覆盖)到最高(覆盖所有其他)的优先级顺序,类别是:

  • 配置设置
  • 命令行选项
  • 剧本关键词
  • 变量

每个类别都会覆盖所有优先级较低的类别中的任何信息。例如,剧本关键字将覆盖任何配置设置。

在每个优先级类别中,都适用特定的规则。但是,一般来说,“最后定义”会胜出并覆盖任何先前的定义。

4. Ansible 入门

4.1 Ansible 工作原理

一个基本的Ansible 命令 或 playbook 执行流程如下:

  1. 从主机列表选择要执行的机器
  2. 通过SSH 连接到这些机器
  3. 将一个或多个模块复制到远程机器上执行命令

4.2 基本使用

4.2.1. 编辑或创建 /etc/ansible/hosts, 并向其中添加ip 或者 FQDNs

192.168.11.50
aserver.example.org
bserver.example.org

4.2.2. 连接到远程节点

注: 确保可以使用相同的用户名连接到主机列表中的所有节点,最好对所有节点都设置了免密登录, 所以建议控制节点和管理节点都创建ansible 用户,并根据需求设置用户权限.

可以通过多种方式覆盖默认远程用户名(当前执行命令的用户),包括:

  • -u 在命令行传递参数

  • 在主机列表中设置用户信息

  • 在配置文件中设置用户信息

  • 设置环境变量

4.2.3. 复制和执行模块

ssh连接后,Ansible 会将命令或剧本所需的模块传输到远程机器以供执行。

4.2.3.1 运行Ansible 命令

  1. 使用 ping 模块 ping 主机列表中所有节点:
$ ansible all -m ping
aserver.example.org | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

注: 可以使用 -u 来指定要连接的用户,默认情况下 Ansible 使用 SSH,默认为当前用户

  1. 在所有节点运行实时命令
ansible all -a "/bin/echo hello"
server.example.org | CHANGED | rc=0 >>
hello

4.2.3.2 运行第一个playbook

  1. 创建或编辑 mytask.yaml
---
- name: My playbook
  hosts: all
  tasks:
     - name: Leaving a mark
       command: "touch /tmp/ansible_was_here"

2, 运行 playbook

$ ansible-playbook mytask.yaml
PLAY [My playbook] **********************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************
ok: [aserver.example.org]
ok: [aserver.example.org]
ok: [192.0.2.50]
fatal: [192.0.2.50]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.0.2.50 port 22: No route to host", "unreachable": true}

TASK [Leaving a mark] *******************************************************************************************************************
[WARNING]: Consider using the file module with state=touch rather than running 'touch'.  If you need to use command because file is
insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message.
changed: [aserver.example.org]
changed: [bserver.example.org]

PLAY RECAP ******************************************************************************************************************************
aserver.example.org        : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
bserver.example.org        : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
192.0.2.50                 : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0
  1. 提升权限来运行命令
# as bruce
$ ansible all -m ping -u bruce
# as bruce, sudoing to root (sudo is default method)
$ ansible all -m ping -u bruce --become
# as bruce, sudoing to batman
$ ansible all -m ping -u bruce --become --become-user batman
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容