当时方位: 主页 > Linux学院 > 企业运用 > 运用 > Ansible一个IT自动化东西,用来配备体系布置软件

Ansible一个IT自动化东西,用来配备体系布置软件

2014-08-01 09:20 来历:IBM 作者:李恒 人气指数: 我要谈论

Ansible 是经过 Python 言语开发。当时运用 Ansible 的用户有:evernote、rackspace、NASA、Atlassian、twitter 等。

Ansible 的方针是操作的最简略和最易用。它也激烈重视安全和可靠性、精简性、OpenSSH 传输的运用(具有一个加快的套接字形式和推形式作为代替)以及语法的易读性。

Ansible 可以办理小型的网络环境,也可以用于办理上千人的企业级网络环境,它都可以挥洒自如的完结您所交待的使命。

Ansible 办理机器上不需求装置署理客户端程序。这意味着 Ansible 办理作业中不会有晋级长途署理客户端程序或不能办理体系的问题。Ansible 借助于开源组件 OpenSSH 来与长途机器通讯。Ansible 选用分散性的办理,它依赖于您的体系凭证来操控和拜访机器。当然,假如您需求,您也可以运用 Kerberos、LDAP 以及其它的集中式验证办理体系来容易的完结衔接。

装置

Ansible 默许经过 SSH 协议办理机器。在 Ansible 装置完后,不需求为它配备数据库,Ansible 不会以 daemons 办法来发动或坚持运转状况。您仅仅需求装置 Ansible 在一台机器上,它就可以像中心相同办理一切的长途机器,为了便于区别,笔者在本文中将装置 Ansible 的机器称为中心操控,将被 Ansible 的机器统称为长途。

该怎样挑选 Ansible 的装置版别

假如您运用的是 RedHat Enterprise Linux(TM),CentOS,Fedora,Debian 或许 Ubuntu,而且您想要运用 Ansible 的终究版别的话,激烈引荐您运用 OS 的包办理器装置 Ansible ,例如 CentOS 的 YUM ,Debian 的 apt。假如您运用的是其它体系,那么引荐您运用"PIP" 。pip 是一个 Python 包装置和办理东西,功用相似 Node.js 的 npm、Ruby 的 gem。经过 pip 可以十分便利对 Python 包进行装置、晋级、删去等办理操作。前面介绍过 Ansible 是运用 Python 开发,Ansible 也可以经过 pip 装置。在稍后的"装置中心操控办理"一节会介绍怎么经过 pip 装置 Ansible 。如想了解 pip 的更多概况,请拜访 https://pypi.Python.org/pypi/pip/

装置 Ansibl 中心操控需求:

当时 Ansible 可以运转在装置了 Python2.6 的任何机器上(暂不支撑 Windows 机器做中心操控),这包含 RedHat、Debian、CentOS、OS X、BSDS 等等。

被办理节点需求

在被办理节点上,需求装置 Python2.4 或更高的 Python 版别,假如在长途机器上运转的 Python 小于 Python2.5 的话,您将需求装置 Python-simplejson 。假如在长途机器的启用了 SELinux,您还需求装置 libselinux-Python 。

装置中心操控办理

笔者运用的操作体系是 CentOS Linux 6.4 ,笔者在这儿解说经过 RPM 包与 PIP 的办法装置 Ansible。读者可以依据自己的喜爱挑选自己喜爱的装置办法。更多的装置办法读者可以参阅 Ansible 的官方文档了解。

YUM 装置

Ansible 的 RPM 包现在是可以经过运用 EPEL 6 YUM 资源库获取并装置。首要请确保您的机器上是否现已装置了 epel6,经过 rpm 指令查询

rpm –qa |  grep epel

假如没有装置,那么现在就开端装置

rpm –ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

装置 Ansible

yum –y install ansible

pip 装置

在运用 pip 之前,请确保您的体系现已装置 Python 的 setuptools 包

yum –y install Python-setuptools

装置 pip

easy_install pip

经过 pip 装置 Ansible

pip install ansbile

怎么样?经过 pip 装置 Ansible 是不是很简略,只需简略的三个进程,就完结了操作。只需支撑 Python 的操作体系,都可以运用 pip 装置。

好的,现在您假如照着做的话,您现已在您的电脑上装置好了 Ansible 。

在咱们开端运用 Ansible,了解 Ansible 怎么经过 SSH 协议与长途机器通讯是十分重要的。

Ansible 运用一个高质量的 Python 完结的 OpenSSH 协议库"paramiko"。 Paramiko 遵从 SSH2 协议,支撑以加密和认证的办法,进行长途的衔接。运用 paramiko 可以很好的处理以下问题:需求运用 Windows 客户端,长途衔接到 Linux 。假如读者对 paramiko 感兴趣,想了解更多关于 paramiko 的信息,请拜访 paramiko 的官方网站:http://www.paramiko.org/

当中心操控与长途机器通讯时,Ansible 默许运用 SSH Keys 办法通讯,这个也是官方引荐的办法,可是假如您想运用暗码的话,也是可以的。为了启用暗码验证,运用 –ask-pass 选项,假如运用 sudo,那么运用 –ask-sudo-pass 选项。在本文中,笔者选用暗码验证办法进行演示,读者可以依据的需求挑选运用暗码验证仍是密钥验证。

运用 Ansible 向长途机器履行第一条指令

假如您想要对长途机器进行办理,那么首要您需求将长途机器的主机名或 IP 写入 Ansible 清单文件/etc/ansible/hosts 中,在 Ansible 中称其为清单文件,里边包含了一切您要办理的机器。修正 /etc/ansible/hosts,将长途主机的 IP 或主机名参加到文件中,如下

192.168.79.120

在将长途主机参加到清单文件,咱们先用 Ansible 测验下与程主机的连通性,运用 Ansible 的模块 ping 来测验

ansible 192.168.79.120 –m ping –ask-pass

图 1.ansible ping 成果:

点击这儿给我发消息

Ansible 将测验运用您当时的用户衔接到长途机器,就像咱们往常运用的 SSH 相同。这儿笔者运用的是暗码验证。假如您想指定用户,运用"-u"参数加用户名。如下:

ansible 192.168.79.120 –m ping –ask-pass –u jack

经过以上的指令,咱们知道 Ansible 机器与长途主机的通讯是没有问题的,现在就在长途主机上履行一条指令

ansible 192.168.79.120–ask-pass –a "/bin/echo hello"

图 2.ansible 履行指令成果:
Ansible一个IT自动化东西,用来配备体系布置软件

十分不错,Ansible 在长途主机上履行指令成功。

Ansible 的清单文件

Ansible 不善于一起处理多个不同的运用项目,为了有用区别多个不同的运用项目,经过挑选在 Ansible 清单文件中列出的一部分运用项目,挑选所要操作的体系。Ansible 的清单文件是默许是寄存在/etc/ansible/hosts 。当然您假如想自界说清单文件的寄存方位也是可以的。

Ansible 清单文件的格局与 INI 格局很相似。

图 3./etc/ansible/hosts 文件节选如下:
Ansible一个IT自动化东西,用来配备体系布置软件

在中括号"[]"中的是组名。组名主要是用来对机器分类,并阐明机器的用处。

同一台机器可以参加一个组,也可以参加多个组,例如一台机器可以一起在 webserver 组也以在 dbserver 组中。

假如有长途机器是运用的非规范的 SSH 端口(注:规范的 SSH 端口为 22),可以将端口号放在 IP 或主机名的后边,如某台长途机器的 IP 为 192.168.79.121,SSH 端口为 2080,那么可以这样写如下:

192.168.79.121:2080

假如您有很多的主机,它们的命名格局是:www1.example.com、www2.example.com、www3.example.com ……,那么您可以像下面这样在清单文件指出,而不是悉数一个一个列出来:

[webservers]
www[1:50].example.com

还可以界说字母规模,如下:

[databases]
db-[a:f].example.com

您也可以依据每台机器挑选衔接类型和用户,如下

[targets]
localhost ansible_connection=local
other1.example  ansible_connection=ssh ansible_ssh_user=jack
other1.example  ansible_connection=ssh ansible_ssh_user=liheng

以上是一些清单文件中的根本设置规范。

Anisble 指令行

Ansible 指令行可以快速的完结一些简略的作业。运用好 Ansible 指令行东西,关于往后学习 playbooks 言语供给了条件。

在前面笔者现已展现了怎么运用 Ansible 在长途机器上履行指令。下面笔者再介绍一些 Ansible 指令行的其它功用

文件与目录办理

Ansible 可以传输文件到多个机器。为了传输文件到多个不同的机器:

ansible targets–m copy –a "src=/etc/hosts dest=/tmp/hosts"

图 4.ansible 指令行示例成果:
Ansible一个IT自动化东西,用来配备体系布置软件

Targets 是主机的组名,-m 要履行的模块名,这儿是运用 copy 模块,-a 模块参数。具体阐明可以运用 anisble –h 查看。

您也可以在指定方针文件的一切者和权限,如下:

ansible targets -m copy -a "src=/etc/hosts dest=/tmp/hosts mode=600 owner=test group=test" --ask-pass

假如您想改动长途主机上的目录或文件权限,可以运用 files 模块,如

ansible targets –m file –a "dest=/tmp/hosts mode=600 owner=test group=test" –ask-pass

还可以经过 file 模块创立目录,相似于"mkdir -p":

ansible targets –m file –a "dest=/tmp/tmpdir mode=755 owner=test group=test state=directory" –ask-pass

当然还可以经过 file 模块删去目录

ansible targets –m file –a "dest=/tmp/tmpdir state=absent" –ask-pass

留意,file 模块是递归删去,相似于 rm –rf 。

包办理

Ansible 的 YUM、apt 模块可以用来办理 YUM、apt 包办理器。下面以 YUM 模块为例做介绍

查看包是否装置,假如没有装置,就装置,已装置的话,不会更新包。

ansible targets –m yum –a "name=gcc state=installed" –ask-pass

装置指定版别的包

ansible targets –m yum –a "name= gcc-4.4.7 state=installed" –ask-pass

装置最安稳的版别

ansible targets –m yum –a "name=gcc state=latest" –ask-pass

删去包

ansible targets =m yum –a "name=gcc state=removed" –ask-pass

用户和组办理

User 模块可以用来创立和保护现已存在的用户帐号,还可以用来删去已存在的用户帐号。

首要生成用户的加密暗码

yum –y install Python-paslib
Python -c "from passlib.hash import sha512_crypt; print sha512_crypt.encrypt('123456')"
$6$rounds=40000$YFDgOuWb47e2xREt$87szy5qOrzU.MDwDc.\
yEzTt7mkGSCKGh3NlBRTQXjbkKJZBOrlCBSGhl19VcHEvEBUjttcfah5VqlulkZS2Cc/

上面的指令生成了暗码"123456"的加密暗码

ansible targets –m user –a 
"name=bobo password=$6$rounds=40000$YFDgOuWb47e2xREt$87szy5qOrzU.MDwDc.\
yEzTt7mkGSCKGh3NlBRTQXjbkKJZBOrlCBSGhl19VcHEvEBUjttcfah5VqlulkZS2Cc/" 
–ask-pass

删去用户

ansible targets –m user –a "name=bobo state=absent" –ask-pass

办理服务

在指定机器上启用 nginx 服务

ansible targets –m service –a "name=nginx state=started" –ask-pass

图 5.办理服务履行成果:

Ansible一个IT自动化东西,用来配备体系布置软件
 

重启 nginx 服务:

ansible targets –m service –a "name=nginx state=restarted" –ask-pass

中止 nginx 服务

ansible targets –m service –a "name=nginx state=stopped" –ask-pass

ansible 有十分多的模块,笔者核算 ansible 支撑的模块有 183 个之多,要查看可用的模块,运用指令

ansible-doc –l

Playbooks

Playbooks 相比较指令行形式来说,是选用一个彻底不同的办法运用 Ansible 。简略来说,playbooks 是真实简化配备办理和多机器布置的根底,playbooks 十分合适布置杂乱运用。Playbooks 可以声明配备,playbooks 推送您设置好的配备并确保配备推送到指定的长途主机上运用起来。

Playbooks 运用 YAML 格局,并具有简明易懂的语法运用,Anisble 为了确保 playbooks 的易配备性性和易读性,尽或许的使 playbokks 的语法不像程序言语或脚本言语,而更像是一个配备或处理模型。

每一个 playbook 将一个或多个'plays'组合成一个列表。经过组合一个 playbook 中的多个 plays,可以和谐多台长途主机的布置,在一切指定的机器上一起运转某此界说好的操作指令。可以界说很多的 plays 运用到您办理的长途主机做许多不同的作业。

以下笔者以运用 Ansible 装置 nginx 来演示 playbooks 的简略示例:

图 6.目录结构示意图:
Ansible一个IT自动化东西,用来配备体系布置软件

笔者在/etc/ansible 目录建立了一个 playbook 用于专门寄存一切的 playbooks ,playbook 目录是各个运用的 playbook 文件,各目录以运用命名,templaes 目录寄存一切 playbook 的模板。

以下是 nginx 的 playbook 文件 nginx.yml 内容:

---
- hosts: webservers
  remote_user: root
  vars:
      connections : "65535"
  tasks:
  - name: ensure nginx is at the latest version
    yum: pkg=nginx state=latest
  - name: write the nginx config file
    template: src=/etc/ansible/playbook/templates/nginx/nginx.j2 dest=/etc/nginx/nginx.conf
    notify:
    - restart nginx
  - name: ensure nginx is running
    service: name=nginx state=started
  handlers:
    - name: restart nginx
      service: name=nginx state=restarted

文件的第 1 行是"---"这是 YAML 要求的文件解说符;

文件的第 2 行是"- hosts: webservers"指定了即将履行 playbook 的主机,可以是单台机器,也可以一组机器,这个名称是在 /etc/ansible/hosts 文件中界说。

文件的第 3 行是"remote_user: root"设定了履行 playbook 中操作的长途用户。

文件的第 4-5 行设置了一些相关的变量,您可以依据实践的需求设置配备文件中的值,这些变量会在模板文件中运用到。

文件的第 6 开端设置使命(task)从第 7-14 行设置的使命的具体内容,这儿笔者设置了 3 个使命,包含装置 nginx;修正 nginx 配备文件,并在修正 nginx 时重启 nginx;启用 nginx 服务。这儿有一点要留意,使命的履行是依序进行,一个只履行一个使命。在完结一个使命之后再接着履行下一个使命。

文件的第 15-17 行,在文件被修正时将也要履行的操作。仔细的读者或许留意到在文件的 11 行的"notify:","notify"动作便是调用 handler 部分的操作,当客户端的/etc/nginx/nginx.conf 文件发作更改时,就会重启 nginx 。

以下 template/nginx/nginx.j2 文件的内容

user nginx;
worker_processes {{ ansible_processor_count }};
pid /var/run/nginx.pid;
error_log  /var/log/nginx/error.log;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

events {
    worker_connections {{ connections }} ;
    # multi_accept on;
}
http {
    ##
    # Basic Settings
    ##
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    server_tokens off;
    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    
    ##
    # Logging Settings
    ##
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    ##
    # Gzip Settings
    ##
    gzip on;
    gzip_disable "msie6";
    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/x-javascript \
     text/xml application/xml application/xml+rss text/javascript;
    ##
    # If HTTPS, then set a variable so it can be passed along.
    ##
    map $scheme $server_https {
        default off;
        https on;
    }
    ##
    # Virtual Host Configs
    ##
    include /etc/nginx/conf.d/*.conf;
}

在模板文件中,笔者运用了两个变量,分别是"{{ ansible_processor_count }}"与"{{ connections }}","{{ ansible_processor_count }}" 是 ansible 界说的变量,这个变量用来核算机器的处理器核数,"{{ connections }}"是笔者在 nginx.yml 文件中自界说的变量。

运转 ansible-playbook ,使配备收效

ansible-playbook nginx/nginx.yml --ask-pass

图 7.ansible-playbook 运转成果图:
Ansible一个IT自动化东西,用来配备体系布置软件

从成果中咱们可以看到 Ansible 关于每一个动作或使命都有较为具体的状况阐明,从显现成果可以十分清楚到查看每一个动作或使命的终究成果,这关于咱们推送配备和长途履行指令是十分有协助的。

Ansible 与其它配备办理的比照

笔者挑选了现在几款干流的与 Ansible 功用相似的配备办理软件 puppet、Saltstack,这儿所做的比照不针对各个软件的功能作比较,仅仅对各个软件的特性做个比照。具体内容见表 1:

表 1.Ansible Vs. puppet Vs. Saltstack 比照

  Puppet Saltstack ansible
开发言语 Ruby Python Python
是否有客户端
是否支撑二次开发 不支撑 支撑 支撑
与长途机器是否彼此验证
与长途机器通讯是否加密 是,规范 SSL 协议 是,运用 AES 加密 是,运用 OpenSSH
渠道支撑 支撑 AIX、BSD、HP-UX、Linux、 MacOSX、Solaris、 Windows 支撑 BSD、Linux、Mac OS X、Solaris、 Windows 支撑 AIX、BSD、 HP-UX、 Linux、Mac OSX、Solaris
是否供给 web ui 供给 供给 供给,不过是商业版别
配备文件格局 Ruby 语法格局 YAML YAML
指令行履行 不支撑,但可经过配备模块完结 支撑 支撑

完毕语

Ansible 是一个新式的 IT 自动化办理东西。现在它的下载量现已超过了 100 万。在 GitHub,它是排名前 10 位的 Python 项目。可以预见 Ansible 的开展是不可限量。笔者经过本文简略的向咱们介绍了 Ansible 一些运用办法和运用场景,期望经过本文,可以让咱们都爱上这个超级有能量的体系自动化办理东西。

其他相似的新闻

其他相关的新闻

咱们感兴趣的内容
小同伴独爱的新闻
小同伴还重视了以下信息
小同伴重视的焦点

小同伴都在重视的抢手词

新服 缤纷活动 帆海世纪 芈月传 暗黑道具 萌乐网 苹果发布会 最新谍照 三国令 剑雨江湖 怎样修炼战骑 页游 怎样修炼同伴 木甲国际 仙侠道2 推黑科技 页游形式 武圣试炼场 街机玩法 蓝月传奇 个人BOSS玩法 哥们网 九阴绝学 仗剑出鞘 全新形式 范伟打天下 全新元神玩法 七大神兵简介 新手攻略 跑腿使命 门派五行 城战礼包 页游界 泥石流 傅园慧 经典网页游戏 耐玩 盘点 玉石攻略 提高人物 大黑 实装特点 神兵攻略 闻名莽荒 莽荒纪 手持神兵 土豪梦 万世 开学清单 财富赚不断 天书国际 大黑游戏 资源战场 ppwan 天问 激战 全国大战 雄霸一方 新增宠物技术 肯定小能手 花千骨 三尾章鱼 风色轨道 双枪手 弑之神 缤纷好礼 惊喜六重连 帮会 中秋福利 克己月饼 九阴真经 玩家 五周年留念 留念银币 名动三界 新服资料片 画江山 勇战妖魔 邪恶势力 上古降魔 老司机玩法 坐骑揭秘 黑科技 竞技场攻略 铁血皇城 披风玩法 书剑恩仇录 配备强化攻略 户外BOSS玩法 全网曝光 赤壁传说 半回合制国 ACT 奇珍商城 热血战歌 传奇瑰宝抽奖 打开办法 门徒 门徒获取玩法 三大萌宠简介