Node Report 2013-03-15

自定义节点报告

正如在概述中介绍一样,MCollective可以用来撰写自定义设施报告。既然我们有节点的facts,classes和agents这些信息,它们都可以用来撰写自定义报告。mco inventory是一个通用的节点和网络报告工具,它还拥有基本的脚本执行功能。这是一项新兴的功能,脚本语言可能会变。


节点预览

对于给定节点可以运行mco inventory来获取完全信息。如下:

[root@master mcollective]# mco inventory master.example.com
Inventory for master.example.com:
   Server Statistics:
                      Version: 2.0.0
                   Start Time: Tue Jul 24 16:04:31 -0400 2012
                  Config File: /etc/mcollective/server.cfg
                  Collectives: mcollective, puppet, local
              Main Collective: mcollective
                   Process ID: 6822
               Total Messages: 11
      Messages Passed Filters: 11
            Messages Filtered: 0
             Expired Messages: 0
                 Replies Sent: 10
         Total Processor Time: 0.48 seconds
                  System Time: 0.13 seconds
   Agents:
      discovery       helloworld      package        
      process         rpcutil         service        
   Configuration Management Classes:
      default                        settings                      
   Facts:
      architecture => i386
      augeasversion => 0.10.0
      boardmanufacturer => LENOVO
      boardproductname => 284255C
  boardserialnumber => 1ZG6Y9AT0GJ

Write SimpleRPC Client 2013-03-15

编写SimpleRPC客户端

正如在SimpleRPC中所指出一样,可以使用mco rpc命令行工具来调用代理并让它们尽力以合理方式显示结果。如果这些不够可以写自己的代理。

如果你能坚持SimpleRPC的规则,SimpleRPC客户端能够做正常客户端所做的大多数事情并能使其变得很简单。


基本客户端

客户端大多数都是一个在代码中采用Ruby Mixin的帮助函数的分支,它提供以下:

准命令行选项来解析帮助输出
能够添加命令行选项
能够访问到代理和它的动作
帮助输出结果的工具
输出统计的工具
构建自己的过滤器的工具
在保留MCollective::Client功能的前提下附加其他功能
能够很简单也能很复杂

SimpleRPC Audit 2013-03-15

SimpleRPC审计

作为SimpleRPC框架的一部分,审计系统用来将接收到的所有请求记录日志(在一个文件中)或者将这些日志发送到一个中心审计系统。审计数据同样可插件化而且可以根据自身需求来提供相应插件。

同授权一样,客户端在请求中会包括运行客户端库的进程的UID,而审计函数能够获取请求的访问权限。


配置

启用日志功能需要设置相应选项来启用和使用什么插件:

rpcaudit = 1
rpcauditprovider = Logfile

DDL 2013-03-15

DDL数据定义语言

同其他远程过程调用系统,MCollective有一个DDL来定义可用远程方法以及需要的输入和产生的输出。

除了这些过程定义同样提供关于作者,版本等其他关键数据点的元数据。

DDL在以下场景使用:

作为用户帮助页面来使用
作为自动生成用户接口的方式
RPC客户端在等待回复时自动配置合理的超时时间
在发送之前验证网络输入以避免向远程节点发送不必要数据
模块仓库可以使用元数据来展示可用模块的标准视图帮助用户选择合适模块
server将在发送给代理之前验证传入的请求

Use MCollective CLI 2013-03-15

使用MCollective命令行应用程序

命令行接口是MCollective最早也是最重要的设计。大多数情况下都是和这个称为MCO的可执行命令交互,它有很多子命令,参数和标志值。


MCO命令基本用法

安装配置完MCollective之后,可以用一个简单的命令来做测试:mco ping

[root@master ~]# mco ping
master.example.com                       time=50.93 ms
web.example.com                          time=91.21 ms
puppet.example.com                       time=92.17 ms

---- ping statistics ----
3 replies max: 92.17 min: 50.93 avg: 78.10

Control Daemon 2013-03-15

控制守护进程

在每个节点运行的守护进程保持着内部状态并且支持重新加载所有的代理,这些功能由工具mco controller提供。它负责在客户端与任意运行的守护进程交互。

如果想重新加载所有代理而不重启守护进程,可以向该进程发送USR1信号。

也可以发送USR2信号来循环日志级别的DEBUG到TATAL,仅仅不停发送信号然后查看日志。

统计

这可以显示守护进程的基本统计数据

Write SimpleRPC Agent 2013-03-15

编写SimpleRPC代理

SimpleRPC能够工作是因为它假设了如何来写Agents。下面通过完整的HelloWorld代理来演示。首先需要明白客户端发送数据格式,明白数据接收规则。


接收数据规则

客户端发送请求如下格式:

mc.echo(:msg => "Welcome to MCollective Simple RPC")

Use Filter 2013-03-15

使用过滤器

使用过滤器来控制发现和寻址是MCollective中关键概念之一。可以使用facts,classes,agents和server identity作为过滤器或者它们的组合来减少能够影响的主机范围。

可以通过mco rpc --help来查看客户端支持的所有过滤器。

Host Filters
    -W, --with FILTER                Combined classes and facts filter
    -S, --select FILTER              Compound filter combining facts and classes
    -F, --wf, --with-fact fact=val   Match hosts with a certain fact
    -C, --wc, --with-class CLASS     Match hosts with a certain config management class
    -A, --wa, --with-agent AGENT     Match hosts with a certain agent
    -I, --wi, --with-identity IDENT  Match hosts with a certain configured identity

SimpleRPC Authorization 2013-03-15

SimpleRPC授权

作为SimpleRPC框架的一部分,授权系统保证了对代理和动作的细粒度控制。结合连接安全性、集中化审计以及加密签名消息,这一系列重要的功能组合允许大公司对MCollective集群进行精确控制。

客户端在请求中将会包括运行客户端进程的UID而授权函数能够获得这个请求的访问权限。


编写授权插件

编写授权插件很容易,下面的例子允许将只允许RPC调用UID=500,这是一个称为Action Policy的示例插件。

module MCollective::Agent
    class Service<RPC::Agent
        authorized_by :authorize_it

        # ...
    end
end

Infrastructure As Code 2013-03-11

基础设施即代码


  • DevOps不仅仅是工具

确实如此,同样敏捷也不仅仅是工具,它是一系列思想,概念以及最佳实践等。

这听起来很好,但是我要怎样成功实现它呢?

工具能够带来行为的改变并最终改变文化【Patrick Debois】

就像古登堡打印机这个工具最终引起印刷文化的变化,敏捷开发离开持续集成将变得不可能。DevOps依赖一些工具来实现它的理念。