ansible(一)了解及使用

ansible(一)了解及使用

官网
中文文档

介绍

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

Ansible是一个IT自动化工具。它可以配置系统、部署软件和编排更高级的It任务,如连续部署或零停机滚动更新。
Ansible的主要目标是简单易用。它还非常注重安全性和可靠性,具有最少的移动部件、使用OpenSSH进行传输(使用其他传输和拉模式作为替代),以及一种围绕可审计性而设计的语言,甚至是那些不熟悉该程序的人。

特点

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

在这里插入图片描述上图对应的模块功能如下:

  • Ansible:Ansible核心程序。
  • HostInventory:记录由Ansible管理的主机信息,包括端口、密码、ip等。
  • Playbooks:“剧本”YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。
  • CoreModules:核心模块,主要操作是通过调用核心模块来完成管理任务。
  • CustomModules:自定义模块,完成核心模块无法完成的功能,支持多种语言。
  • ConnectionPlugins:连接插件,Ansible和Host通信使用

ansible生成的主要文件

/etc/ansible
/etc/ansible/ansible.cfg   #配置文件
/etc/ansible/hosts   #主机库(host inventory)管理被监控的主机
/usr/bin/ansible   #主程序
/usr/bin/ansible-doc   #帮助文档
/usr/bin/ansible-playbook   #“剧本”YAML格式文件

ansible 命令集

/usr/bin/ansible  Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行
/usr/bin/ansible-doc   Ansible 模块功能查看工具
/usr/bin/ansible-galaxy  下载/上传优秀代码或Roles模块 的官网平台,基于网络的
/usr/bin/ansible-playbook  Ansible 定制自动化的任务集编排工具
/usr/bin/ansible-pull  Ansible远程执行命令的工具,拉取配置而非推送配置(使用较少,海量机器时使用,对运维的架构能力要求较高)
/usr/bin/ansible-vault  Ansible 文件加密工具
/usr/bin/ansible-console  Ansible基于Linux Consoble界面可与用户交互的命令执行工具

安装

yum命令安装
我们需要先安装一个epel-release包,然后再安装我们的 ansible 即可。

yum install epel-release -y
yum install ansible –y

注意:ansible配置文件查找顺序

ansible与我们其他的服务在这一点上有很大不同,这里的配置文件查找是从多个地方找的,顺序如下:
检查环境变量ANSIBLE_CONFIG指向的路径文件(export ANSIBLE_CONFIG=/etc/ansible.cfg);
~/.ansible.cfg,检查当前目录下的ansible.cfg配置文件;
/etc/ansible.cfg检查etc目录的配置文件。

做ansible主机与其他各个节点的免密,以便使用

使用

新建用户devops
做免密并且给这个用户root权限(visudo)
结果:绿不变,黄变,红色报错

命令使用(shell)

在/etc/ansible/hosts文件中添加ansible要管理的node ip

eg:
node1
172.25.70.11
node2
172.25.70.12
ansible node1 -m ping  -k		##做ping测试

这部分还有很多参数去了解使用

剧本使用(playbook)

这的前提是免密已经做好了 方便操作

cd /home/devops
mkdir ansible
vim ansible.cfg
vim hosts
eg:httpd.yml
---					##固定格式
 - hosts: web		##操作node主机
   tasks:			##任务
    - name: yum nginx
      yum:
        name: httpd      
        state: present
     
	- name: config httpd
	  copy:
        src: httpd.conf
        dest: /etc/httpd/conf.d/httpd.conf
      notify: restart httpd			##触发器
     
   handlers:						##编写触发器
     - name: restart httpd
       service:
         name: httpd
         state: restarted
---      ##这是一个雷打不动的开头
-        ##每个-下面表示是这个-的范围,每一个顶级的-表示一个play,每个play中必须包含host task通过key-value来表示值,通过: 来分割键值
 
playbook的语法

循环

vi /etc/ansible/while.yml 
 
---
- hosts: testhost
  user: root
  tasks:
    - name: change mode for files
      file: path=/tmp/{{ item }} mode=600
      loop:
        - 1.txt
        - 2.txt
        - 3.txt
 ##说明: with_items为循环的对象
 ##执行 ansible-playbook while.yml

判断

vi /etc/ansible/when.yml 
 
---
- hosts: testhost
  user: root
  gather_facts: True
  tasks:
    - name: use when
      shell: touch /tmp/when.txt
      when: ansible_ens33.ipv4.address == "172.7.15.114" 	##当ip等于172.7.15.114时执行操作
 ##说明:ansible aming-02 -m setup 可以查看到所有的facter信息
 ##这里还有block等语法

触发

执行task之后,服务器发生变化之后要执行的一些操作,比如我们修改了配置文件后,需要重启一下服务 
vi /etc/ansible/handlers.yml
 
---
- name: handlers test
  hosts: shuai-02
  user: root
  tasks:
    - name: copy file
      copy: src=/etc/passwd dest=/tmp/aaa.txt
      notify: test handlers
  handlers:
    - name: test handlers
      shell: echo "111111" >> /tmp/aaa.txt
 说明,只有copy模块真正执行后,才会去调用下面的handlers相关的操作。
 也就是说如果1.txt和2.txt内容是一样的,并不会去执行handlers里面的shell相关命令。 
 这种比较适合配置文件发生更改后,重启服务的操作。

比如我们在用playbook部署nginx时
在这里插入图片描述

变量

角色使用(role)

在/home/devops/ansible下
mkdir roles
cd roles
ansible-galaxy init nginx		##自动创建一个nginx的角色目录
tree .
roles/
├── nginx
│   ├── defaults				##默认变量存放目录(优先级最低)
│   │   └── main.yml
│   ├── files					##copy模块使用的静态变量文件存放地
│   ├── handlers
│   │   └── main.yml		##触发器放置地
│   ├── meta
│   │   └── main.yml		##文件包含Role元数据,包含的依赖关系
│   ├── tasks
│   │   └── main.yml		##该角色的任务
│   ├── templates   		##template模块用的动态文件存放地
│   └── vars
│       └── main.yml		##变量

##再通过使用调用模板再yaml文件中 使用角色

加密(Vault)

ansible-vault create vars/main.yml
Vault Password:

ansible-vault encrypt roles/users/vars/main.yml		##加密文件
create 	##创建一个新文件并进行加密
decrypt ##从加密文件创建明文文件
edit 	##编辑已经存在的加密文件
encrypt ##加密现有的纯文本文件
rekey 	##在加密文件中设置新密码

参考博客
资料网站

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值