参考:

一、Ansible 概述

1.1 Ansible 是什么

Ansible是一款由Python开发(由ParamikoPyYAML两个关键模块构建)的自动化运维软件,集合了“前辈”们的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

1.2 Ansible 优势

  • 安装部署简单,易学习
  • 轻量级控制端,支持多主机并行管理
  • 无需装agent,基于SSH管理
  • 非root账户也可用

1.3 Ansible 特性

幂等性:同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的。

二、Ansible 入门

2.1 Ansible 架构

组件 功能
Ansible 核心程序。
Host Inventory Ansible管理的主机信息,包括IP地址、SSH端口号、账号、密码等。
Playbooks 剧本,格式为YAML格式,模块化定义一系列任务,供外部统一调用。
Plugins 插件。
Custom modules 自定义模块,完成核心模块无法完成的功能。
Core modules 核心模块,Ansible自带的。
Connection Plugins 连接插件,建立Ansible与其他组件间的通信(支持多种连接方式,不局限于SSH)。
Ansible Galaxy 共享ansible role的平台。

2.2 Ansible 安装

先配置epel源(可以理解为更高级的yum源)

yum install -y epel-release

然后在控制端安装ansible

yum install ansible

至此,ansible就安装完成了。

2.3 Ansible 命令集

ansible:定义并运行简单任务。

ansible-config:查看、编辑、管理 Ansible 配置。

ansible-doc:文档查看工具。

ansible-galaxy:分享Roles模块的官网平台,需要网络。

ansible-playbook:执行playbook剧本。

ansible-pull:从仓库拉取playbook。

ansible-vault:文件加解密工具。

ansible-console:REPL控制台执行 Ansible 任务。

2.4 Ansible 配置文件

2.4.1 ansible.cfg 主配置文件

默认放在/etc/ansible/ansible.cfg路径下,常见参数:

#这个参数表示主机清单inventory文件的位置
inventory = /etc/ansible/hosts
#放ansible模块的目录,支持多个目录,用冒号隔开
library = /usr/share/ansible
#并发连接数,默认为5
forks = 5
#默认执行命令的用户,不建议用root
sudo_user = root
#连接端口,SSH默认为22,建议修改
remote_port = 22
#设置是否检查SSH主机的密钥
host_key_checking = False
#SSH连接超时的时间
timeout = 60
#放ansible日志的路径
log_path = /var/log/ansible.log

优先级由上往下依次递减:

  • ANSIBLE_CONFIG:环境变量指向的配置文件

  • ./ansible.cfg:当前目录下的配置文件

  • ~/.ansible.cfg:当前用户目录下ansible配置文件

  • /etc/ansible/ansible.cfg:包管理方式安装生成的配置文件

2.4.2 Inventory 主机清单

Inventory主机清单放在这:/etc/ansible/hosts

注意:写主机名的时候,在 /etc/hosts 里需要有记录。

有三种写法:

  1. 直接指名主机IP地址或主机名(全局)。

    sky1.example.com
    sky2.example.com
  2. 定义组名,把主机IP地址或主机名加进去。

    [group1]
    sky1.example.com
    192.168.122.200
    [group2]
    sky2.example.com
    192.168.122.100
  3. 子组定义,关键字一定得是[xxx:children]。

    [sky:children]
    sky1.example.com
    sky2.example.com

2.5 Ansible 免密登陆被控端(SSH)

说明:控制端生成密钥对并把公钥发送到被控端的机器上,在登陆时即可实现免密。

具体实现如下:

  • 控制端
#生成密钥对,类型为rsa
ssh-keygen -t rsa
#发送到被控端,可通过-p参数指定端口(生产环境中有可能默认SSH端口不是22)
ssh-copy-id ~/.ssh/id_rsa.pub 192.168.122.200

三、Ansible 任务执行模式

3.1 ad-hoc 命令行

ad-hoc:使用单个模块,支持批量执行单条命令。

ansible <主机或主机组> -m <模块名> -a '参数'
  • -m:选项指定模块名
  • -a:选项指定发送的参数

3.2 playbook 剧本

Playbook:通过YAML语法定义多个task集合来完成管理。

3.3 程序运行流程

3.4 命令执行流程

  1. 加载配置文件,默认/etc/ansible/ansible.cfg
  2. 通过Inventory清单,找到需要执行的主机或主机组。
  3. 加载要用到的模块。
  4. 通过ansible将模块或者命令生成对应的python脚本,传输到远端服务器。
  5. 对应执行用户家目录的.ansible/tmp/xxx.py文件
  6. 提权用户执行该py文件,并返回结果。
  7. 删除py文件,退出。

四、Ansible 常用模块

4.1 模块帮助

4.1.1 测试拓扑

4.1.2 测试的Inventory

[root@vm1 ~]# cat /etc/ansible/hosts
[test]
192.168.122.200

4.1.3 常用模块帮助命令

ansible-doc -l:查看所有内置模块

ansible-doc <模块名>:查看模块名

ansible-doc -s <模块名>:查看模块参数列表

4.1.4 命令前提(重要)

[root@vm1 ~]# ansible test -m ping 

192.168.122.200 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}

在这里对test主机组进行ping测试,返回pong则是成功,这样就可以开始执行下面的任务了。

4.2 命令行模块(command、shell)

4.2.1 command 模块

说明:在不通过-m参数指定模块的情况下,ad-hoc默认就是使用的command模块,这个模块不支持shell变量和管道等,如果想要使用,请使用-m参数指定shell模块。

  • 默认下,使用的是command模块,发送命令。
[root@vm1 ~]# ansible test -m command -a "ping www.baidu.com -c 5"

192.168.122.200 | CHANGED | rc=0 >>
PING www.a.shifen.com (183.232.231.172) 56(84) bytes of data.
64 bytes from 183.232.231.172 (183.232.231.172): icmp_seq=1 ttl=127 time=12.8 ms
64 bytes from 183.232.231.172 (183.232.231.172): icmp_seq=2 ttl=127 time=12.7 ms
64 bytes from 183.232.231.172 (183.232.231.172): icmp_seq=3 ttl=127 time=11.10 ms
64 bytes from 183.232.231.172 (183.232.231.172): icmp_seq=4 ttl=127 time=14.9 ms
64 bytes from 183.232.231.172 (183.232.231.172): icmp_seq=5 ttl=127 time=12.3 ms --- www.a.shifen.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 12ms
rtt min/avg/max/mdev = 11.956/12.916/14.869/1.026 ms

4.2.2 shell 模块

说明:shell模块,支持管道和shell变量。

[root@vm1 ~]# ansible test -m shell -a "echo ${HOSTNAME}"

192.168.122.200 | CHANGED | rc=0 >>
vm1

4.2 文件操作模块

4.2.1 file 模块

说明:file模块,可以进行对文件的管理。

  • 创建文件夹:

    [root@vm1 /]# ansible test -m file -a "path=/tmp/file_test/ state=directory"
    
    192.168.122.200 | CHANGED => {
    "ansible_facts": {
    "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "gid": 0,
    "group": "root",
    "mode": "0755",
    "owner": "root",
    "path": "/tmp/file_test/",
    "secontext": "unconfined_u:object_r:user_tmp_t:s0",
    "size": 6,
    "state": "directory",
    "uid": 0
    }
  • 创建文件:

    [root@vm1 /]# ansible test -m file -a "path=/tmp/file_test/file1 state=touch"
    
    192.168.122.200 | CHANGED => {
    "ansible_facts": {
    "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "dest": "/tmp/file_test/file1",
    "gid": 0,
    "group": "root",
    "mode": "0644",
    "owner": "root",
    "secontext": "unconfined_u:object_r:user_tmp_t:s0",
    "size": 0,
    "state": "file",
    "uid": 0
    }
  • 删除文件:

    [root@vm1 /]# ansible test -m file -a "path=/tmp/file_test/file1 state=absent"
    
    192.168.122.200 | CHANGED => {
    "ansible_facts": {
    "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "path": "/tmp/file_test/file1",
    "state": "absent"
    }
  • 删除文件夹:

    [root@vm1 /]# ansible test -m file -a "path=/tmp/file_test state=absent"
    
    192.168.122.200 | CHANGED => {
    "ansible_facts": {
    "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "path": "/tmp/file_test",
    "state": "absent"
    }

4.2.2 copy 模块

说明:copy模块,指定src和dest可完成文件复制

  • 复制/etc/hosts到/tmp/hosts
[root@vm1 ~]# ansible test -m copy -a "src=/etc/hosts dest=/tmp/hosts"

192.168.122.200 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"checksum": "7335999eb54c15c67566186bdfc46f64e0d5a1aa",
"dest": "/tmp/hosts",
"gid": 0,
"group": "root",
"md5sum": "54fb6627dbaa37721048e4549db3224d",
"mode": "0644",
"owner": "root",
"secontext": "unconfined_u:object_r:admin_home_t:s0",
"size": 158,
"src": "/root/.ansible/tmp/ansible-tmp-1625579580.7383313-3373-17711169432251/source",
"state": "file",
"uid": 0
}

后面的放到②里面写,嘻嘻️‍♂️

[Linux]Ansible自动化运维① - 入门知识的更多相关文章

  1. ansible自动化运维入门

    1.ansible的安装 1)使用源码安装Python3.5 安装支持包 yum -y install lrzsz vim net-tools gcc gcc-c++ ncurses ncurses- ...

  2. [Linux]Ansible自动化运维② - 工具与模块

    目录 一.Ansible的工具 1.1 Ansible的工作前提 1.2 Ansible的安装文件 1.3 Ansible的配置文件 1.4 Ansible的相关工具 1.4.1 [帮助工具]Ansi ...

  3. Ansible自动化运维工具-上

    [Ansible特点] 1)Ansible与saltstack均是基于Python语言开发的 2)安装使用简单,基于不同插件和模块实现各种软件,平台,版本的管理以及支持虚拟容器多层级的部署 3)不需要 ...

  4. 简单聊一聊Ansible自动化运维

    一.Ansible概述 Ansible是今年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误.Ansible通过本身集成的非常丰富的模块 ...

  5. Ansible自动化运维工具及其常用模块

    Ansible自动化运维工具及其常用模块 目录 Ansible自动化运维工具及其常用模块 一.Ansible简介 1. Ansible概述 2. Ansible作用 3. Ansible的工作模块 4 ...

  6. 一文详解 Ansible 自动化运维

    开源Linux 一个执着于技术的公众号 一.Ansible 概述 Ansible 是近年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误 ...

  7. Linux云自动化运维第三课

    Linux云自动化运维第三课 一.正则表达式 1.匹配符 * ###匹配0到任意字符 ? ###匹配单个字符 [[:alpha:]] ###匹配单个字母 [[:lower:]] ###匹配单个小写字母 ...

  8. Linux云自动化运维第四课

    Linux云自动化运维第四课 一.vim 1.vim光标移动 1)在命令模式下 :数字  ###移动到指定的行 G  ###文件最后一行 gg  ###文件第一行 2)在插入模式下 i  ###光标所 ...

  9. Linux云自动化运维第五课

    Linux云自动化运维第五课 一.进程定义 进程就是cpu未完成的工作 二.ps命令 ps a ###关于当前环境的所有进程 x ###与当前环境无关的所有进程 f ###显示进程从属关系 e ### ...

随机推荐

  1. TCP/IP协议三次握手_四次挥手

    TCP/IP协议 TCP是一种面向连接的端到端的可靠传输协议. TCP报头格式 三次握手的过程 一.客户端发送一个连接请求,发送一个随机数X,这时客户端的端口状态变为SYN_SENT状态. 二.服务端 ...

  2. linux 安装配置NFS服务器

    一.Ubuntu安装配置NFS 1.安装NFS服务器 sudo apt-get install nfs-kernel-server 安装nfs-kernel-server时,apt会自动安装nfs-c ...

  3. Linux资源监控工具 glances

    使用资源监控工具 glances 前言 glances 可以为 Unix 和 Linux 性能专家提供监视和分析性能数据的功能,其中包括: CPU 使用率 内存使用情况 内核统计信息和运行队列信息 磁 ...

  4. NNVM Compiler,AI框架的开放式编译器

    NNVM Compiler,AI框架的开放式编译器 深度学习已变得无处不在且不可或缺.在多种平台(例如手机,GPU,IoT设备和专用加速器)上部署深度学习工作负载的需求不断增长.宣布了TVM堆栈,以弥 ...

  5. VTA硬件

    VTA硬件 提供了VTA硬件设计的自上而下的概述.本硬件设计涵盖两个级别的VTA硬件: VTA设计及其ISA硬件-软件接口的体系结构概述. VTA硬件模块的微体系结构概述以及计算核心的微代码规范. V ...

  6. NVIDIA安培架构

    NVIDIA安培架构 NVIDIA Ampere Architecture In-Depth 在2020年英伟达GTC主题演讲中,英伟达创始人兼首席执行官黄仁勋介绍了基于新英伟达安培GPU架构的新英伟 ...

  7. Pipe Utilization管道利用率

    Pipe Utilization管道利用率 概述 CUDA设备的每个流式多处理器(SM)都具有许多专门用于执行特定任务的硬件单元.在芯片级,这些单元提供执行管道,翘曲调度程序将指令发送到这些管道.例如 ...

  8. 从C到C++过渡的3个原因

    从C到C++过渡的3个原因 3 reasons to transition from C to C++ 几十年来,嵌入式软件工程师们一直在争论他们是否应该使用C或C++.根据2019年嵌入式市场调查, ...

  9. [NOIP2010 提高组] 机器翻译

    问题描述 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先在内存中查 ...

  10. 基于Linux的TCP网络聊天室

    1.实验项目名称:基于Linux的TCP网络聊天室 2.实验目的:通过TCP完成多用户群聊和私聊功能. 3.实验过程: 通过socket建立用户连接并传送用户输入的信息,分别来写客户端和服务器端,利用 ...