Ansible 快速入门

timg

官方文档



一、Ansible 是什么?

Ansible 是一个 IT 自动化工具。它可以配置系统、部署软件并协调更高级的 IT 任务,例如持续部署或零停机时间滚动更新等。Ansible 的主要目标是简单和易用,它还非常关注安全性和可靠性,具有最少的移动部件,其使用 OpenSSH 进行传输。

二、Ansible 安装

2.1 安装

2.1.1 Python 方式

1、安装最新版本

python3 -m pip install --user ansible

2、安装指定版本

python3 -m pip install --user ansible-core==2.12.3

3、升级 Ansible

python3 -m pip install --upgrade --user ansible

4、验证

ansible --version

5、Ansible 的 shell补全

  • 安装 argcomplete

    python3 -m pip install --user argcomplete
    
  • 配置 argcomplete

    # 全局配置:要求 bash 4.2
    activate-global-python-argcomplete
    
    # 如果您没有 bash 4.2,则必须单独注册每个脚本
    eval $(register-python-argcomplete ansible)
    eval $(register-python-argcomplete ansible-config)
    eval $(register-python-argcomplete ansible-console)
    eval $(register-python-argcomplete ansible-doc)
    eval $(register-python-argcomplete ansible-galaxy)
    eval $(register-python-argcomplete ansible-inventory)
    eval $(register-python-argcomplete ansible-playbook)
    eval $(register-python-argcomplete ansible-pull)
    eval $(register-python-argcomplete ansible-vault)
    
2.1.2 Yum 方式
sudo yum install epel-release
sudo yum install ansible

其他特定系统安装请看官方文档

2.2 配置

配置文件位于 /etc/ansible 下,Ansible 中的某些设置可通过配置文件 (ansible.cfg) 进行调整。对于大多数用户来说,Inventory 配置已经足够了。

三、快速入门

3.1 三组件

一个基本的 Ansible 环境包含三个主要组件:Control nodeManaged nodeInventory

image-20220922100244734

1、Control node

安装了 Ansible 的系统,安装完成后,可以在控制节点上运行 Ansible 相关命令,例如ansibleansible-inventory

2、Managed node

Ansible 控制的远程系统或主机,即接下来要说到的 hosts 文件中的主机清单。

3、Inventory

逻辑组织的受管节点列表,在控制节点上创建一个清单以向 Ansible 描述主机部署。

3.2 基础使用

我的 ansible 机器为:192.168.56.132

1、安装 Ansible

python3 -m pip install --user ansible

# 或 yum 安装
yum instakk -y ansible

2、添加主机列表

通过将一个或多个远程系统的 IP 地址或完全限定域名 (FQDN) 添加到/etc/ansible/hosts

[web]
192.168.56.132
192.168.56.180

3、验证清单中的主机

ansible all --list-hosts
  hosts (2):
    192.168.56.132
    192.168.56.180

image-20220922101103515

3、设置 SSH 连接

Control node 主机的 SSH 公密添加到每个远程系统(主机)上的 authorized_keys 文件中,以便 Ansible 可以连接到受管节点。

ssh-copy-id 192.168.56.180

如果控制节点上的用户名在主机上不同,则需要将-u选项与ansible命令一起传递。

4、Ping 受管节点

ansible all -m ping
192.168.56.180 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
192.168.56.132 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

image-20220922101829925

3.3 创建 Inventory

Inventory 文件位于 Control node 节点上(即安装 ansible 的主机)。使用清单文件,Ansible 可以通过单个命令管理大量主机,我们也可以直接将受管节点添加到/etc/ansible/hosts文件中,来实现批量主机管理。在 Inventory 文件编写中,其语法格式可以是INIYAML格式,建立一个 Inventory 的基本步骤如下:

  • 在您的控制节点上打开一个终端窗口。
  • 在任何目录中创建一个新的库存文件inventory.yaml并打开它进行编辑。
  • 为您的主机添加一个新组,然后使用该字段指定每个受管节点的 IP 地址或完全限定域名 (FQDN) ansible_host

1、创建名为 inventory.yaml 的 Inventory

cat inventory.yaml

mywebhost:
  hosts:
    vm01:
      ansible_host: 192.168.56.132
    vm02:
      ansible_host: 192.168.56.180

# 说明:mywebhost 为组名

2、验证 Inventory

如果你在主目录以外的目录中创建了清单,请使用该-i选项指定完整路径。

ansible-inventory -i inventory.yaml --list

image-20220922104607536

2、ping 清单中的受管节点

在此示例中,组名称是mywebhost,此时可以使用ansible命令。

ansible mywebhost -m ping -i inventory.yaml
vm01 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
vm02 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

image-20220922104904636

注意 Inventory 与 hosts 文件的区别:

Ansible 的主机清单是 Inventory,我们可以通过创建 *.yaml 文件来作为我们的主机清单(Inventory)文件,如果你没有创建这个 yaml 文件,那 Ansible 的默认主机清单文件就是 hosts,这个文件在安装 Ansible 时默认存在 的。当找不到 *.yaml 主机清单文件时,就会去找 hosts 文件。

由于 hosts 文件是默认的主机清单文件,如果你想使用你自定义的其他主机清单文件,需通过 -i 参数指定,如 ansible mywebhost -m ping -i inventory.yaml,否则它会默认去找 hosts 文件。

3.4 创建 playbook

YAML剧本是 Ansible 用于部署和配置托管节点的自动化蓝图。看看几个重要元素:

  • Playbook

    定义 Ansible 从上到下执行操作以实现总体目标的顺序的剧本列表。

  • Play

    映射到清单中的受管节点的有序任务列表。

  • Task

    定义 Ansible 执行的操作的一个或多个模块的列表。

  • Module

    Ansible 在托管节点上运行的代码或二进制单元。

创建一个 playbook 的步骤如下:

  • 在控制节点上打开一个终端窗口。

  • 在任何目录中创建一个新的 playbook 文件playbook.yaml并打开它进行编辑。

1、创建 playbook

cat playbook.yaml

- name: My first play
  hosts: mywebhost
  tasks:
   - name: Ping my hosts
     ansible.builtin.ping:
   - name: Print message
     ansible.builtin.debug:
       msg: Hello world
       
# 可看到我的主机清单指定的是mywebhost组,而这个组是在我自定义的Inventory文件中定义的
# 因此我在运行playbook时需要-i指定自定义的Inventory文件,如果不指定,ansible就回去找默认的hosts文件,而这个文件中根本没有mywebhost这个组名,所以会报错。

2、运行 playbook

ansible-playbook -i inventory.yaml playbook.yaml

image-20220922112600610

剧本的执行过程:

  • 任务隐式运行。默认情况下,Ansible 会收集可以在 playbook 中使用的库存信息(Inventory),Gather Facts
  • 每个任务的状态。每个任务都有一个状态,ok这意味着它运行成功。
  • 对每个主机的剧本中所有任务的结果进行总结的剧本回顾。在此示例中,共有三个任务,因此ok=3表明每个任务都运行成功。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云计算-Security

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值