当前位置: 首页 > article >正文

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

运行 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@<host> 来复制。

注: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"
}

命令行(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> :查看指定plugin用法,例如 ansible-doc ping
    注:可用 ansible-doc -h 查看 ansible-doc 用法。

http://www.kler.cn/a/103798.html

相关文章:

  • 超好用的数据可视化工具推荐,小白也适用!
  • GaussDB数据库管理系统介绍
  • 微信小程序投票管理系统:打造智能、便捷的投票体验
  • 【Node.js】暴露自定义响应头和预检请求的时机
  • 概率论_概率公式中的分号(;)、逗号(,)、竖线(|) 及其优先级
  • NFT Insider112:The Sandbox聘请Apple高管担任其首席内容官,YGG 将在菲律宾举办Web3游戏峰会
  • 【C++面向对象】8. 继承
  • 01.MySQL(SQL分类及使用)
  • 如何将本地 PDF 文件进行翻译
  • 精通代码复用:设计原则与最佳实践
  • js的节流和防抖详解
  • 微信小程序连接数据库与WXS的使用
  • T113-S3-buildroot文件系统tar解压缩gz文件
  • 单窗口单IP适合炉石传说游戏么?
  • 【单链表,循环链表和双向链表的时间效率比较,顺序表和链表的比较,有序表的合并------用顺序表实现,用链表实现】
  • 【ArcGIS模型构建器】05:批量为多个矢量数据添加相同的字段
  • 【Java】泛型通配符
  • 回归预测 | MATLAB实现BO-LSTM贝叶斯优化长短期神经网络多输入单输出回归预测
  • 路由器和交换机之间的区别
  • Docker部署