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

  • 相关阅读:
    C#遍历DataSet中数据的几种方法总结
    011_Eclipse中使用HDFSFileSystemAPI事例介绍
    011_用eclipse打开hadoop1.2.1源码出现The method getSplits(JobConf, int) is undefined for the type Object错误
    010_Hadoop配置测试成功后关机重启浏览器打不开dfs和MP
    09_Hadoop启动或停止的三种方式及启动脚本
    08_三大配置文件和五大守护进程
    07_Warning $HADOOP_HOME is deprecated.去除办法
    06_Hadoop配置伪分布式模式详解
    05_安装本地(单机)模式
    04_Apache Hadoop 生态系统
  • 原文地址:https://www.cnblogs.com/liangzb310/p/11026448.html
Copyright © 2011-2022 走看看