参考:

一、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. 064.Python开发虚拟环境

    在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题:亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难.此时,我们需要对于不同的工程使用不同 ...

  2. docker,docker-compose,harbor安装

    安装docker-ce 下载docker-ce.repo: wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/li ...

  3. STM32的引脚的配置

    http://blog.csdn.net/u010592722/article/details/45746079

  4. SqlServer事务详解(事务隔离性和隔离级别详解)

    概述 不少人对于事务的使用局限于begin transaction:开始事务.commit transaction:提交事务.rollback transaction:回滚事务的初步运用. 并且知道使 ...

  5. libevent中数据缓冲区buffer分析

    很多时候为了应对数据IO的"慢"或者其他原因都需要使用数据缓冲区.对于数据缓冲,我们不陌生,但是对于如何实现这个缓冲区,相信很多时候大家都没有考虑过.今天就通过分析libevent ...

  6. Lua在Windows下的安装、配置、运行

    Lua在Windows下的安装.配置.运行 本文链接:https://blog.csdn.net/ChinarCSDN/article/details/78667262 展开 # Windows下安装 ...

  7. Docker学习(13) Docker容器的网络连接

    Docker容器的网络连接 Docker容器的网络基础 先安装网桥管理工具 Docker容器的互联 默认 Docker容器与外部网络的连接

  8. 多视觉任务的全能: HRNet

    多视觉任务的全能: HRNet HRNet是微软亚洲研究院的王井东老师领导的团队完成的,打通图像分类.图像分割.目标检测.人脸对齐.姿态识别.风格迁移.Image Inpainting.超分.opti ...

  9. 如何在CPU上优化GEMM(上)

    如何在CPU上优化GEMM(上) (TL:DR)TVM提供了抽象接口,用户分别描述算法和算法的实现组织(所谓的调度).通常,在高性能调度中编写算法会破坏算法的可读性和模块性.尝试各种看似有希望的时间表 ...

  10. Mac设置charles证书信任