ansible安装及使用

Posted 北极菜鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ansible安装及使用相关的知识,希望对你有一定的参考价值。

一、ansible介绍

1、ansible简介

      官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具。

  Ansible跟其他IT自动化技术的区别在于其关注点并非配置管理、应用部署或IT流程工作流,而是提供一个统一的界面来协调所有的IT自动化功能,因此Ansible的系统更加易用,部署更快。

  Ansible可以让用户避免编写脚本或代码来管理应用,同时还能搭建工作流实现IT任务的自动化执行。IT自动化可以降低技术门槛及对传统IT的依赖,从而加快项目的交付速度。

2、ansible优缺点

  优点:

  • 轻量级,他不需要去客户端安装agent,更新时,只需要在操作机上进行一次更新即可
  • 批量任务执行可以写成脚本,而且不用分发到远程就可以执行
  • 使用python编写的,维护更简单
  • 支持sudo

      缺点

  • 对于几千台、上万台机器的操作,还不清楚性能、效率情况如何,需要进一步了解。

3、ansible架构及工作原理

     andible基本架构如下图所示

 

  ansible core ansible 自身核心模块

  host inventory: 主机库,定义可管控的主机列表

  connection plugins: 连接插件,一般默认基于 ssh 协议连接

  modulescore modules ( 自带模块 ) custom modules ( 自定义模块 )

  playbooks :剧本,按照所设定编排的顺序执行完成安排任务 

 Ansible工作原理如下图:

 

  1、管理端支持local sshzeromq 三种方式连接被管理端,默认使用基于ssh的连接---这部分对应基本架构图中的连接模块;

  2、可以按应用类型等方式进行Host Inventory(主机群)分类,管理节点通过各类模块实现相应的操作---单个模块,单条命令的批量执行,我们可以称之为     ad-hoc

  3、管理节点可以通过playbooks 实现多个task的集合实现一类功能,如web服务的安装部署、数据库服务器的批量备份等。playbooks我们可以简单的理解为,系      统通过组合多条ad-hoc操作的配置文件 。

Ansible默认是通过SSH通道来管理的,也就是它所说的免客户端方式管理, 它底层是通过 paramiko 来实现的。  

ansible执行过程大体过程如下图,其中暖色调的代表已经模块化。

二、部署安装

名称

IP

操作系统

用途

ansible-server

192.168.95.10/24

CentOS7.1

管理端

client-1

192.168.95.11/24

CentOS7.1

 

client-2

192.168.95.12/24

CentOS7.1

 

 

 

 

 

 

 1、ansible安装方式有、源码、pip、yum。

 1.1 源码安装

      源码安装需要python2.6以上版本,其依赖模块paramikoPyYAMLJinja2httplib2simplejsonpycrypto模块,以上模块可以通过pipeasy_install 进行安装

 

   1.2pip安装

        pip是专门用来管理Python模块的工具,Ansible会将每次正式发布都更新到pip仓库中。所以通过pip安装或更新Ansible,会比较稳妥的拿到最新稳定版。

 1.3 yum安装

  1)安装epel源

yum install http://mirrors.163.com/centos/7.4.1708/extras/x86_64/Packages/epel-release-7-9.noarch.rpm

  2)查看epel源并安装ansible

[root@node2 ~]ll /etc/yum.repos.d/epel*

[root@node2 ~]yum install ansible -y

  3)查看ansible版本

ansible --version

2 ansible组成介绍

tree /etc/ansible/

/etc/ansible/

├── ansible.cfg  # ansible的配置文件

├── hosts  # ansible的主仓库 用来存储需要管理的远程主机的相关信息

└── roles

3、ansible七个命令

ansible 

常用参数:-m 模块

      -i PATH, --inventory=PATH 指定库存主机文件的路径,默认为/etc/ansible/hosts.

                       -a  (arguments) 命令行参数

 

 示例:ansible test1 -m copy -a "src=/tmp/test.txt dest=/tmp/test.txt "

ansible-doc

//列出所有已安装的模块

# ansible-doc  -l

//查看具体某模块的用法,这里如查看command模块

 

# ansible-doc -s command

absible-galaxy

ansible-galaxy 指令用于方便的从https://galaxy.ansible.com/ 站点下载第三方扩展模块,我们可以形象的理解其类似于centos下的yumpython下的pipeasy_install 。如下示例:

ansible-galaxy install aeriscloud.docker

 

ansible-link

ansible-lint是对playbook的语法进行检查的一个工具。用法是ansible-lint playbook.yml

 

ansible-playbook

 

该指令是使用最多的指令,其通过读取playbook 文件后,执行相应的动作。

 

ansible-pull

 

适用于以下场景:你有数量巨大的机器需要配置,即使使用非常高的线程还是要花费很多时间;你要在一个没有网络连接的机器上运行Anisble,比如在启动之后安装。

 

ansible-vault

 

注意:重点是ansibleansible-playbook

 

4、主机组(在hosts文件内配置)

[hangzhou]

host1

host2

[jiaxing]

host3

 

host4

5、ansible默认配置文件

 

Ansible默认安装好后有一个配置文件/etc/ansible/ansible.cfg

ansible简单使用

[root@test ansible]# ansible test1 -m ping -k

SSH password:

 

192.168.147.101 | FAILED => Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host\'s fingerprint to your known_hosts file to manage this host.

报错处理办法:

ansible.cfg配置文件中,也会找到如下部分:

# uncomment this to disable SSH key host checking

host_key_checking = False  

默认host_key_checking部分是注释的,通过找开该行的注释,同样也可以实现跳过 ssh 首次连接提示验证部分。

    可见采用密码方式比较麻烦,实际应用中采用ssh 互信方式。

 

配置ssh 互信时,只需要管理主机能ssh被管理机器不需要输入密码即可。

三、ansible常用模块

3.1、ping

ansible test1 -m ping

3.2、setuop

         setup模块,主要用于获取主机信息,在playbooks里经常会用到的一个参数gather_facts就与该模块相关。setup模块下经常使用的一个参数是filter参数,具体使用示例如下:

 #查看主机内存信息

[root@test ~]# ansible test1 -m setup -a \'filter=ansible_*_mb\'

 

#查看网卡信息

[root@test ~]# ansible test1 -m setup -a \'filter=ansible_eth0\'

#将所有主机的信息输入到/tmp/facts目录下,每台主机的信息输入到主机名文件中(/etc/ansible/hosts里的主机名)

[root@test ~]# ansible all -m setup --tree /tmp/facts

3.3 file 模块

file模块主要用于远程主机上的文件操作。

(group、mode、owner):定义文件/目录

path:定义文件路径

recurse:递归的设置,只对目录有效。

src:要被链接的源文件路径,只应用于state=link的情况

dest:被连接的路径,只应用于state=link的情况

state:directory:如果目录不存在,创建目录

file:即使文件不存在,也不会创建

link:创建软连接

hard:创建硬链接

touch:文件不存在,则会创建。如果存在则会,则更新最后修改的时间。

absent:删除目录、文件或取消链接。

 

示例:

 

[root@test ~]# ansible test1 -m file -a "src=/etc/fstab dest=/tmp/fstab state=link"

[root@test ~]# ansible test1 -m file -a "path=/tmp/fstab state=absent"

 

 [root@test ~]# ansible test1 -m file -a "path=/tmp/fstab state=touch"

 3.4 cop模块

     backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no

    content:用于替代"src",可以直接设定指定文件的值 

 directory_mode:递归的设定目录的权限,默认为系统默认权限

     force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes

     others:所有的file模块里的选项都可以在这里使用

     src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。 

示例:

[root@test ~]# ansible test1 -m copy -a "src=/tmp/test.txt dest=/tmp/test.txt owner=foo group=foo mode=0644"

3.5 command 模块

  • creates:一个文件名,当该文件存在,则该命令不执行
  • free_form:要执行的linux指令
  • chdir:在执行指令之前,先切换到该指定的目录
  • removes:一个文件名,当该文件不存在,则该选项不执行
  • executable:切换shell来执行指令,该执行路径必须是一个绝对路径

 

注意:command模块不是调用的shell的指令,所以没有bash的环境变量,也不能使用shell的一些操作方式,其他和shell没有区别

示例:[root@test ansible]# ansible test1 -a \'df -h\'

3.6 shell 模块

  用法其本和command一样,不过的是其是通过/bin/sh进行执行,所以shell 模块可以执行任何命令,就像在本机执行一样。

示例:[root@test ansible]# ansible test1 -m shell -a \'ps -ef | grep sshd\'

 

3.7 raw 模块

用法和shell 模块一样 ,其也可以执行任意命令,就像在本机执行一样

 

注:raw模块和comandshell 模块不同的是其没有chdircreatesremoves参数,chdir参数的作用就是先切到chdir指定的目录后,再执行后面的命令,这在后面很多模块里都会有该参数 。

 

3.8 script 模块

 

将管理端的shell 在被管理主机上执行,其原理是先将shell 复制到远程主机,再在远程主机上执行,原理类似于raw模块。

3.9 service 模块

 

  • arguments:给命令行提供一些选项
  • enabled:是否开机启动 yes|no
  • name:必选项,服务名称
  • pattern:定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行
  • runlevel:运行级别
  • sleep:如果执行了restarted,在则stopstart之间沉睡几秒钟
  • state:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded

 

 

示例:[root@test ansible]# ansible test1 -m service -a "name=httpd state=started enabled=yes"

3.10 cron 模块

  • backup:对远程主机上的原任务计划内容修改之前做备份
  • cron_file:如果指定该选项,则用该文件替换远程主机上的cron.d目录下的用户的任务计划
  • day:日(1-31**/2,……)
  • hour:小时(0-23**/2,……)  
  • minute:分钟(0-59**/2,……)
  • month:月(1-12**/2,……)
  • weekday:周(0-7*,……)
  • job:要执行的任务,依赖于state=present
  • name:该任务的描述
  • special_time:指定什么时候执行,参数:reboot,yearly,annually,monthly,weekly,daily,hourly
  • state:确认该任务计划是创建还是删除
  • user:以哪个用户的身份执行

示例:[root@test ansible]# ansible test1 -m cron -a \'name="check dirs" hour="5,2" job="ls -alh >/dev/null"\'

3.11 filesystem 模块

  • dev:目标块设备
  • force:在一个已有文件系统的设备上强制创建
  • fstype:文件系统的类型
  • opts:传递给mkfs命令的选项

3.12 yum 模块

 

  • config_fileyum的配置文件
  • disable_gpg_check:关闭gpg_check
  • disablerepo:不启用某个源
  • enablerepo:启用某个源
  • name:要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径
  • state:状态(presentabsentlatest

 

示例:[root@test ansible]# ansible test1 -m yum -a \'name=httpd state=latest\'

3.13 user和group 模块

user模块是请求的是useradd, userdel, usermod三个指令,goup模块请求的是groupadd, groupdel, groupmod 三个指令。

示例:

创建用户:[root@test ~]# ansible test1 -m user -a \'createhome=yes home=/home/user1 password=123456 name=user1 shell=/bin/bash state=present\'

 

 

删除用户:[root@test ~]# ansible test1 -m user -a \'remove=yes name=user1 state=absent\'

3.14 synchronize 模块

使用rsync同步文件

  • archive: 归档,相当于同时开启recursive(递归)linkspermstimesownergroup-D选项都为yes ,默认该项为开启
  • checksum: 跳过检测sum值,默认关闭
  • compress:是否开启压缩
  • copy_links:复制链接文件,默认为no ,注意后面还有一个links参数
  • delete: 删除不存在的文件,默认no
  • dest:目录路径
  • dest_port:默认目录主机上的端口 ,默认是22,走的ssh协议
  • dirs:传速目录不进行递归,默认为no,即进行目录递归
  • rsync_optsrsync参数部分
  • set_remote_user:主要用于/etc/ansible/hosts中定义或默认使用的用户与rsync使用的用户不同的情况
  • mode: pushpull 模块,push模的话,一般用于从本机向远程主机上传文件,pull 模式用于从远程主机上取文件

示例:[root@test ansible]# ansible test1 -m synchronize -a \'src=/tmp/helloworld dest=/var/www\'

3.15 mount 模块

  • dump
  • fstype:必选项,挂载文件的类型
  • name:必选项,挂载点
  • opts:传递给mount命令的参数
  • src:必选项,要挂载的文件
  • state:必选项
  • present:只处理fstab中的配置
  • absent:删除挂载点
  • mounted:自动创建挂载点并挂载之
  • umounted:卸载

示例:

#创建设备

[root@test ansible]# ansible test1 -a \'dd if=/dev/zero of=/disk.img bs=4k count=1024\'

#/dev/loop1关联

[root@test ansible]# ansible test1 -a \'losetup /dev/loop1 /disk.img\'

以上是关于ansible安装及使用的主要内容,如果未能解决你的问题,请参考以下文章

ansible自动化运维详解ansible的安装部署参数使用清单管理配置文件参数及用户级ansible操作环境构建

ansible自动化运维详解ansible的安装部署参数使用清单管理配置文件参数及用户级ansible操作环境构建

ansible自动化运维详解ansible的安装部署参数使用清单管理配置文件参数及用户级ansible操作环境构建

Ansible自动化运维工具Ansible的安装及使用

Ansible的安装配置及常用模块介绍

ansible安装及使用