ANSIBLE自动化运维工具的安装与使用

ANSIBLE自动化运维工具的安装与使用_第1张图片

一 ansible介绍

1.1 ansible

ansible是个什么东西呢?基于 Python paramiko 开发,分布式,无需客户端,轻量级,配置语法使用 YMAL 及 Jinja2模板语言,更强的远程命令执行操作。这个工具的目标有这么几项:
自动化部署APP;自动化管理配置项;
自动化的持续交互;
自动化的(AWS)云服务管理。
所有的这几个目标从本质上来说都是在一个台或者几台服务器上,执行一系列的命令而已。
通俗的说就是批量的在远程服务器上执行命令 。

当然,最主要的是它是基于 paramiko 开发的。
这个paramiko是什么呢?它是一个纯Python实现的ssh协议库。
因此fabric和ansible还有一个共同点就是不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。

1.2 ansible特点

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

• ansible提供的框架

  1. 连接插件connection plugins:负责和被监控端实现通信。
  2. host inventory:指定操作的主机,是一个配置文件里面定义监控的主机。
  3. 各种模块核心模块、command模块、自定义模块。
  4. 借助于插件完成记录日志邮件等功能。
  5. playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

二 ansible安装与使用

2.1. 安装方法:

利用yum 安装ansible,要求系统的python要是2.6以上
在这里插入图片描述
安装ansible1.1

2.2 开始安装:

需要在ansible服务器上安装一下epel外部源,可以使用阿里云的源:
更新源的方法:

  1. 首先卸载以前装的epel 以免影响
    rpm -e epel-release
  2. 下载阿里提供的epel
    #cd /etc/yum.repos.d/
    #wget -P http://mirrors.aliyun.com/repo/epel-6.repo
  3. #yum clean all
  4. #yum makecache

好了,其实到这里,就已经更新完毕了。

如果想全部改成阿里云的源,可以按照下面的方法进行。进行前请先将自己的源做一下备份。

. rm -rf /etc/yum.repos.d/*    (执行此操作的时候记得事先装好wget    不然 你就得挂载光盘用rpm装wget了。)
 wget -P  http://mirrors.aliyun.com/repo/epel-6.repo http://mirrors.aliyun.com/repo/Centos-6.repo

这个时候,执行 yum repolist的结果如下

[root@zhang ~]# yum repolist
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
  

2.3 yum安装ansible:

   yum  install  -y  ansible

三 ansible和主机之间的配置

3.1 第一种:使用ssh免秘钥的方式

执行ssh-keygen -t rsa  

服务器的~/.ssh/id_rsa.pub追加进~/.ssh/authorized_keys 都追加进去
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys  

ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.80.129

如果ssh的端口不是22,可用下面命令
ssh-copy-id -i ~/.ssh/id_rsa.pub "-p 23 jifeng@jifeng03"  


1、创建公钥
	[root@jacken ~]# ssh-keygen -t rsa
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:
64:f3:67:a7:8e:11:d8:b1:fc:7d:34:f4:57:0d:e3:86 root@jacken
The key's randomart image is:
+--[ RSA 2048]----+
|              o  |
|             o o.|
|        + . E o.o|
|       o * o .. o|
|        S * o ..+|
|           = + .o|
|          . o . .|
|           +   . |
|          . .    |
+-----------------+
[root@jacken ~]#
2、复制公钥到服务器并被信任
	[root@jacken ~]# ssh-copy-id [email protected]
[email protected]'s password: 
Now try logging into the machine, with "ssh '[email protected]'", and check in:
  .ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.

 如下:
 ssh ceshi@192.168.80.129


说明  ssh免密码可以正常使用。

Ansible all -m ping 

3.2 第二种: 通过密码登陆的方式

【本身是需要登陆普通账号,不可以直接登陆root账号,而且同时呢,普通账号 需要有sudo的权限】

我们需要在 ansible的hosts里面 添加
在这里插入图片描述
添加的形式和上面格式 一致

备注:【当然也可以不填写密码,之后手动再次输入密码】

四 主要组成部分:

4.1 主体部分

 ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置 文件,由Ansible顺序依次执行,通常是JSON格式的YML文件 
- INVENTORY:Ansible管理主机的清单/etc/anaible/hosts 
- MODULES:Ansible执行命令的功能模块,多数为内置核心模块,也可自定义 - - PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插 件等,该功能不常用 
- API:供第三方程序调用的应用程序编程接口
 - ANSIBLE:组合INVENTORY、API、MODULES、PLUGINS的绿框,可以理解 为是ansible命令工具,其为核心执行工具 

4.2 Ansible命令执行来源:

USER,普通用户,即SYSTEM ADMINISTRATOR 
CMDB(配置管理数据库) API 调用 
PUBLIC/PRIVATE CLOUD API调用 
USER-> Ansible Playbook -> Ansibile
利用ansible实现管理的方式: 
Ad-Hoc 即ansible命令,主要用于临时命令使用场景 
Ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有前期 的规划过程 

4.3 Ansible-playbook(剧本)执行过程

将已有编排好的任务集写入Ansible-Playbook 
通过ansible-playbook命令分拆任务集至逐条ansible命令,按预定规则逐 条执行 Ansible主要操作对象 
 HOSTS主机 
 NETWORKING网络设备 

注意事项 
 执行ansible的主机一般称为主控端,中控,master或堡垒机 
 主控端Python版本需要2.6或以上 
 被控端Python版本小于2.4需要安装python-simplejson 
 被控端如开启SELinux需要安装libselinux-python 
 windows不能做为主控端 

4.4 配置文件

ANSIBLE自动化运维工具的安装与使用_第2张图片

4.5 Inventory 主机清单:

ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以 在inventory file中将其分组命名
默认的inventory file为/etc/ansible/hosts
inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成
inventory文件遵循INI文件风格,中括号中的字符为组名。可以将同一个主机 同时归并到多个不同的组中;此外,当如若目标主机使用了非默认的SSH端口, 还可以在主机名称之后使用冒号加端口号来标明

[webservers] 
 www1.test.com:3333
 www2.test.com
[dbservers]
 db1.test.com  
  还可以使用列表的方式标识各主机 
 示例: 
[websrvs]
 www[01:100].example.com 

4.5.1 主配置文件的配置

Ansible 配置文件/etc/ansible/ansible.cfg (一般保持默认) 
 [defaults] 
#inventory      = /etc/ansible/hosts  # 主机列表配置文件 
#library  = /usr/share/my_modules/ # 库文件存放目录  
#remote_tmp  = $HOME/.ansible/tmp  #临时py命令文件存放在远程主机目录 
#local_tmp      = $HOME/.ansible/tmp # 本机的临时命令执行目录 
#forks          = 5    # 默认并发数
#sudo_user      = root   # 默认sudo 用户 
#ask_sudo_pass = True  #每次执行ansible命令是否询问ssh密码 
#ask_pass      = True    #remote_port    = 22 
#host_key_checking = False  # 检查对应服务器的host_key,建议取消注释 #log_path=/var/log/ansible.log  #日志文件 
#module_name = command   #默认模块 

五 Ansible系列命令

具体的命令有:
ansible ansible-doc ansible-playbook ansible-vault ansible-console ansible-galaxy ansible-pull

5.1 ansible-doc: 显示模块帮助

ansible-doc [options] [module...]  
  -a   显示所有模块的文档   
  -l, --list         列出可用模块   
  -s, --snippet显示指定模块的playbook片段 
  示例:
  ansible-doc -l  列出所有模块 
 ansible-doc ping  查看指定模块帮助用法
  ansible-doc -s  ping 查看指定模块帮助用法 

5.2 ansible命令

ansible -pattern> [-m module_name] [-a args]  
**--version    显示版本        
 -m module     指定模块,默认为command  
 -v    详细过程 –vv  -vvv更详细  
 --list-hosts    显示主机列表,可简写 --list          
 -k, --ask-pass       提示输入ssh连接密码,默认Key验证 
            -C, --check     检查,并不执行        
            -T, --timeout=TIMEOUT 执行命令的超时时间,默认10s  -u, --user=REMOTE_USER 执行远程执行的用户  
            -b, --become   代替旧版的sudo 切换 
             --become-user=USERNAME  指定sudo的runas用户,默认为root  
            -K, --ask-become-pass  提示输入sudo时的口令** 

5.3 host-pattern

ANSIBLE自动化运维工具的安装与使用_第3张图片

5.3.1 逻辑表达

ANSIBLE自动化运维工具的安装与使用_第4张图片

5.4 ansible常用模块

5.4.1 Copy:从主控端复制文件到远程主机

ansible srv -m copy -a “src=/root/f1.sh dest=/tmp/f2.sh    owner=wang  mode=600 backup=yes”       如目标存在,默认覆盖,此处指定先备份 
ansible srv -m copy -a “content=‘test content\n’ dest=/tmp/f1.txt”  指定内容,直接生成目标文件 

5.4.2 Fetch:从远程主机提取文件至主控端

和copy相反,目录可先tar 
ansible srv -m fetch -a ‘src=/root/a.sh dest=/data/scripts’ 

5.4.3 File:设置文件属性

 ansible srv -m file -a "path=/root/a.sh owner=wang mode=755“ 
ansible web  -m file  -a ‘src=/app/testfile  dest=/app/testfile-link state=link’ 

5.4.4 Hostname:管理主机名

ansible node1 -m hostname -a “name=websrv”  

5.4.5 Cron:计划任务

支持时间:minute,hour,day,month,weekday
 ansible srv -m cron -a “minute=*/5 job=‘/usr/sbin/ntpdate 172.16.0.1 &>/dev/null’ name=Synctime” 创建任务 
 ansible srv -m cron -a ‘state=absent name=Synctime’  删除任务 

5.4.6 Yum:管理包

 ansible srv -m yum -a ‘name=httpd state=present’  安装 
 ansible srv -m yum -a ‘name=httpd state=absent’  删除 

5.4.7Service:管理服务

 ansible srv -m service -a 'name=httpd state=stopped' 

5.4.8User:管理用户

ansible srv -m user -a 'name=user1 comment=“test user” uid=2048 home=/app/user1 group=root‘ 

5.4.9 Group:管理组

ansible  srv -m group -a "name=testgroup system=yes“ 

六 playbooks

playbooks是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部署复杂应用程序的基础。Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式。值得注意的是playbook是通过YAML格式来进行描述定义的。

核心元素
Tasks:任务,由模板定义的操作列表
Variables:变量
Templates:模板,即使用模板语法的文件
Handlers:处理器 ,当某条件满足时,触发执行的操作
Roles:角色

hosts和users介绍
在playbook中的每一个play都可以选择在哪些服务器和以什么用户完成,hosts一行可以是一个主机组、主机、多个主机,中间以冒号分隔,
可使用通配模式。其中remote_user表示执行的用户账号。

6.2

运行playbook的方式 ansible-playbook … [options]
常见选项
–check -C 只检测可能会发生的改变,但不真正执行操作
–list-hosts 列出运行任务的主机 --list-tags 列出tag
–list-tasks 列出task --limit 主机列表 只针对主机列表中的主机执行
-v -vv -vvv 显示过程
示例 ansible-playbook file.yml --check 只检测
ansible-playbook install_httpd.yml
ansible-playbook install_httpd.yml --limit webserver

例子:

install_httpd.yml

- hosts: all
   tasks:
    - name: "安装Apache"       
     yum:  name=httpd    
    - name: "复制配置文件"       
     copy:  src=/www/httpd.conf dest=/etc/httpd/conf/    
    - name: "复制配置文件"       
     copy:  src=/www/vhosts.conf dest=/etc/httpd/	conf.cd/    
    - name: "启动Apache,并设置开机启动"       
     service: name=httpd state=started enabled=yes

你可能感兴趣的:(Linux运维)