Ansible的部署安装(自动化运维)

一. ansible 简介

Ansible 是什么?

  ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
  ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远
程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。
Ansible 特点

部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
默认使用SSH协议对设备进行管理;
有大量常规运维操作模块,可实现日常绝大部分操作;
配置简单、功能强大、扩展性强;
支持API及自定义模块,可通过Python轻松扩展;
通过Playbooks来定制强大的配置、状态管理;
轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。

安装 Ansible

对于Ansible来说,实际批量化管理的操作都是基于 ssh 完成的。并且作为一个轻量级的自动化运维工具,它并不需要走一个C/S的模型,也不需要启动服务,仅需要在一台管理节点上面安装对应的软件即可直接使用。由于这个特性,Ansible就避免了像其他自动化运维工具那样(如Puppet),考虑升级版本造成的影响。目前只要机器上安装了 Python 2.6 以上版本,都可以运行Ansible。主机可以是 Red Hat, Debian, CentOS, OS X, BSD等系统,遗憾的是目前不支持Windows系统做控制主机。

二.部署Ansible

实验环境
xiaozhuang1  主        172.25.20.11
xiaozhuang2   被控制    172.25.20.12

下载Ansible并解决依赖性的相关软件
去这里 https://opsx.alibaba.com/ 下载

-rw-r--r-- 1 root root 7968876 8月  16 12:13 ansible-2.4.2.0-2.el7.noarch.rpm
-rw-r--r-- 1 root root   39444 8月  16 12:13 python2-jmespath-0.9.0-5.el7.noarch.rpm
-rw-r--r-- 1 root root  750776 8月  16 12:13 python2-passlib-1.7.0-4.el7.noarch.rpm
-rw-r--r-- 1 root root  480432 8月  16 12:13 python-crypto-2.6.1-1.el7.x86_64.rpm
-rw-r--r-- 1 root root   69940 8月  16 12:13 python-ecdsa-0.11-3.el7.noarch.rpm
-rw-r--r-- 1 root root  117360 8月  16 12:13 python-httplib2-0.9.2-1.el7.noarch.rpm
-rw-r--r-- 1 root root 1022088 8月  16 12:13 python-paramiko-1.15.1-1.el7.noarch.rpm
-rw-r--r-- 1 root root   20556 8月  16 12:13 sshpass-1.05-5.el7.x86_64.rpm

这里写图片描述

然后用yum install -y * 安装

配置ssh
因为Ansible是基于ssh来实现server的批量化处理
所以让xiaozhuang1和xiaozhuang2之间互相通信

[root@xiaozhuang1 .ssh]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
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:
a8:d0:06:4c:b9:f4:c4:62:b9:35:60:ea:25:e1:3f:23 root@xiaozhuang1
The key's randomart image is:
+--[ RSA 2048]----+
| .+=             |
|.=B =            |
|.=oO .           |
|. *o.  .         |
| E.+o . S        |
|  .oo.           |
|    .            |
|                 |
|                 |
+-----------------+
[root@xiaozhuang1 .ssh]# ls
id_rsa  id_rsa.pub  known_hosts
[root@xiaozhuang1 .ssh]# ssh xiaozhuang2    #用ssh免密连接xiaozhuang2
Last login: Thu Aug 16 13:28:42 2018 from 172.25.20.250
[root@xiaozhuang2 ~]# 登出
Connection to xiaozhuang2 closed.

ansible的配置,配置主目录/etc/ansible
ansible.cfg为主配置文件。hosts定义了主机组相关的内容。

[root@xiaozhuang1 ~]# cd /etc/ansible/
[root@xiaozhuang1 ansible]# ls
ansible.cfg  hosts  roles
[root@xiaozhuang1 ansible]# vim ansible.cfg 
[root@xiaozhuang1 ansible]# 

变更目录

126 private_key_file = /root/.ssh/id_rsa  #定义ssh信任的文件目录

定义inventory文件(定义主机组)

[root@xiaozhuang1 ansible]# vim /etc/ansible/hosts

# Ex 2: A collection of hosts belonging to the 'webservers' group

 [webservers]
## alpha.example.org
## beta.example.org
172.25.20.11
172.25.20.12

测试:

[root@xiaozhuang1 ansible]# ansible webserver -m command -a 'uptime'
172.25.20.12 | SUCCESS | rc=0 >>
 14:17:30 up  2:38,  2 users,  load average: 0.01, 0.02, 0.05

常用Ansible模块

Ansible可以通过模块的方式来完成一些原理的管理工作,可以通过ansible-doc -l查看到所有自带的模块。 ansible-doc -s+模块名 可以用来查看具体模块对应的用法。

[root@xiaozhuang1 ansible]# ansible-doc -l

这里写图片描述

[root@xiaozhuang1 ansible]# ansible-doc -s setup  #查看setup(设置)的用法

这里写图片描述
setup模块

用来收集远程主机的基本信息

[root@xiaozhuang1 ansible]# ansible webserver -m setup
172.25.20.12 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "172.25.20.12"
        ], 
        "ansible_all_ipv6_addresses": [
            "fe80::5054:ff:fe4f:9456"
        ], 
        "ansible_apparmor": {
            "status": "disabled"
        }, 
        "ansible_architecture": "x86_64", 
        "ansible_bios_date": "01/01/2011", 
        "ansible_bios_version": "0.5.1", 
        "ansible_cmdline": {
            "BOOT_IMAGE": "/vmlinuz-3.10.0-514.el7.x86_64", 
            "LANG": "zh_CN.UTF-8", 
            "crashkernel": "auto", 
            "quiet": true,
...........
...........
    "changed": false
}

ping模块

用来查看远程主机的运行状态

[root@xiaozhuang1 ansible]# ansible webserver -m ping
172.25.20.12 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

file模块

用来设置文件的属性,用-a指定选项。

file模块相关选项如下:

参数  
force       强制,有两个选项:yes或no
group       定义文件/目录的所属组
mode        定义文件/目录的权限
owner       定义文件/目录的属主
path        必选项,定义文件/目录的路径
src         被链接的源文件路径,只应用于state=link的情况
dest        被链接到的路径,只应用于state=link的情况
recurse     递归设置文件的属性,只对目录有效
state       定义文件/目录的参数,常用参数如下:
    directory:如果目录不存在,就创建目录
    file:即使文件不存在,也不会被创建
    link:创建软链接
    hard:创建硬链接
    touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
    absent:删除目录、文件或者取消链接文件
[root@xiaozhuang1 ansible]# ansible webserver -m file -a 'state=touch owner=xiaozhuang group=xiaozhuang mode=770 path=/home/mnt'
172.25.20.12 | SUCCESS => {
    "changed": true, 
    "dest": "/home/mnt", 
    "gid": 1000, 
    "group": "xiaozhuang", 
    "mode": "0770", 
    "owner": "xiaozhuang", 
    "size": 0, 
    "state": "file", 
    "uid": 1000
}
在xiaozhuang2上查看
[root@xiaozhuang2 mnt]# ll /home/mnt
-rwxrwx--- 1 xiaozhuang xiaozhuang 0 8月  16 14:44 /home/mnt

command模块

用以ssh的方式,在远程主机上执行命令

[root@xiaozhuang1 ansible]# ansible webserver -m command -a 'ls /root'
172.25.20.12 | SUCCESS | rc=0 >>
anaconda-ks.cfg
fping-3.10-1.el7.x86_64.rpm
iksemel-1.4-2.el7.centos.x86_64.rpm
php-bcmath-5.4.16-42.el7.x86_64.rpm
php-mbstring-5.4.16-42.el7.x86_64.rpm
tidb-latest-linux-amd64
tidb-latest-linux-amd64.sha256
tidb-latest-linux-amd64.tar.gz
zabbix-agent-3.4.6-1.el7.x86_64.rpm
zabbix-get-3.4.6-1.el7.x86_64.rpm
zabbix-server-mysql-3.4.6-1.el7.x86_64.rpm
zabbix-web-3.4.6-1.el7.noarch.rpm
zabbix-web-mysql-3.4.6-1.el7.noarch.rpm

这里写图片描述
在xiaozhuang2上
这里写图片描述

copy模块

将对应的文件复制至远程主机

参数              说明
backup              将源文件备份。
dest                必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
directory_mode      递归设定目录的权限,默认为系统默认权限
force               如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
src                 被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用“/”来结尾,则只复制目录里的内容,如果没有使用“/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
[root@xiaozhuang1 ansible]# ansible webserver -m copy -a 'dest=/mnt src=/mnt/'
172.25.20.12 | SUCCESS => {
    "changed": false, 
    "dest": "/mnt/", 
    "src": "/mnt/"
}

更多模块

ansible-doc -l可以罗列ansible所有模块名称

ansible-doc -s 模块名,可以用来查看对应模块的实际用法。

 

测试是否能通

运行脚本

进入安装路径,编辑hosts文件

vim hosts

Ansible的部署安装(自动化运维)_第1张图片

 

 

检查能否ping得通副服务器

ansible webservers -m ping

 

把文件复制到副服务器上

ansible webservers -m copy -a 'src=/etc/issue dest=/tmp/issu.txt

mode=600'

 

你可能感兴趣的:(devops)