ansible初步了解

简介:

       运维自动化已经发展到了完善阶段,作为新时代的运维人员必须要掌握自动化运维的基本技能,并且运维正朝着工具制造的阶段发展,原本运维需要一些命令知识,目前一些大公司已经开始实现一键完成产品上线。原本的7x24已经变成了运维工具持续监控,出了问题实时向运维人员通知,同时需要一点人员协助机器监控。

       自动化运维经历了4个阶段:人工,这个阶段基本上是全部需要到机器上一步步操作;脚本,使用计划任务完成一些重复性工作;工具,这个阶段一个人可以管理大量的机器,常见的工具:puppetsaltstackansible;平台化,这时运维人员已经深入研究操作系统的很多组件的代码并且进行优化,开发运维工具实现流程化标准化。

ansible基本工作流程

       这里我选择ansible主要是因为:入门简单,基于yaml定义脚本没有学习难度,无需客户端,基于ssh安全通信。当然ansible也有自己的缺点,在超大规模管理服务器的时候,并发性能远不如puppetsaltstack。下图是ansible工作原理图

wKioL1hkdT-hvk8DAAHnLiIHU-E931.png

ANSIBLE PLAYBOOK是任务集,类似于脚本,由ansible调度大量主机执行其中的任务,调用直接使用ansible-playbook命令

INVENTORY是被管理主机的清单,由/etc/ansible/hosts中定义

MODULESAnsible执行命令的功能模块,多数为内置的核心模块,也可自定义,使用ansible-glaxy加载别人定义的模块

API PLUGINS是第三方提供的管理接口和模块功能的补充,基本上没用过,使用需要一定的技术门槛,

USER直接和ansible交互直接使用ansible命令

ansible-doc # 查看模块文档

       -l # 列出所以模块

       -s MODULESNAME # 查看某个模块的使用方法

ansible-vault # 加密文件

ansible-consle #交互式接口

配置文件

       主配置文件/etc/ansible/ansible.cfg,基本上不用更改

1[defaults]

2[privilege_escalation]

3[paramiko_connection]

4[ssh_connection]

5[accelerate]

6[selinux]

7[colors]

/etc/ansible/hosts文件定义INVENTORY

[GROUPNAME]

ip|hostname

。。。

ansible常用模块

       command# 默认使用这个模块,执行shell命令,不支持|<>等等

       shell# shell模块,比command模块好用很多支持|<>等等

copy # 复制文件到远程主机

fatch # 下载远程主机的文件

       file# 更改远程主机文件

       hostname# 更改远程主机名字

user # 给远程主机添加用户

group # 给远程主机添加组

       cron# 计划任务

       yum# 安装软件

       service# 管理服务

ansible 变量

1定义

1.ansible setup中已经定义了很多变量可以直接引用

2.自定义在hosts文件中的组如:

[svr1:vars]
http_port=808

3.定义在主机后的变量

[go]

172.16.29.2 http_port=8080 hname=www120

4.定义在playbookvars

 

5.命令行指定变量

Ansible-playbook –e 调用

2引用` NAME `

       引用的时候一定要注意,引用前有等号一定不要加空格,这个错误犯了很难发现。

ansible playbookyaml格式

先来一个案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
[root@centos7 ~] # vim /etc/ansible/hosts
#定义一个组,给组内添加两个主机
[go]
172.16.29.10
172.16.29.20
[root@centos7 ansible] # vim httpd.yml
---
# 在哪个主机以哪些用户执行命令
- hosts: go
  remote_user: root
  tasks:
# 使用item迭代创建组
     -name: add group nginx
      user: name={{ item }} state=present
      with_items:
      - nginx
      - nginx1
# item引用字典创建用户
     -name: add user nginx
      user: name={{ item.name }} state=present group={{ item.group }}
       with_items:
      - { name:  'nginx' ,group:  'nginx'  }
      - { name:  'nginx1' ,group:  'nginx1'  }
# 安装nginx程序
     -name:  install  nginx
      yum: name=nginx state=present
# when判断
     -name:  install  conf
      template: src=nginx.conf.j2 dest= /etc/nginx/nginx .conf
      when: ansible_distribution_major_version ==  "7"
# notify只调用handlers,并插入钩子tags,可以只执行这个name中的命令
     -name: start nginx
      tags: start
      service: name=nginx state=started
      notify:
        - check nginx
# 定义变量
  vars:
     -vhost:
      - { listen: 80,servername:  'name'  }
      - { listen: 88,servername:  'name1'  }
     - hostname : name1
# 可选的执行命令
  handlers:
     -name: check nginx
      shell: ss -tnl| grep  '\<80\>'
[root@centos7 ~] # cp /etc/nginx/nginx.confansible/nginx.conf.j2
[root@centos7 ~] # vim nginx.conf.j2
# 算术运算和ansible setup变量引用
worker_processes {{ansible_processor_vcpus+1 }};
# for循环
{%  for  vhosts  in  vhost %}
server {
listen {{ vhosts.listen }};
# if判断
{%  if  vhosts.servername is defined %}
server_name {{ vhosts.servername }};
{% endif %}
}
{% endfor %}

这个案例我就不总结了,因为第6节就是对这个playbook的拆分和深入理解。

以下是一些很无聊的规范,但是有助于我们写playbook脚本

1)首先需要以“---”3个减号)开始,且需顶行首写。

2)次行开始正常写Playbook的内容,但笔者一般建议写明该Playbook的功能。

3)使用#号注释代码。

4)缩进必须是统一的,不能空格和tab混用。

5)缩进的级别也必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别是通过缩进结合换行来实现的。

6YAML文件内容和Linux系统大小写判断方式保持一致,是区别大小写的,k/v的值均需大小写敏感。

7k/v的值可同行写也可换行写。同行使用:分隔,换行写需要以-分隔。

8)一个完整的代码块功能需最少元素需包括 name: task

9)一个name只能包括一个task

ansible roles

       模板目录结构如下,一定要遵从规范,否则命令很难执行成功。

roles # roles目录

       project1# 具体roles的名称

              tasks# roles中普通操作命令,对应playbook中的tasks内各种name

templters # roles中的模板操作命令,对应playbook中的tasks内的templters命令

vars # roles中的变量,对应playbook中的vars

handles # roles中的可选程序,对应playbook中的handlers

files # 模板文件的存放位置

default # 默认属性

mate # 其它

       project2# 具体roles的名称

。。。

       每个目录的的常用用法可以参考第五节的案例,常用的用法基本上都让我实现了个遍:)

总结

       ansible是一个非常重要的工具日常使用最多的工具,很多参数很难一次记住,因此熟练查看文档ansible-doc就变的尤为重要,并且ansible的文档可以说是最好的。有一个原则能用ansible模块解决的问题坚决不用shell模块。







      本文转自Ailu0li 51CTO博客,原文链接:http://blog.51cto.com/oldking/1887180,如需转载请自行联系原作者




相关文章
|
4月前
|
Kubernetes Docker 容器
ansible汇总(2)
playbook(剧本): 是ansible用于配置,部署,和管理被控节点的剧本。用于ansible操作的编排。 参考:https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html 使用的格式为yaml格式(saltstack,elk,docker,docker-compose,kubernetes等也都会用到yaml格式)
30 0
|
7月前
|
运维 网络安全 Python
ansible-1
ansible-1
26 0
|
8月前
|
网络安全 开发工具
ansible-2
ansible-2
42 1
|
8月前
|
XML 关系型数据库 应用服务中间件
|
8月前
|
安全 Shell Linux
|
9月前
|
存储 安全 Linux
ansible 初识
Ansible是一个开源配置管理工具,可以使用它来自动化任务,部署应用程序实现IT基础架构。Ansible可以用来自动化日常任务,比如,服务器的初始化配置、安全基线配置、更新和打补丁系统,安装软件包等。
81 1
|
运维 网络安全 开发工具
ansible使用
ansible使用
186 0
|
测试技术 Go Apache
|
存储 Ubuntu Shell
|
关系型数据库 Linux Shell

热门文章

最新文章