ansible入门

2020-08-19 11:07:45 浏览数 (1)

人生是条无名的河,是浅是深都要过; 人生是杯无色的茶,是苦是甜都要喝;

Ansible快速入门

介绍

Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具。它用Python写成,类似于saltstack和Puppet,但是有一个不同和优点是我们不需要在节点中安装任何客户端。它使用SSH来和节点进行通信。Ansible基于 Python paramiko 开发,分布式,无需客户端,轻量级,配置语法使用 YMAL 及 Jinja2模板语言,更强的远程命令执行操作

Ansible是一款简单的运维自动化工具,只需要使用ssh协议连接就可以来进行系统管理,自动化执行命令,部署等任务。

Ansible的特点

1、ansible不需要单独安装客户端,也不需要启动任何服务 2、ansible是python中的一套完整的自动化执行任务模块 3、ansible playbook 采用yaml配置,对于自动化任务执行过一目了然

Ansible组成结构

o   Ansible 是Ansible的命令工具,核心执行工具;一次性或临时执行的操作都是通过该命令执行。

o   Ansible Playbook 任务剧本(又称任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,yaml格式。

o   Inventory Ansible管理主机的清单,默认是/etc/ansible/hosts文件。

o   Modules Ansible执行命令的功能模块,Ansible2.3版本为止,共有1039个模块。还可以自定义模块。

o   Plugins 插件,模块功能的补充,常有连接类型插件,循环插件,变量插件,过滤插件,插件功能用的较少。

o   API 提供给第三方程序调用的应用程序编程接口。

ansiblle具有如下特点:

·        1、部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;

·        2、默认使用SSH协议对设备进行管理;

·        3、主从集中化管理;

·        4、配置简单、功能强大、扩展性强;

·        5、支持API及自定义模块,可通过Python轻松扩展;

·        6、通过Playbooks来定制强大的配置、状态管理

·        7、对云计算平台、大数据都有很好的支持;

环境准备

IP

系统

主机名

描述

192.168.1.100

CentOS7

ansible

ansible管理节点

192.168.1.107

CentOS7

linux.node01.com

被管理节点1

192.168.1.108

CentOS7

linux.node02.com

被管理节点2

Ansible安装

1)配置epel源

[root@ansible ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

代码语言:javascript复制
[root@ansible ~]# yum clean all
代码语言:javascript复制
[root@ansible ~]# yum makecache

2)安装ansible

代码语言:javascript复制
[root@ansible ~]# yum -y install ansible
代码语言:javascript复制
# 查看ansible版本
代码语言:javascript复制
[root@ansible ~]# ansible --version

Ansible Inventory文件

Inventory中文文档

Inventory文件通常用于定义要管理的主机的认证信息,例如ssh登录用户名、密码以及key相关信息。可以同时操作一个组的多台主机,组与主机组之间的关系都是通过inventory文件配置。配置文件路径为:/etc/ansible/hosts

基于密码连接

[root@ansible ~]# vi /etc/ansible/hosts

# 方法一 主机 端口 密码
代码语言:javascript复制
[webserver]
代码语言:javascript复制
192.168.1.104 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="woaini"
代码语言:javascript复制
192.168.1.107 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="woaini"
# 方法二 主机 端口 密码
代码语言:javascript复制
[webserver]
代码语言:javascript复制
192.168.1.104
代码语言:javascript复制
192.168.1.107
代码语言:javascript复制
[webserver:vars]
代码语言:javascript复制
Ansible_ssh_user="root"
代码语言:javascript复制
ansible_ssh_pass="woaini"

基于秘钥连接

基于秘钥连接需要先创建公钥和私钥,并发送给被管理机器

1) 生成公私钥
代码语言:javascript复制
[root@ansible ~]# ssh-keygen –t rsa
代码语言:javascript复制
[root@ansible ~]# for i in {104,107}; do ssh-copy-id -i 192.168.1.$i ; done
2) 配置连接
代码语言:javascript复制
[root@ansible ~]# vim /etc/ansible/hosts
代码语言:javascript复制
# 方法一 主机 端口 密钥
代码语言:javascript复制
[webserver]
代码语言:javascript复制
192.168.1.104
代码语言:javascript复制
192.168.1.107
代码语言:javascript复制
# 方法一 别名主机 端口 密钥
代码语言:javascript复制
node1 ansible_ssh_host=192.168.1.104 ansible_ssh_port=22
代码语言:javascript复制
node2 ansible_ssh_host=192.168.1.107 ansible_ssh_port=22

组机的使用

# 主机组变量名 主机 密码

[apache]

192.168.1.104

[apache:vars]

ansible_ssh_pass='123456'

# 主机组变量名 主机 密钥

[nginx]

192.168.1.107

# 定义多个组,把一个组当另外一个组的组员

[webserver:children]  #webserver组包括两个子组:apache nginx

apache

nginx

临时指定inventory

1) 先编辑一个主机定义清单
代码语言:javascript复制
[root@ansible ~]# vi /etc/dockers
代码语言:javascript复制
[dockers]
代码语言:javascript复制
192.168.1.104 ansible_ssh_pass='123456'
代码语言:javascript复制
192.168.1.107
2)在执行命令是指定inventory
代码语言:javascript复制
[root@ansible ~]# ansible dockers -m ping -i /etc/dockers -o 

Inventory内置参数

Ansible Ad-Hoc

Ad-Hoc中文文档

ad-hoc —— 临时的,在ansible中是指需要快速执行,并且不需要保存的命令。说白了就是执行简单的命令——一条命令。对于复杂的命令则为playbook,类似于saltstack的state sls状态文件。

ansible命令格式

1)常用命令参数
[root@ansible ~]# ansible -h

Usage: ansible <host-pattern> [options]

-a MODULE_ARGS   #模块参数

-C, --check  #检查语法

-f FORKS #并发

--list-hosts #列出主机列表

-m MODULE_NAME #模块名字

-o 使用精简的输出

2) 示例
代码语言:javascript复制
[root@ansible ~]# ansible webserver -m shell -a 'uptime' –o
3) 命令说明

host-pattern格式

目标target主机,主机组匹配方式

主机的匹配
代码语言:javascript复制
#  一台目标主机
代码语言:javascript复制
[root@ansible ~]# ansible 192.168.1.104 -m ping
代码语言:javascript复制
# 多台目标主机
代码语言:javascript复制
[root@ansible ~]# ansible 192.168.1.104,192.168.1.107 -m ping
代码语言:javascript复制
# 所有目标主机
代码语言:javascript复制
[root@ansible ~]# ansible all -m ping
组的匹配
代码语言:javascript复制
# 组的配置信息如下:这里定义了一个nginx组和一个apache组

[root@ansible ~]# ansible nginx --list

[root@ansible ~]# ansible apache --list

# 一个组的所有主机匹配

[root@ansible ~]# ansible apache -m ping

# 匹配apache组中有,但是nginx组中没有的所有主机

[root@ansible ~]# ansible 'apache:!nginx' -m ping -o

# 匹配apache组和nginx组中都有的机器(并集)

[root@ansible ~]# ansible 'apache:&nginx' -m ping -o

# 匹配apache组nginx组两个组所有的机器(并集);等于ansible apache,nginx -m ping

[root@ansible ~]# ansible 'apache:nginx' -m ping -o

人生是条无名的河,是浅是深都要过; 人生是杯无色的茶,是苦是甜都要喝;

0 人点赞