Ansible 工作原理

在这里插入图片描述
优点 , 基于python, 简单, 不用在被管理节点安装agent

主要组成部分:
Playbooks: 任务剧本, 也就是预编写的命令集合脚本。
Roles: Playbook 的集合,适合复杂的行为
Inventory: 资产清单,就是告诉Ansible哪些主机可以被管理
Modules: Ansible 执行的命令的功能模块, 多数为内置核心模块, 也可以自定义
Plugins: Modules的功能补充, 如连接类型插件, 循环插件, 变量插件, 过滤插件, 不常用
API: 供第三方程序调用的编程接口

Ansible 安装

前提, 管理节点: Python > 某版本, openssh服务
被管理节点: openssh服务 , 安装了python

在管理节点:安装
pip3 install ansible

Ansible 配置文件

如果用pip 安装 ansible, 默认配置文件是不存在的。这事需要用root 权限手动创建/etc/ansible/ansible.cfg

再执行ansbile --version
那么ansible就会启用那个ansible.cfg 配置文件
参考:
https://stackoverflow.com/questions/35969668/ansible-path-to-ansible-cfg

Ansible 日志

Ansible 默认上是没有启用日志的。
这时我们在上面的配置文件上加上两行:

gateman@DESKTOP-UIU9RFJ:/etc/ansible$ cat /etc/ansible/ansible.cfg 
[defaults]
log_path = /var/log/ansible.log
gateman@DESKTOP-UIU9RFJ:/etc/ansible$ 

那么日志功能会被启用

与被管理节点(资产) 建立信任关系。

在管理节点生成ssh key pair
ssh-keygen -t rsa

然后把id_rsa.pub 的内容 放到被管理节点的 .ssh/authorized_keys 文件下。

快速入门。

与被管理节点测试连接
gateman@DESKTOP-UIU9RFJ:~$ ansible all -i 120.24.169.231,139.198.126.65  -m ping
120.24.169.231 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
139.198.126.65 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

传输文件
gateman@DESKTOP-UIU9RFJ:~$ ansible all -i  120.24.169.231,139.198.126.65 -m copy -a "src=~/readme.txt dest=/tmp/"
120.24.169.231 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "checksum": "cafec074a8a2dfb69a625ca2c19b65da8ad8d6ba",
    "dest": "/tmp/readme.txt",
    "gid": 1001,
    "group": "gateman",
    "md5sum": "e2ff33bcf6fded5aa67fe59a25ee5e65",
    "mode": "0664",
    "owner": "gateman",
    "size": 67,
    "src": "/home/gateman/.ansible/tmp/ansible-tmp-1634575135.9501271-3331-268559729730454/source",
    "state": "file",
    "uid": 1001
}
139.198.126.65 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "checksum": "cafec074a8a2dfb69a625ca2c19b65da8ad8d6ba",
    "dest": "/tmp/readme.txt",
    "gid": 1000,
    "group": "gateman",
    "md5sum": "e2ff33bcf6fded5aa67fe59a25ee5e65",
    "mode": "0664",
    "owner": "gateman",
    "size": 67,
    "src": "/home/gateman/.ansible/tmp/ansible-tmp-1634575136.3582919-3334-107862721508521/source",
    "state": "file",
    "uid": 1000
}

注意上面Src 的值有点长。
其实它是临时生成的python 脚本

选项参数解释
all 在ansible 中, 将其叫做pattern, 即匹配, 通常叫做资产选择器。
-i 进一步指定资产, 必须是1个list 也就是讲只有1个资产时也要加逗号
-m 指定要运行的模块, 比如上面的ping 和 copy 模块
-a 指定模块的参数, 这里模块ping没有指定参数, 模块copy指定了src 和 dest参数

Ansible 资产

所谓资产就是可以北欧Ansible 管理的节点服务器。

Ansbile 资产分为静态资产和动态资产。

这里仅介绍静态资产

1. 静态资产

静态资产它本身是1个文本文件, 1个类似于INI的文件。
In default case, Ansible的资产文件位于 /etc/ansible/hosts
pip 安装的可能没有这个文件, 创建1个即可。

gateman@DESKTOP-UIU9RFJ:/etc/ansible$ cat /etc/ansible/hosts 
[web_servers]
120.24.169.231
139.198.126.65

[db_servers]

[all_servers]
[all_servers:children]
web_servers
db_servers


1.1 自定义资产

这个文件也可以自定义在任意地方, 之后使用相应的参数(-i)指定。

gateman@DESKTOP-UIU9RFJ:/etc/ansible$ cat /etc/ansible/inventory.ini 
[web_servers]
120.24.169.231

[db_servers]
139.198.126.65

[all_servers]
[all_servers:children]
web_servers
db_servers


1. 2 列出所有资产

–list–host

 gateman@DESKTOP-UIU9RFJ:/etc/ansible$ ansible all --list-host
  hosts (2):
    120.24.169.231
    139.198.126.65

上面的情况是默认从/etc/ansible/hosts里找资产

下面是指定自定义资产配置文件

gateman@DESKTOP-UIU9RFJ:/etc/ansible$  ansible all -i /etc/ansible/inventory.ini --list-host
  hosts (2):
    120.24.169.231
    139.198.126.65

2. 资产选择器

语法:
ansible PATTERN -i xxxx.ini(资产配置文件) -m module -a argument

根据IP 只选择1台服务器

gateman@DESKTOP-UIU9RFJ:/etc/ansible$ ansible 120.24.169.231 -i /etc/ansible/inventory.ini --list-host
  hosts (1):
    120.24.169.231

根据组来选择服务器:

gateman@DESKTOP-UIU9RFJ:/etc/ansible$ ansible web_servers -i /etc/ansible/inventory.ini --list-host
  hosts (1):
    120.24.169.231
gateman@DESKTOP-UIU9RFJ:/etc/ansible$ ansible db_servers -i /etc/ansible/inventory.ini --list-host
  hosts (1):
    139.198.126.65
gateman@DESKTOP-UIU9RFJ:/etc/ansible$ ansible all_servers -i /etc/ansible/inventory.ini --list-host
  hosts (2):
    120.24.169.231
    139.198.126.65
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐