前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ansible入门

ansible入门

作者头像
萧晚歌
发布2020-08-19 11:07:45
1K0
发布2020-08-19 11:07:45
举报
文章被收录于专栏:linux技术分享linux技术分享

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

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Ansible快速入门
    • 介绍
      • ansiblle具有如下特点:
        • 环境准备
      • Ansible安装
        • 1)配置epel源
        • 2)安装ansible
        • 基于密码连接
        • 基于秘钥连接
        • 组机的使用
        • 临时指定inventory
        • Inventory内置参数
      • Ansible Ad-Hoc
        • ansible命令格式
        • host-pattern格式
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档