自动化运维工具ansible详解-创新互联

 ll本文导航

成都创新互联服务项目包括福山网站建设、福山网站制作、福山网页制作以及福山网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,福山网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到福山省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

 · ansible的基础介绍

 · ansible的安装与配置

 · ansible的简单应用

 · YAML介绍及语法

 · ansible-playbooks(剧本)

ll 要求

掌握ansible基本应用与playbooks。

  ansible的基础介绍

1、ansible介绍

ansible是一款基于python开发的自动化运维工具,它结合了puppet、cfengine、func、chef、fabric等工具的优点,实现了批量系统配置、批量部署应用程序及批量执行命令。ansible本身没有批量部署、执行的能力,真正提供批量部署能力的是ansible所调用的特定模块,ansible本身也可以看成是一个组件,或者说它是一个框架。

2、ansible的逻辑架构

Ansible:ansible自身组件。

Host Invertory:主机库,定义被操作主机的列表。是一个配置文件,默认位置:/etc/ansible/hosts

Core Modules:ansible的核心模块、命令模块。

Custom Modules:自定义模块。

Connection Plugins:连接插接,默认基于ssh密钥连接。

Playbooks:剧本,按照顺序执行编排的任务。

自动化运维工具ansible详解

3、ansible的特性

1)学习曲线不陡峭。

2)no agents:无需在被管控主机上安装客户端程序。

3)no server:无服务器端,直接使用ansible相关命令即可。

4)modules any languages:基于模块工作,可使用任意语言开发模块。

5)YAML not code:可基于YAML语言自定义剧本(playbooks)按设置顺序执行任务。

6)ssh by default:默认基于ssh连接。

7)strong multi-tier solution:可实现多层级指挥。

4、ansible的优点

1)轻量级,无需在客户端安装程序,更新时,只需要在安装有ansible的操作主机上更新即可。

2)批量主机执行任务可写成脚本,且不需要分发到远程主机上执行,直接在操作主机上执行即可。

3)python语言开发,易于维护,ruby语法过于复杂。

3)支持sudo。

5、ansible任务执行流程

自动化运维工具ansible详解

  ansible的安装与配置

1、编译安装

解决依赖关系并编译安装ansible-1.5.4

# yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto # tar xf ansible-1.5.4.tar.gz # cd ansible-1.5.4 # python setup.py build # python setup.py install # mkdir /etc/ansible # cp -r examples/* /etc/ansible

2、rpm包安装

yum源安装,要配置epel。

# yum -y install ansible

3、配置文件

ansible的主配置文件:/etc/ansible/ansible.cfg

ansible的主机配置清单文件:/etc/ansible/hosts

自动化运维工具ansible详解 

组定义:直接在[ ]的下面添加主机名或IP地址

单独定义主机直接将主机名或IP地址在[ ]上方

4、配置ssh免密钥认证

#生成公钥文件 # ssh-keygen -t rsa -P '' #将公钥文件copy至各被控主机上 # scp ~/.ssh/id_rsa.pub root@node1 # scp ~/.ssh/id_rsa.pub root@node2

注意:配置完后,第一次运行需要输入密码,后续就不要了。

  ansible的简单应用

1、ansible的命令参数:

ansible的语法格式:

# ansible <host-pattern> [-m module_name] [-a args] [options] -v,–verbose     #详细模式,如果命令执行成功,输出详细的结果 (-vv –vvv -vvvv)   -i PATH,–inventory=PATH                           #指定 host 文件的路径,默认是在 /etc/ansible/hosts   -f NUM,–forks=NUM                                 #NUM 是指定一个整数,默认是 5 ,指定 fork 开启同步进程的个数。   -m NAME,–module-name=NAME                         #指定使用的 module 名称,默认是 command   -m DIRECTORY,–module-path=DIRECTORY               #指定 module 的目录来加载 module ,默认是/usr/share/ansible,   -a,MODULE_ARGS                                     #指定 module 模块的参数   -k,–ask-pass                                       #提示输入 ssh 的密码,而不是使用基于 ssh 的密钥认证   –sudo                                             #指定使用 sudo 获得 root 权限   -K,–ask-sudo-pass                                 #提示输入 sudo 密码,与 –sudo 一起使用   -u USERNAME,–user=USERNAME                        #指定移动端的执行用户   -C,–check                                         #测试此命令执行会改变什么内容,不会真正的去执行

2、ansible简单应用示例

自动化运维工具ansible详解

all:表示hosts列表中所有主机都执行,包括组

-m command:指定使用modules的名称为command,实际上默认就是command模块,所以这里不加command也可以。

-a 'uptime':指定模块的参数为uptime。

以上即指:在hosts中的所有主机清单中运行uptime命令。

注意:每个节点上任务执行完后都会在控制主机上返回信息;任务成功执行显示为绿色或者×××,任务执行失败显示为浅×××。

ansible-doc命令的使用:

#列出所有模块清单 # ansible-doc -l #列出指定模块的参数 # ansible-doc -s 'modules'

自动化运维工具ansible详解

自动化运维工具ansible详解

3、常用模块使用实例

1) setup

#查看远程主机上的基本信息 # ansible all -m setup

自动化运维工具ansible详解

2) ping

#测试远程主机是否在线,如果在线,则会返回“pong”字符串,乒乓球呢 # ansible all -m ping

自动化运维工具ansible详解

3) file

## 设置文件的属性

相关选项如下:

force:需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no

group:定义文件/目录的属组

mode:定义文件/目录的权限

owner:定义文件/目录的属主

path:必选项,定义文件/目录的路径

recurse:递归设置文件的属性,只对目录有效

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

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

state:

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

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

      link:创建软链接

      hard:创建硬链接

      touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间

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

#给远程主机上的指定文件创建符号链接 # ansible corosync -m file -a 'src=/etc/hosts dest=/tmp/hosts state=link'

自动化运维工具ansible详解

#查看corosync组的符号链接信息 # ansible corosync -m command -a 'ls -l /tmp/hosts'

自动化运维工具ansible详解

#接下来删除corosync组上所有主机上的/tmp/hosts符号链接 # ansible corosync -m file -a 'path=/tmp/hosts state=absent'

自动化运维工具ansible详解

#再次查看 # ansible corosync -m command -a 'ls -al /tmp/hosts'

自动化运维工具ansible详解

4) copy

#复制文件到远程主机

相关选项如下:

backup:复制一个文件时,先将源文件备份,其中备份文件包含源文件的时间,包含两个值:yes|no

content:当使用‘src’时,将文件的内容直接设置为指定的值;适用于简单的值;

dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录

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

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

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

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

5) shell

#切换到某个shell执行指定的指令,参数与command相同。

与command不同的是,此模块可以支持命令管道,同时还有另一个模块也具备此功能:raw

示例:

# 先在本地创建一个SHELL脚本

# vim /tmp/rocketzhang_test.sh#!/bin/sh date +%F_%H:%M:%S#chmod +x /tmp/rocketzhang_test.sh

# 将创建的脚本文件分发到远程主机

# ansible corosync -m copy -a 'src=/tmp/rocketzhang_test.sh dest=/tmp/rocketzhang_test.sh owner=root group=root mode=0755'

# 在远程主机上执行该脚本

# ansible corosync -m shell -a '/tmp/rocketzhang_test.sh'

6)更多模块

其他常用模块,比如:service、cron、yum、synchronize就不一一例举,可以结合自身的系统环境进行测试。

service:系统服务管理

cron:计划任务管理

yum:yum软件包安装管理

synchronize:使用rsync同步文件

user:系统用户管理

group:系统用户组管理

  YAML介绍及语法

1、YAML介绍

YAML是一个可读性高的用来表达资料序列的格式。YAML参考了其他多种语言,包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822等。Clark Evans在2001年在首次发表了这种语言,另外Ingy dt Net与Oren Ben-Kiki也是这语言的共同设计者。

YAML Ain't Markup Language,即YAML不是XML。不过,在开发的这种语言时,YAML的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。

更多的内容及规范参见http://www.yaml.org。

2、YAML特性

YAML的可读性好

YAML和脚本语言的交互性好

YAML使用实现语言的数据类型

YAML有一个一致的信息模型

YAML易于实现

YAML可以基于流来处理

YAML表达能力强,扩展性好

3、YAML语法

playbook是由一个或多个“play”组成的列表。play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲,所谓task无非是调用ansible的一个module。将多个play组织在一个playbook中,即可以让它们联同起来按事先编排的机制同唱一台大戏。下面是一个简单示例。

- hosts: webnodes

 vars:

  http_port: 80

  max_clients: 256

 remote_user: root

 tasks:

 - name: ensure apache is at the latest version

  yum: name=httpd state=latest

 - name: ensure apache is running

  service: name=httpd state=started

 handlers:

  - name: restart apache

   service: name=httpd state=restarted

YAML文件扩展名通常为.yaml,如example.yaml。

注意,代码的排版有严格要求,缩进为2个字符!序列项的 - 后必须跟一个空格!:后也要跟一个空格!

  ansible-playbooks(剧本)

playbook是由一个或多个“play”组成的列表。play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲,所谓task无非是调用ansible的一个module。将多个play组织在一个playbook中,即可以让它们联同起来按事先编排的机制同唱一台大戏。下面是一个简单示例。

- hosts: webnodes

 vars:

  http_port: 80

  max_clients: 256

 remote_user: root

 tasks:

 - name: ensure apache is at the latest version

  yum: name=httpd state=latest

 - name: ensure apache is running

  service: name=httpd state=started

 handlers:

  - name: restart apache

   service: name=httpd state=restarted

1、playbook基础组件

1) Hosts和Users

playbook中的每一个play的目的都是为了让某个或某些主机以某个指定的用户身份执行任务。hosts用于指定要执行指定任务的主机,其可以是一个或多个由冒号分隔主机组;remote_user则用于指定远程主机上的执行任务的用户。如上面示例中的

-hosts: webnodes

 remote_user: root

不过,remote_user也可用于各task中。也可以通过指定其通过sudo的方式在远程主机上执行任务,其可用于play全局或某任务;此外,甚至可以在sudo时使用sudo_user指定sudo时切换的用户。

- hosts: webnodes

remote_user: mageedu

tasks:

- name: test connection

ping:

remote_user: mageedu

sudo: yes

2) 任务列表和action

play的主体部分是task list。task list中的各任务按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个任务后再开始第二个。在运行自下而下某playbook时,如果中途发生错误,所有已执行任务都将回滚,因此,在更正playbook后重新执行一次即可。

task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量。模块执行是幂等的,这意味着多次执行是安全的,因为其结果均一致。

每个task都应该有其name,用于playbook的执行结果输出,建议其内容尽可能清晰地描述任务执行步骤。如果未提供name,则action的结果将用于输出。

定义task的可以使用“action: module options”或“module: options”的格式,推荐使用后者以实现向后兼容。如果action一行的内容过多,也中使用在行首使用几个空白字符进行换行。

tasks:

  - name: make sure apache is running

   service: name=httpd state=running

在众多模块中,只有command和shell模块仅需要给定一个列表而无需使用“key=value”格式,例如:

tasks:

  - name: disable selinux

   command: /sbin/setenforce 0

如果命令或脚本的退出码不为零,可以使用如下方式替代:

tasks:

 - name: run this command and ignore the result

   shell: /usr/bin/somecommand || /bin/true

或者使用ignore_errors来忽略错误信息:

tasks:

 - name: run this command and ignore the result

  shell: /usr/bin/somecommand

  ignore_errors: True

3) handlers

用于当关注的资源发生变化时采取一定的操作。

“notify”这个action可用于在每个play的最后被触发,这样可以避免多次有改变发生时每次都执行指定的操作,取而代之,仅在所有的变化发生完成后一次性地执行指定操作。在notify中列出的操作称为handler,也即notify中调用handler中定义的操作。

- name: template configuration file

 template: src=template.j2 dest=/etc/foo.conf

 notify:

 - restart memcached

 - restart apache

handler是task列表,这些task与前述的task并没有本质上的不同。

handlers:

  - name: restart memcached

   service:  name=memcached state=restarted

  - name: restart apache

    service: name=apache state=restarted

案例:

heartbeat.yaml

- hosts: hbhosts

 remote_user: root

 tasks:

  - name: ensure heartbeat latest version

   yum: name=heartbeat state=present

  - name: authkeys configure file

   copy: src=/root/hb_conf/authkeys dest=/etc/ha.d/authkeys

  - name: authkeys mode 600

   file: path=/etc/ha.d/authkeys mode=600

   notify:

    - restart heartbeat

  - name: ha.cf configure file

   copy: src=/root/hb_conf/ha.cf dest=/etc/ha.d/ha.cf

   notify:

    - restart heartbeat

 handlers:

  - name: restart heartbeat

   service: name=heartbeat state=restarted

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

本文题目:自动化运维工具ansible详解-创新互联
标题链接:https://www.cdcxhl.com/article18/ceehgp.html

成都网站建设公司_创新互联,为您提供企业建站网站设计搜索引擎优化电子商务外贸网站建设域名注册

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站建设网站维护公司