zoukankan      html  css  js  c++  java
  • ansible

    1.ansible:一个批量的自动化部署工具

    clip_image001

    工作原理:ansible通过hosts文件和免秘钥(配置文件用户名密码端口号)来实现批量管理主机

    ansible默认并发量-f:5

    Ansible:Ansible的核心程序

    Host Lnventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等。可以通过file来加载,可以通过CMDB加载

    Playbooks:YAML格式文件,多个任务定义在一个文件中,使用时可以统一调用,“剧本”用来定义那些主机需要调用那些模块来完成的功能.

    Core Modules:Ansible执行任何管理任务都不是由Ansible自己完成,而是由核心模块完成;Ansible管理主机之前,先调用core Modules中的模块,然后指明管理Host Lnventory中的主机,就可以完成管理主机。

    Custom Modules:自定义模块,完成Ansible核心模块无法完成的功能,此模块支持任何语言编写。

    Connection Plugins:连接插件,Ansible和Host通信使用

    模块:1.yaml #用来编写yaml脚本的语言

    2.paramiko #模拟ssh协议连接linux客户端

    3.jinja2         #模板语言

    2.Ansible优点:

    ●Stupied Simple ,上手简单,学习曲线平滑

    ●SSH by default ,安全,无需安装客户端

    ●配置简单、功能强大、扩展性强

    ●支持API及自定义模块,可通过Python轻松扩展

    ●通过Playbooks来定制强大的配置、状态管理

    ●提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台 #web界面收费,因此企业中都不用

    ●幂等性:一种操作重复多次结果相同

    3.ansible安装

    yum install epel-release

    yum install ansible

    4.ansible配置客户端(无密码登录)

    服务端:192.168.88.5

    客户端:192.168.88.10

    192.168.88.12

    第一种方法:

    1.server: ssh-keygen

    2.scp id_rsa.pub root@192.168.254.25:/root/.ssh/authorized_keys

    第二种方法:

    第一步:[root@localhost ~]# vim /etc/ansible/hosts

    在最后一行编写如下内容:

    clip_image002

    定义组名:[testhosts]

    客户端用户名:ansible_ssh_user=root

    客户端密码: ansible_ssh_pass=123456

    第二步:[root@localhost ~]# vim /etc/ansible/ansible.cfg

    clip_image003

    将这行的注释去掉

    第三步:测试跟客户端是否联通

    [root@localhost ~]# ansible 192.168.88.10 -m ping

    clip_image004

    clip_image005

    ansible all -m ping 查看所有客户端是否连通

    ansible testhosts -m ping 查看testhosts组下的所以客户端是否连通

    5.ansible常用命令hoc命令行下:

    ●查看支持的模块: ansible-doc -l

    ●查看模块用法:ansible-doc -s MODEL_NAME

    ●ansible命令应用基础

    1.ansible <host-pattern> [options]6

    -f forks:启动并发线程数

    -m model_name:要使用的模块

    -a args:特有的参数

    设置forks数量:a.export ANSIBLE_FORKS=100在终端运行;

    b.在配置文件ansible.cfg里设置forks=100即可;

    c.运行命令时增加参数-f 100即可。

    补充:线程是最小的调度单位,进程是最小的管理单元,一个进程里面至少1个线程,一个线程或者多个线程可以在一个进程里面

    ●查看client端是否正常ping通:ansible all -m ping

    ●查看客户端信息:ansible webserver -m setup

    ●copy文件到client端:ansible webserver -m copy -a 'src=/root/git_test/code.txt dest=/root/test'

    实例:将服务端的liang文件复制到客户端下

    [root@localhost ~]# ansible testhosts -m copy -a 'src=/root/liang dest=/root

    clip_image006

    ●创建test用户:ansible webserver -m user -a "name=test state=present"

    实例

    • clip_image007

    ● 删除test用户:ansible webserver -m user -a "name=test state=absent"

    ●yum安装:ansible webserver -m yum -a ‘name=epel-relese state=latest‘

    实例:

    [root@localhost ~]# ansible testhosts -m yum -a 'name=unzip state=latest'

    clip_image008

    ●停止httpd服务:ansible webserver -m service -a ‘name=httpd state=stopped enabled=no‘

    ●运行脚本:ansible webserver -m script -a ‘/tmp/test.sh‘

    ●运行命令:ansible webserver -m command -a 'date'

    实例:

    clip_image009

    如果命令模块使用的过程中出现告警的解决办法:

    [root@localhost ~]# vim /etc/ansible/ansible.cfg

    clip_image010

    clip_image011

    将该行的注释去掉即可。

    6.playbook

    ●tasks

    ●variables

    ●templates

    ●handlers

    ●roles

    yaml介绍(剧本)

      yaml是一个可读性高的用来表达资料序列的格式,yaml参考了其他多种语言,包括:xml,c语言,python,perl以及电子邮件格式RFC2822等,ClarkEvans在2001年在首次发表了这种语言。

    ●yaml的可读性好

    ●yaml和脚本语言的交互性好

    ●yaml使用实现语言的数据类型

    ●yaml有一个一致的信息模型

    ●yaml易于实现

    ●yaml可以基于流程来处理

    ●yaml表达能力强,扩展性好

    创建的yaml的文件格式:.yml/.yaml

    执行:ansible-playbook -C copy.yaml -C模拟执行

    ansible-playbook copy.yaml

    6.1 基础剧本

    剧本说明:

    - hosts: all 指定主机组,可以理解为这个最大,顶个写

    tasks: 指定下面一系列的动作,这个是第二,需要有两个空格

    - name: 指定名称,排行第三,需要有三到四个空格

    yum: 模块名 排行第四,需要有四到五个空格

    handlers:指定处理器(触发器),排行第二,需要与tasks对齐

    实例1:

    clip_image012

    6.2 剧本中使用变量

    自定义变量的实现方式

    1. 直接写在yaml文件中

    2. 在Inventory file中定义

    3. 变量的声明:

    vars:

    - 变量名: 变量值

    4. 变量的引用:{{ var }}

    5. vars和tasks同级,并要写在tasks前面

    实例

    clip_image013

    clip_image014

    6.3 剧本中使用触发器notify

    clip_image015

    notify触发的条件是当notify上边第一个命令执行成功(copy执行成功),会执行下面相对应的任务(systemctl restart httpd),handlers为触发的任务内容,- name必须和notify下的名字相同。handlers必须在最后。

    6.4 剧本中使用迭代

    clip_image016

    迭代中的变量必须用item,固定格式

    clip_image017

    clip_image018

    出现这个告警,进行如下操作即可

    [root@localhost ~]# vim /etc/ansible/ansible.cfg

    clip_image019

    6.5 剧本中模板templates

    clip_image020

    将模块换成template,固定格式

    [root@localhost ~]# vim /etc/httpd/conf/httpd.conf

    clip_image021

    [root@localhost ~]# vim /etc/ansible/hosts

    clip_image022

    7.roles介绍:提高代码的重用性

    什么情况下用到roles

    假如我们现在有3个被管理主机,第一个要配置成httpd,第二个要配置成php服务器,第三个要配置成MySQL服务器。我们如何来定义playbook?

    第一个play用到第一个主机上,用来构建httpd,第二个play用到第二个主机上,用来构建php,第三个play用到第三个主机上,用来构建MySQL。这些个play定义在playbook中比较麻烦,将来也不利于模块化调用,不利于多次调。比如说后来又加进来一个主机,这个第4个主机既是httpd服务器,又是php服务器,我们只能写第4个play,上面写上安装httpd和php。这样playbook中的代码就重复了。

    clip_image023

    1)tasks目录 tasks目录用于存放ansible执行的任务,tasks目录下必须存在main.yml文件,main.yml为主函数,用于导入需要执行的任务。

    2)handlers 目录 handlers经常和notify搭配使用,当文件、进程及返回状态发生变化时,notify通过handlers做响应的变更。handlers目录下也需要包含main.yml,包含在在main.yml中的handlers将被执行

    3)templates及file目录 templates目录及file目录均用于ansible目录文件处理,两个目录下均用于存放传输的文件,但templates目录下存放的是”.j2”格式的文件模板,文件中可以写变量。

    4)vars目录 vars目录下用于定义当前roles执行时使用的变量,应当存在main.yml文件。

    第一步:创建roles文件

    [root@localhost ~]# mkdir -pv playbooks/roles/{webservers,dbservers}/{files,handlers,tasks,vars,templates}

    [root@localhost ~]# tree playbooks/

    clip_image024

    第二步:编辑启动roles文件

    [root@localhost playbooks]# vim site.yml #固定格式

    clip_image025

    roles:写你定义的角色

    site.yml这个启动文件下可以添加不同的组(hosts)

    第四步:启动

    [root@localhost playbooks]# ansible-playbook site.yml

    第三步:

    编辑tasks下的文件

    [root@localhost ~]# vim playbooks/roles/webservers/tasks/main.yml #固定格式

    clip_image026

    file文件配置:

    [root@localhost ~]# vim playbooks/roles/webservers/tasks/main.yml

    clip_image027

    [root@localhost ~]# cp /etc/httpd/conf/httpd.conf /root/playbooks/roles/webservers/files/ #将要复制的文件复制到files中

    [root@localhost playbooks]# ansible-playbook site.yml

    handlers

    [root@localhost playbooks]# vim roles/webservers/tasks/main.yml

    clip_image028

    [root@localhost playbooks]# vim roles/webservers/handlers/main.yml

    clip_image029

    [root@localhost playbooks]# ansible-playbook site.yml

    templates

    [root@localhost playbooks]# vim roles/webservers/tasks/main.yml

    clip_image030

    将要操作的文件复制到templats中。

    [root@localhost playbooks]# cp roles/webservers/files/httpd.conf roles/webservers/templates/

    [root@localhost playbooks]# vim roles/webservers/templates/httpd.conf

    clip_image031

    [root@localhost playbooks]# vim /etc/ansible/hosts

    clip_image032

    [root@localhost playbooks]# ansible-playbook site.yml

    vars

    [root@localhost playbooks]# vim roles/webservers/vars/main.yml

    clip_image033

    [root@localhost playbooks]# vim roles/webservers/tasks/main.yml

    clip_image034

  • 相关阅读:
    HDU 5912 Fraction (模拟)
    CodeForces 722C Destroying Array (并查集)
    CodeForces 722B Verse Pattern (水题)
    CodeForces 722A Broken Clock (水题)
    CodeForces 723D Lakes in Berland (dfs搜索)
    CodeForces 723C Polycarp at the Radio (题意题+暴力)
    CodeForces 723B Text Document Analysis (水题模拟)
    CodeForces 723A The New Year: Meeting Friends (水题)
    hdu 1258
    hdu 2266 dfs+1258
  • 原文地址:https://www.cnblogs.com/liangzb310/p/11026448.html
Copyright © 2011-2022 走看看