Ansible简介

环境

  • 控制节点:Ubuntu 22.04
  • Ansible 2.10.8
  • 管理节点:CentOS 8

组成

Ansible环境主要由三部分组成:

  • 控制节点(Control node):安装Ansible的节点,在此节点上运行Ansible命令
  • 管理节点(Managed node):Ansible所控制的节点
  • 主机清单(Inventory):我们一般通过Ansible来管理多个远程节点,那么就需要把所有的节点在逻辑上组织起来,比如按照功能划分为若干个组。控制节点通过inventory来管理远程节点

官网( https://docs.ansible.com/ansible/latest/getting_started/index.html )提供的架构如下图所示:

Ansible简介_第1张图片

特点

用途:

  • 消除重复,简化流程
  • 管理维护系统配置
  • 持续部署复杂软件
  • 零宕机滚动更新(rolling update)

优点:

  • 无代理架构:远程节点无需安装额外的软件,维护的开销很小(主控节点通过SSH访问远程节点)
  • 简单性:playbook使用YAML语法
  • 伸缩性和灵活性:简易且快速
  • 幂等性和可预测性:playbook可多次运行,如果系统已处于目标状态,则再次运行也没有变化

安装

apt install ansible

环境搭建

注:下面都是使用root用户。

首先需要一个inventory文件,默认文件为 /etc/ansible/hosts ,也可以使用 -i 参数来显式指定。

创建文件 /etc/ansible/hosts ,内容如下:

[myvms]
192.168.1.55

运行 ansible all --list-hosts ,如下:

➜  ansible ansible all --list-hosts
  hosts (1):
    192.168.1.55

接下来,和远程节点建立SSH连接。

把主控节点的private key(一般是 ~/.ssh/id_rsa 文件)复制到远程节点的 ~/.ssh/authorized_keys/ 目录下(如果本地没有就用 ssh-keygen -t rsa 生成一下),可以用 ssh-copy-id root@ 来复制。

注:ansible可用 -u 参数指定登录用户名。

测试一下 ssh [email protected] ,确保可以免密登录。

注: root@ 可以省略,但本地必须是root用户(因为复制时两端都使用的root用户)。

接下来用 ansible all -m ping 测试连通性:

➜  ~ ansible all -m ping
192.168.1.55 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}

命令行(ad-hoc)和playbook

命令行(ad-hoc)

其语法为:

ansible [pattern] -m [module] -a "[module options]"

下面是一个“Hello World”例子:

➜  ~ ansible all -m debug -a "msg='hello world'"
192.168.1.55 | SUCCESS => {
    "msg": "hello world"
}

Playbook

  • Playbook:由一系列play组成
  • Play:由一系列task组成
  • Task:由一系列module组成
  • Module:Ansible运行的代码单元,每个module有一个Fully Qualified Collection Name (FQCN)

其语法为:

ansible-playbook -i /path/to/my_inventory_file -u my_connection_user -k -f 3 -T 30 -t my_tag -M /path/to/my_modules -b -K my_playbook.yml

其中:

  • -i :指定inventory文件
  • -u :指定SSH连接用户名
  • -k :询问SSH连接密码
  • -f :指定N个fork
  • -T :设置超时时间(秒)
  • -t :只运行指定tag的task
  • -M :从指定路径载入本地module
  • -b :executes with elevated privileges (uses become)
  • -K :prompts the user for the become password.

例:

创建 playbook1.yml 文件,内容如下:

- name: Hello ansible
  hosts: all
  tasks:
   - name: PingPingPing
     ansible.builtin.ping:

   - name: Say hello
     ansible.builtin.debug:
       msg: Hello world

运行:

➜  ansible ansible-playbook playbook1.yml

PLAY [Hello ansible] *******************************************************************************

TASK [Gathering Facts] *****************************************************************************
ok: [192.168.1.55]

TASK [PingPingPing] ********************************************************************************
ok: [192.168.1.55]

TASK [Say hello] ***********************************************************************************
ok: [192.168.1.55] => {
    "msg": "Hello world"
}

PLAY RECAP *****************************************************************************************
192.168.1.55               : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

帮助

方法1:官网

https://docs.ansible.com/ansible/latest/index.html

方法2:命令行

  • ansible -h :查看 ansible 用法
  • ansible-doc :查看指定plugin用法,例如 ansible-doc ping
    注:可用 ansible-doc -h 查看 ansible-doc 用法。

你可能感兴趣的:(Ansible,ansible)