ansible基础(1)

目录

  • 一、基础概念
  • 二、基本操作
    • 安装
    • 推送公钥
    • 定义主机清单
    • ad-hoc(远程执行命令)

我叫张贺,贪财好色。一名合格的LINUX运维工程师,专注于LINUX的学习和研究,曾负责某中型企业的网站运维工作,爱好佛学和跑步。
个人博客:传送阵
笔者微信:zhanghe15069028807,非诚勿扰。

一、基础概念

ansible是什么?

ansible是通过调用ssh协议进行批量配置和管理的软件。

为什么用ansible?

如果我们只有两台主机,根本没必要用ansible,但是假如我们有50多台主机,要统一进行修改配置,一台台的改工作量太大了,我们这时就可以用ansible工具,统一对50台主机同时进行连接并修改配置,仅需要一次的操作,减少重复性的操作,大大提高了运维人员的效率。

ansible可以做些什么?

  • 批量命令执行
  • 批量同步配置文件
  • 批量代码部署

ansible的特点和优势

  • 只需要在控制端安装ansible软件,受控端保证ssh正常运行即可,并不用启动服务。
  • 修改配置之后不用重读,立马生效。
  • 模块相当于ansible的命令,而playbook相当于脚本。

ansible的架构组成

  • host inventory:主机清单
  • playbook:任务剧本
  • core modules:核心模块
  • commection plugin:连接插件

ansible的执行流程

  1. ansible读取playbook中的剧本,剧本中会记录将要对哪些主机执行哪些任务。
  2. ansible通过主机清单找到要执行的主机,然后调用具体的模块(相当于不同功能的命令)
  3. 然后,通过连接插件连接对应的主机下发任务列表。
  4. 最后受控端主机将下发来的任务解析成本地shell命令执行。

怎么用ansible?

至于怎么用ansible,那正是这一节的主要内容所在。

与ansible同类型的工具,比较出名的就属salstack

二、基本操作

安装

安装之前准备epel源:

yum -y install ansible
ansible --version
ansible 2.9.1

推送公钥

ansible默认是使用公钥进行连接受控端的,在使用ansible之前要先将ansible的公钥推送到三台受控端。

如果受控端数量较少,可以手动推送公钥,如果受控端数量较多,就使用脚本推送公钥。当前受控端有三台主机

  • 192.168.80.62
  • 192.168.80.63
  • 192.168.80.64

手动推送公钥的步骤:

  1. 主控端ansible通过ssh-keygen生成一对密钥,会自动存放在家目录的.ssh/authorized_keys文件下
  2. 然后通过ssh-copy-id把公钥上传到被控端,会自动保存在目的用户家目录下的.ssh/
//生成公钥,一路回车
[[email protected] ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:GS0Cof8VpoMGy9QfS9ICN1ZFrpwWHo5ED9zrPYBSZlo [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|  ..O+.oo        |
|   BE*.. .       |
|  +*=.O.* .      |
| [email protected]@ =       |
|  o.=.%oS        |
|   . o.oo        |
|      .  .       |
|                 |
|                 |
+----[SHA256]-----+

//发现有两个密钥
[[email protected] .ssh]# ls
id_rsa  id_rsa.pub

//这样就可以推送了,交互式输入yes和被控端的密码
[[email protected] ~]# ssh-copy-id 192.168.80.62 

脚本推送公钥的步骤:

//找个文件把受控端IP和密码写好,中间用空格隔开
[[email protected] ~]# cat host
192.168.80.62 cba-123
192.168.80.63 cba-123
192.168.80.64 cba-123

[[email protected] ~]# vim push_pub_key.sh
#!/bin/bash
#先定义一个函数expect
expect () {
/usr/bin/expect <<-EOF
spawn ssh-copy-id [email protected]$ADDR
expect {
"yes/no" { send "yes\r"; exp_continue }
"password:" { send $PASSWD\r }
}
expect eof
EOF
}           #函数在此结束

SERVERHOST=./host

for ADDR in `cut -d" " -f1 $SERVERHOST`;do  #这一cut把所有的ip全都列出来了
PASSWD=$(grep $ADDR $SERVERHOST | cut -d" " -f2)
test -f ~/.ssh/id_rsa
    if [ $? -ne 0 ];then
        ssh-keygen -P "" -f ~/.ssh/id_rsa &>/dev/null
        expect
        echo "key already send!"
    else
        expect
        echo "key already send!!"
    fi
done

由于此章节是讲ansible,所以对shell脚本不做过多的解释,如果想看具体的解释,请点击我的博客链接,传送门

定义主机清单

所谓的定义主机清单就是告诉ansible程序,要连接哪些主机的IP,也可以使用主机名,支持组;

[[email protected] ~]# vim /etc/ansible/hosts
[test]
192.168.80.62
192.168.80.63
192.168.80.64
//列出test组的主机
[[email protected] ~]# ansible test --list-host
  hosts (3):
    192.168.80.62
    192.168.80.63
    192.168.80.64

//列出所有主机
[[email protected] ~]# ansible all --list-host
  hosts (3):
    192.168.80.62
    192.168.80.63
    192.168.80.64

推送完公钥、定义完主机清单,测试一下是否可以使用了,用ping模块,这个模块不是网络当中的ping,而仅是测试ansible与受控端的连通性而已。

//ansible后面直接跟组名,-m是指定模块,这里我们使用ping模块,测试成功,全是绿色的。
[[email protected] ~]# ansible test -m ping
192.168.80.62 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
192.168.80.63 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
192.168.80.64 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
  • 绿色代表被管理主机没有被修改
  • 黄色代表被管理主机发现变更
  • 红色代表出现故障,注意查看提示原因

ad-hoc(远程执行命令)

什么是ad-hoc?

其实就是远程对主机清单里面的主机执行命令,这些命令是临时执行,执行完就结束了,并不会保存。

ad-hoc的使用场景

比如在多台机器上查看某个进程是否启动

ad-hoc的格式

ansible -m -a

模块可以不写,默认是command,如ansible test -m command -a ‘hostname‘可以简写成如下格式:

//ansible后面直接写组名,-a 后面加上单引号,把命令引起来就可以了
[[email protected] ~]# ansible test -a 'hostname'
192.168.80.64 | CHANGED | rc=0 >>
backup

192.168.80.63 | CHANGED | rc=0 >>
nfs

192.168.80.62 | CHANGED | rc=0 >>
nginx

ad-hoc缺点就是不太支持管道和&符号,一用就报错,如果想让其支持管道的话,就用shell模块,如下

//在command模块中使用管道会报错,红色
[[email protected] ~]# ansible test -a 'df -h | head -2'
192.168.80.64 | FAILED | rc=1 >>
df: invalid option -- '2'
Try 'df --help' for more information.non-zero return code

192.168.80.62 | FAILED | rc=1 >>
df: invalid option -- '2'
Try 'df --help' for more information.non-zero return code

192.168.80.63 | FAILED | rc=1 >>
df: invalid option -- '2'
Try 'df --help' for more information.non-zero return code

//使用shell模块就好了
[[email protected] ~]# ansible test -m shell -a 'df -h | head -2'
192.168.80.62 | CHANGED | rc=0 >>
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   45G  1.7G   44G   4% /

192.168.80.63 | CHANGED | rc=0 >>
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   45G  1.7G   44G   4% /

192.168.80.64 | CHANGED | rc=0 >>
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   45G  1.7G   44G   4% /

shell模块是万能的,啥都能执行,那我们干脆只学shell模块不就行了,干吗还要学习其他的模块呢?是因为shell模块不管对方是什么状态,都要将命令在对方执行一次,而其他模块会判断,判断对方当前的状态是什么,如果的对方的状态就是我们希望的,那就不执行,如果不是,就执行,这样多好,我们下面来举一个例子:

[[email protected] ~]# ansible test -m shell -a 'yum -y install vim'

上述命令,无论你执行多少次都会显示黄色,而黄色代表对方被更改,其实只有第一次被更改,后面都是重复的,按理说除了第一次都应该显示绿色,但是通过shell模块不会判断对方的状态,我们如果使用专门的安装模块结果就变成我们想要的,如果受控端已经安装了vim,就不会再执行安装了,不被更改就显示绿色,如下所示:

[[email protected] ~]# ansible-doc yum    #找到帮助示例学习一下yum模块的使用
EXAMPLES:

- name: install the latest version of Apache   #将这个安装apache的写法转换成临时命令的写法
  yum:
    name: httpd    #模块是httpd
    state: latest  #方法是latest(更新),absent(移除),present(安装)

[[email protected] ~]# ansible test -m yum -a 'name=vim state=present'

原文地址:https://www.cnblogs.com/yizhangheka/p/12111191.html

时间: 2024-08-04 16:59:24

ansible基础(1)的相关文章

ansible基础

ansible 介绍:官网,百科之类的 ansible的部署 centos 6.5上的部署. 2.2.2.11 node1.king.com ansible 2.2.2.15 node3.king.com 2.2.2.12 node2.king.com tar xf ansible-1.5.4.tar.gz cd ansible-1.5.4 python setup.py build python setup.py install mkdir /etc/ansible cp -r example

关于ansible基础入门和功能实现教程的更新页面

最近发现MDT推出去的系统的有不同问题,其问题就不说了,主要是策略权限被域继承了.比如我们手动安装的很多东东都是未配置壮态,推的就默认为安全壮态了,今天细找了一下,原来把这个关了就可以了. 关于ansible基础入门和功能实现教程的更新页面

L13 ansible 基础应用与常见模块

ansible 基础应用与常见模块 ansible中文手册:http://www.simlinux.com/books/Ansible-notes.pdf 1,运维工具简介 运维工具: 系统安装(物理机.虚拟机)--> 程序安装.配置.服务启动 --> 批量操作(批量运行命令) --> 程序发布 --> 监控 ansible 能够实现:程序安装.配置.服务启动 --> 批量操作(批量运行命令) --> 程序发布 ansible的核心组件: ansible core ho

自动化运维工具之ansible基础入门

自动化运维工具常用的有 ansible  saltstack  puppet等 ,前两者都是基于python开发,puppet基于ruby开发,今天我们简单介绍下ansible基础 一.基础知识: 1. 简介 ansible基于python开发,集合了众多运维工具的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible是基于模块工作的 (1) host inventory: 指定操作的主机,是一个配置文件里面定义监控的主机        (2) 各种模块核心模块.comman

ansible基础与部分模块应用

ansible基础与部分模块应用 1. ansible特性: ansible糅合了众多老牌运维工具的优点,基本上pubbet和saltstack能实现的功能全部能实现. 部署简单:不需要在被管控主机上安装任何客户端,操作客户端时直接运行命令. 基于python语言实现,有Paramiko, PyYAML和Jinja2三个关键模块. 模块化:调用特定模块完成特定任务.可使用任意语言开发模块,且支持自定义模块. 使用yaml语言定制剧本playbook. 基于SSH作 2. ansible的模块 c

ansible基础-安装与配置

一 安装 1.1 ansible架构 ansible是一个非常简单的自动化部署项目,由python编写并且开源.用于提供自动化云配置.配置文件管理.应用部署.服务编排和很多其他的IT自动化需求. ansible实现的自动化部署是多层次的,通过描述系统之间的逻辑关系来构建业务所需要的基础架构模型,而不仅仅用于管理一个单独的系统:也就是说ansible不仅仅能部署一个或多个独立的服务,它还能对这些服务做关联.对部署顺序做编排等,一个完美的ansible部署项目应该是层次分明.顺序有秩的. 另外,an

ansible基础-roles

一 简介 注:本文demo使用ansible2.7稳定版 在我看来,role是task文件.变量文件.handlers文件的集合体,这个集合体的显著特点是:可移植性和可重复执行性. 实践中,通常我们以部署某个服务为单元作为一个role ,然后将这些服务单元(role)放在一个roles目录下.主playbook文件通过调用roles目录下的role,来实现各种灵活多变的部署需求. 本节主要为大家介绍下roles的目录结构.引用方法及其他特性. 二 创建与目录结构 2.1 创建roles 通常创建

自动化运维工具-Ansible基础

目录 自动化运维工具-Ansible基础 自动化运维的含义 Ansible 基础及安装 Ansible的架构 Ansible的执行流程 ansible配置文件 ansible Inventory(主机清单文件) Ansible ad-hoc ansible常用模块 实战 自动化运维工具-Ansible基础 自动化运维的含义 1.手动运维时代 2.自动化运维时代 3.自动化运维工具给运维带来的好处 Ansible 基础及安装 1.什么是Ansible Ansible是一个自动化统一配置管理工具 2

Ansible基础知识

1.Ansible自动化配置管理 安装 配置 启动 nginx redhat红帽 ( 收购 ansible -->Ansible自动化运维配 置管理专家) 2.Ansible介绍及配置 #1.什么是ansible? 可以通过一个命令行完成一系列的操作. #2.ansible 优点 特点? #3.ansible 基础架构? 控制端 被控端 inventory ad-hoc playbook 连接协 议? #4.ansible 配置文件 优先级 ANSIBLE_CONFIG ansible.cfg

ansible基础—安装与常用模块

ansible介绍: ansible是一个基于python开发的轻量级自动化运维管理工具,可以用来批量执行命令,安装程序,支持playbook编排.它通过ssh协议来连接主机,省去了在每一台主机安装客户端的麻烦,相对比puppet和saltstack,显得更为简单和轻量. ansible命令参数: Usage: ansible <host-pattern> [options] Options:   -a MODULE_ARGS, --args=MODULE_ARGS