ansible自动运维入门

一、简要

1、关于Ansible
Ansible是一个部署一群远程主机的工具;Ansible通过SSH协议实现远程节点和管理节点之间的通信。理论上说,只要管理员通过ssh登录到一台远程主机上能做的操作,Ansible都可以做到。Ansible是python开发的,故依赖一些python库和组件

2ansible架构:

上图右边绿色部分是被管理的主机(虚拟机,物理机,云主机等)从以上架构图中可以看出ansible是由主机清单(配置),playbook(配置),以及各模块插件组成;简单的说就是,用户(管理员)通过ansible的主机清单配置或Playbook配置(一组任务),调用ansible的各种模块及参数来对清单中的主机进行统一管理。

3、测试环境

ansible: 主机名:Cent65 版本:CentOS release 6.8  IP:192.168.1.65

node1: 主机名:cent67 版本:CentOS release 6.9 IP:192.168.1.67

node2 主机名:rescue 版本:CentOS release 6.9 阿里云主机IP: 47.95.243.198

从ansible(Cent65)上生成ssh密钥对同步到两台node主机上,实现无密钥登录管理(推荐)。

[[email protected] ~]# ssh-keygen -t rsa 一路回车。

把自己公钥复制到远程机器:

[[email protected] ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.1.67

现在通过Cent65远程cent67已经不需要密码了。

同理,设置rescue主机免密登录:

[[email protected] ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 47.95.243.198

[[email protected] ~]# ssh 47.95.243.198

4、安装

目前,只要机器上安装了 Python 2.6 或 Python 2.7 (windows系统不可以做控制主机),都可以运行Ansible,我们这里是2.6.6的python

[[email protected] ~]# python -V

开始安装,这里采用epel yum源的方式安装,更方便。

先安装epel源:

[[email protected] ~]# yum install epel-release –y

出现如下错误,意思是系统中没有epel,需要先下载epel包才能安装。

接下来,我们上阿里云去寻找对应的epel源,网址:https://opsx.alibaba.com/mirror

搜索epel,复制地址:

到Cent65主机wget下载:

[[email protected] ~]# cd /etc/yum.repos.d/

[[email protected] yum.repos.d]# wget https://mirrors.aliyun.com/centos/6.10/extras/i386/Packages/epel-release-6-8.noarch.rpm

又出现了报错:需要加参数

[[email protected] yum.repos.d]# wget https://mirrors.aliyun.com/centos/6.10/extras/i386/Packages/epel-release-6-8.noarch.rpm --no-check-certificate

这样就可以了。可以安装epel源了:

[[email protected] yum.repos.d]# rpm -ivh epel-release-6-8.noarch.rpm

[[email protected] yum.repos.d]# yum -y install ansible

[[email protected] ~]# ansible –version 查看版本。

二、配置及获取帮助说明

通过rpm -ql ansible可以看到有很多文件,主要是配置文件和和可执行文件,以及所依赖的python库文件

1、配置与执行文件说明

主配置文件: /etc/ansible/ansible.cfg (这个文件主要定义了roles_path路径,主机清单路径,连接清单中的主机方式等配置,这些大部的默认配置已经足够我们平时使用,如需要特别配置可以自行去修改)

默认主机清单配置文件:/etc/ansible/hosts (可通过ansible.cfg重新定义)

除了以上两个重要的配置文件还有三个重要的可执行文件分别是:

ansible  主执行程序,一般用于命令行下执行
ansible-playbook 执行playbook中的任务
ansible-doc  获取各模块的帮助信息

2ansible 使用格式

ansible

     HOST-PATTERN         #匹配主机模式,如all表示所有主机
    -i                     #指定hosts文件

-m MOD_NAME #模块名 如:ping

-a MOD_ARGS #模块执行的参数

-f FORKS #生成几个子进行程执行

-C #(不执行,模拟跑)

-u Username #某主机的用户名

-c CONNection #连接方式(default smart)

-

例如:[[email protected] ansible]# ansible all -m shell -a "ifconfig|grep eth0"

此命令意思是:ansible对hosts文件中所有主机通过shell模块执行“ifconfig|grep eth0”命令。

3ansible-doc 获取帮助信息

ansible-doc -s 模块名 获取指定模块帮助信息说明

4、配置hosts文件

ansible默认的hosts文件路径为:/etc/ansible/hosts

[[email protected] ~]#vim /etc/ansible/hosts

在文件最后添加:

[testserver]

192.168.1.67

47.95.243.198

三、ansible常用模块

1copy模块

从本地copy文件分发到远程主机。

参数说明:
src= 源文件路径
dest= 目标路径

注意src= 路径后面带/ 表示带里面的所有内容复制到目标目录下,不带/是目录递归复制

owner 属主 group 属组 mode权限

示例:

[[email protected] ansible]# ansible all -m copy -a "src=/etc/fstab dest=/tmp/fstab.ansible mode=600"

[[email protected] ansible]# ansible all -m copy -a "content='hi there\n' dest=/tmp/hi.txt"

命令中没有指定hosts文件,便是使用默认hosts,all参数代表指定所有主机。

现两台主机显示执行都已经成功,现在我们在cent67主机上查看一下:

[[email protected] ~]# ls /tmp/

2fetch模块

从远程主机拉取文件到本地

例:[[email protected] ansible]# ansible all -m fetch -a "src=/tmp/hi.txt dest=/tmp/"

说明:src为远程主机路劲,dest为本地路径。查看一下是否拉取文件成功:

[[email protected] ansible]# ls /tmp/

3command模块

在远程主机上执行命令,属于裸执行,非键值对显示;不进行shell解析;

示例1:

[[email protected] ansible]# ansible all -m command -a "ifconfig"

示例2:

[[email protected] ansible]# ansible all -m command -a "ifconfig|grep eth0"

现在使用了管道符后执行失败了,说明command模块不支持。为了能够达成解析,就需要用到shell模块。

4shell模块

由于commnad只能执行裸命令(即系统环境中有支持的命令),至于管道之类的功能不支持,shell模块可以做到

例:[[email protected] ansible]# ansible all -m shell -a "ifconfig|grep eth0"

已经执行成功了。

5file模块

设置文件属性(创建文件)

常用参数:
path目标路径
state directory为目录,link为软件链接
group 目录属组
owner 属主

示例1:我们来给远程主机创建一个/var/tmp/hello.dir目录:

[[email protected] ansible]# ansible all -m file -a "path=/var/tmp/hello.dir state=directory"

cent67上检查一下是否创建成功的目录:

示例2:创建软件链接:

[[email protected] ansible]# ansible all -m file -a "src=/tmp/hi.txt path=/var/tmp/hi.link state=link"

6cron模块

对目标主机生成计划任务

常用参数:
除了 分(minute) 时(hour) 日(day) 月(month) 周(week) 外
name: 本次计划任务的名称
state: present 生成(默认) |absent 删除 (基于name)

示例1:对远程各主机添加每隔3分钟从time.windows.com同步时间

[[email protected] ansible]# ansible all -m cron -a "minute=*/3 job='/usr/sbin/ntpdate time.windows.com &>/dev/null' name=update_time"

到cent67上边查看一下:

示例2:删除计划任务

[[email protected] ansible]# ansible all -m cron -a "name=update_time state=absent"

在cent67上查看发现计划任务已经删除了

7yum模块

yum安装软件包的模块;

常用参数说明:
enablerepo, disablerepo表示启用与禁用某repo库
name 安装包名
state (present 或者installed)表示安装, (absent或者removed) 表示删除

示例:通过安装epel扩展源并安装nginx

[[email protected] ansible]# ansible all -m yum -a "name=epel-release state=installed"

[[email protected] ansible]# ansible all -m yum -a "name=nginx state=installed"

在cent67上边查看已经安装成功:

8service模块

服务管理模块
常用参数:

name: 服务名
state: 服务状态
enabled: 是否开机启动 true | false
runlevel: 启动级别 (systemed方式忽略)

示例:启动nginx服务,并设置开机自动启动

[[email protected] ansible]# ansible all -m service -a "name=nginx state=started enabled=true"

在cent67上查看状态,已经启动成功

9script模块

把本地的脚本传到远端执行;前提是到远端可以执行,不能把Linux下的脚本同步到windows下执行;

示例:

编写一个简单的脚本;

[[email protected] ansible]# vim test.sh

#!/bin/bash

echo "ansible script test!" > /tmp/ansible.txt

[[email protected] ansible]# ansible all -m script -a "/etc/ansible/test.sh"

在cent67机器上查看test.sh脚本已经执行成功。

以上就是一些常用的模块,其他模块的使用可以用以下命令查看

[[email protected] ansible]# ansible-doc -l

查看某个模块使用方法:

ansible-doc –s 模块名称

四、Playbook实战

playbook是Ansible的配置,部署和编排的语言。他们可以描述你所希望的远程系统强制执行的政策,或者在一般的IT流程的一组步骤

1playbook的核心元素

hosts : playbook配置文件作用的主机
tasks: 任务列表
variables: 变量
templates:包含模板语法的文本文件
handlers :由特定条件触发的任务
roles :用于层次性、结构化地组织playbook。roles 能够根据层次型结构自动装载变量文件、tasks以及handlers等

2playbook运行方式

ansible-playbook --check  只检测可能会发生的改变,但不真执行操作
ansible-playbook --list-hosts  列出运行任务的主机
ansible-playbook --syntax-check playbook.yaml 语法检测
ansible-playbook -t TAGS_NAME playbook.yaml 只执行TAGS_NAME任务
ansible-playbook playbook.yaml 运行

3、通过playbook安装管理redis服务

先创建一个剧本文件夹,用来存放我们的剧本文件。

[[email protected] ansible]# mkdir playbooks

[[email protected] ansible]# cd playbooks/

创建剧本文件:

[[email protected] playbooks]# vim redis.yaml

(1)下面我们来检测一下这个剧本文件:

[[email protected] playbooks]# ansible-playbook --syntax-check redis.yaml

没有报错,说明语法没有问题。

(2)再来查看一下运行任务的主机:

[[email protected] playbooks]# ansible-playbook --list-hosts redis.yaml

(3)执行剧本文件

[[email protected] playbooks]# ansible-playbook redis.yaml

由于上面的操作是直接安装redis服务并启动,并没有配置文件,这还不能往生产环境中使用,生产环境中的redis肯定有不同的配置项,因此需要在安装时提供配置文件。

4、带配置文件的安装管理redis

1首先复制一个redis.conf到本地home目录下并进行修改

[[email protected] ansible]# ansible 192.168.1.67 -m fetch -a "src=/etc/redis.conf dest=/home"

 (2)然后编辑下载好的配置文件,修改bind 0.0.0.0,为了任意主机可以远程连接rsdis。之后将配置文件移动到/etc/ansible/playbooks/.

[[email protected] ~]# vim !$

[[email protected] etc]# mv redis.conf /etc/ansible/playbooks/

(3)重新编写redis2.yaml剧本文件

[[email protected] ~]# vim redis2.yaml

 - hosts: all                          #所有远程主机

remote_user: root #以远程主机上root用户执行

tasks: #任务

- name: install redis #任务之安装

yum: name=redis state=latest #动作调用yum模块安装

- name: copy config file #任务之复制同步配置文件到远程目标主机

copy: src=/etc/ansible/playbooks/redis2.conf dest=/etc/redis.conf owner=redis #动作copy模块执行

notify: restart redis #触发的动作

tags: configfile #任务标记名configfile

- name: start redis #任务之启动redis

service: name=redis state=started #动作调用sevice模块

handlers: #特定情况下,接收到其他任务的通知时被触发

- name: restart redis

service: name=redis state=restarted

(4)检测剧本语法

[[email protected] ~]# ansible-playbook --syntax-check redis2.yaml

(把redis2.yaml移动到/etc/ansible/playbook/下面)

[[email protected] ~]# mv redis2.yaml /etc/ansible/playbooks/

[[email protected] ~]# cd !$

(5)执行剧本

[[email protected] playbooks]# ansible-playbook redis2.yaml

执行成功。

本文参考博客:http://blog.51cto.com/dyc2005/2070729

原文地址:http://blog.51cto.com/rescue/2145993

时间: 2024-11-09 03:03:35

ansible自动运维入门的相关文章

ansible自动运维工具之ansible-playbook详解

本博文衔接上篇:Ansible自动化运维的安装及常用模块解释 一.Playbook简介 playbook配置文件使用YAML语法,具有简洁明了.结构清晰等特点.playbook配置文件类似于shell脚本,是一个YAML格式的文件,用于保存针对特定需求的任务列表.上面介绍的ansible命令虽然可以完成各种任务,但是当配置一些复杂任务时,逐条输入就显得效率非常低下了.更有效的方案是在playbook配置文件中放置所有的任务代码,利用ansible-playbook命令执行该文件,可以实现自动化运

Linux自动运维工具Ansible的使用

Linux自动运维工具Ansible的使用 我们熟悉这个工具后, 可以很轻松的安装k8s. 一.介绍 ansible - run a task on a target host(s) Ansible是一个用Python开发的运维工具, 可以在本地让远程主机执行命令, 项目地址: Github源码, 中文文档 二.安装 简单上阵, 我们的主机都是ubuntu, 请使用root用户: sudo su apt install ansible ansible --version 配置文件: ls /et

ansible轻量级运维工具使用

Linux轻量级自动运维工具- Ansible 创始人 Michael DeHanan 2012-03-09 同类自动化工具: Ansible Saltstack Puppet Chef Fabric Ansible 特点 agentless (去中心化) 只要保存管理机的认证信息,那么任何一台机器都可以变成管理机 Stupied Simple SSH by default YAML no code 定制剧本 基于python 实现 模块化:调用特定模块,完成特定任务,支持自定义模块 冥等性 -

基于 ANSIBLE 自动化运维实践

摘要:运维这个话题很痛苦,你做任何的产品都离不开运维.不管你用什么语言.什么平台.什么技术,真正能够决定你产品成熟度的很有可能就是你运维的能力.取自 云巴 CEO 张虎在 ECUG 大会上的分享. 云时代的运维 以前的运维那么痛苦,大家却并未做多大的努力去改变这个现状,为什么?因为原来你要自己去建机房.自己去采购.去调研机房.采购服务器.采购带宽,中间出了任何问题很大可能都是机房的问题. 在云时代,尤其是在AWS出现之后,很多美国团队的运维方式发生了极大的变化. 为什么云时代的运维跟原来的运维不

Ansible自动化运维工具-上

[Ansible特点] 1)Ansible与saltstack均是基于Python语言开发的 2)安装使用简单,基于不同插件和模块实现各种软件,平台,版本的管理以及支持虚拟容器多层级的部署 3)不需要安装客户端,ansible基于SSH远程管理,不需要为配置工作添加额外的支持: PS:很多认为Ansible工具执行效率慢,其原因是SSH服务慢,我们可以选择优化SSH连接速度以及Ansible加速模块 [Ansible自动化管理工具特点] #轻量级,更新时,需要在操作机上进行一次更新即可 #采用S

简单聊一聊Ansible自动化运维

一.Ansible概述 Ansible是今年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误.Ansible通过本身集成的非常丰富的模块可以实现各种管理任务,其自带模块超过上千个.更为重要的是,它操作非常简单,即使小白也可以轻松上手,但它提供的功能又非常丰富,在运维领域,几乎可以做任何事. 1.Ansible特点 Ansible自2012年发布以来,很快在全球流行,其特点如下: Ansible基于Python开发,运维工程师对其二次

Ansible自动化运维(一)

一.ansible自动化运维 二.ansible安装 1.基本软件安装 (1)安装python-2.7.8 cd python-2.7.8 ./configure --prefix=/usr/local && make && make install #如果ansible找不到python头文件的话,将Pytho头文件复制到标准目录 cp -a /usr/local/include/python2.7/* /usr/local/include #修改/usr/bin/yum

Linux运维入门到高级全套系列PDF

Linux运维入门到高级全套系列PDF(转) [日期:2016-08-01] 来源:Linux社区  作者:Linux [字体:大 中 小] Linux 学习技巧 初学者可以自己安装虚拟机,然后把 Linux 常用命令例如 cd.ls.chmod.useradd.vi 等等多练习几十遍,把自己敲打命令的熟练程度提升上来. 然后根据文档搭建 Linux 下常见的各种服务  (DHCP. SAMBA. DNS.Apache.Mysql 等) ,遇到问题后可以在 google 搜索,搜索的时候多看几篇

基于开源打造智能云上自动运维

自动化能自动化的一切 然后介绍了使用Terraform和Packer开源工具完成云上自动运维的具体实现过程 云上自动化资源架构和变更实践 https://yq.aliyun.com/articles/218891?spm=5176.100239.blogcont159008.36.Vzs09S 如何用开源工具进行Multi-Cloud的自动化资源架构和变更? DevOps和基础设施自动化 据数据统计,在2015年DevOps的被采纳率是66%,而到了2016年就达到了74%,在这短短的一年间增加