参考:

一、Ansible 概述

1.1 Ansible 是什么

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

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. [设计模式] 设计模式课程(十二)-- 门面模式(Facade)

    概述 也称外观模式 按目的属于结构型模式,按封装属于接口隔离模式 在组件构建过程中,某些接口之间的依赖常常会带来很多问题.甚至根本无法实现.采用添加一层间接(稳定)接口,来隔离本来互相紧密关联的接口 ...

  2. [笔记] c和指针

    1.简介 2.基本概念 3.指针 计算机内存的最小单位是位(bit),每个位可以容纳值0或1,单独的位用处不大,通常许多位合成一组作为一个单位,以存储较大范围的值 每个字节包含8位,可以存储无符号值0 ...

  3. nginx location标签的匹配规则

    location的匹配 匹配符 匹配规则 优先级 = 精确匹配 1 ^~ 以某个字符串开头 2 ~ 区分大小写的正则匹配 3 ~* 不区分大小写的正则匹配 4 !~ 区分大小写不匹配的正则 5 !~* ...

  4. https 真的安全吗,可以抓包吗,如何防止抓包吗

    Android_interview github 地址 大家好,我是程序员徐公,加上实习,有五年中大厂经验.自荐一下,可以关注我的微信公众号程序员徐公 公众号程序员徐公回复黑马,获取 Android ...

  5. 服务器ip迁移纪要

    21楼机房之前已配25网段静态ip,机架上14台服务器接22楼机房交换机,同样25网段. 实际有两种情况, a.25网段ip没有被他人占用,这种情况无需更改ip. b.该IP已被外部使用,ip冲突,无 ...

  6. JAVA并发(5)-并发队列LinkedBlockingQueue的分析

    本文介绍LinkedBlockingQueue,这个队列在线程池中常用到.(请结合源码,看本文) 1. 介绍 LinkedBlockingQueue, 不支持null,基于单向链表的可选有界阻塞队列. ...

  7. 打造住院新体验,GVS智慧病房有何独到之处?

    3月26-28日,由广东省医院协会主办的"2021第二届广东省医院建设大会暨医院建筑与装备展览会"在广州琶洲国际采购中心盛大举办,来自全国各地的医院代表及企事业单位代表4000余人 ...

  8. 操作系统-Linux命令

    一.目录结构 #因为根目录与开机有关,开机过程中仅有根目录会被挂载, 因此根目录下与开机过程有关的目录(以下5个),不能与根目录放到不同的分区去. /etc:配置文件 /dev:所需要的装置文件 /l ...

  9. Java swing JFrame用repaint出现闪烁的问题解决

    这几天用swing写登录页面背景动图的时候发现一直会有闪烁(我的类是继承JFrame),就来搜原因后发现好像是因为repaint会调用update()方法中的清屏操作导致闪烁. 我当时看的是这个文章 ...

  10. mybatis学习——使用注解开发

    前言: 一个语句既可以通过 XML 定义,也可以通过注解定义.不过,由于 Java 注解的一些限制以及某些 MyBatis 映射的复杂性,要使用大多数高级映射(比如:嵌套联合映射),仍然需要使用 XM ...