• 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 )提供的架构如下图所示:

    在这里插入图片描述

    特点

    用途:

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

    优点:

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

    安装

    apt install ansible

    环境搭建

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

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

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

    [myvms]
    192.168.1.55
    
    • 1
    • 2

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

    ➜  ansible ansible all --list-hosts
      hosts (1):
        192.168.1.55
    
    • 1
    • 2
    • 3

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

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

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

    测试一下 ssh root@192.168.1.55 ,确保可以免密登录。

    注: 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"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    命令行(ad-hoc)和playbook

    命令行(ad-hoc)

    其语法为:

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

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

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

    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
    
    • 1

    其中:

    • -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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    运行:

    ➜  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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    帮助

    方法1:官网

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

    方法2:命令行

    • ansible -h :查看 ansible 用法
    • ansible-doc :查看指定plugin用法,例如 ansible-doc ping
      注:可用 ansible-doc -h 查看 ansible-doc 用法。
  • 相关阅读:
    InnoDB数据存储结构
    【报错】 Cannot create property ‘showColumn‘ on number ‘-1‘
    深度学习1:神经网络原理与算法详解
    【Egg从基础到进阶】二:安装本地Mysql
    【ADS-01】TC264实现LED灯闪烁
    【MATLAB源码-第66期】基于麻雀搜索算法(SSA)的栅格路径规划,输出做短路径图和适应度曲线。
    C++宏的作用
    使用Python的方式理解Golang的结构体struct
    2022年最新Python大数据之Excel基础
    新版mmdetection3d将3D bbox绘制到图像
  • 原文地址:https://blog.csdn.net/duke_ding2/article/details/134037859