容器服务slack运维机器人

初识slack

几年前开始创业,组建团队的第一天,我们首先讨论和考虑的不是高屋建瓴的业务场景和目标,而是整个团队的协同和沟通的问题。选择使用什么作为团队的IM,选择什么作为BUG的记录,选择什么作为需求的跟踪,这些基础设施的存在无形中提高了整个团队的生产力,保证了协作的顺畅和流程。由于团队的成员有些是外国人,而在国外GEEK圈中风光无限的SLACK也就顺理成章的被老外们安利到了团队中。

那么slack是个什么东西呢。

    Slack 是聊天群组 + 大规模工具集成 + 文件整合 + 统一搜索。截至2014年底,Slack 已经整合了电子邮件、短信、Google Drives、Twitter、Trello、Asana、GitHub 等 65 种工具和服务,把可以把各种碎片化的企业沟通和协作集中到一起。

slack不仅仅是一个聊天的IM工具,在团队中的他的职责更多是工具集成,slack支持非常丰富的系统集成。
容器服务slack运维机器人
你可以在slack中看到在github中的代码提交记录,可以修复jira中的需求issue,可以触发jenkins中的单元测试,甚至可以直接部署远程服务器的代码。

虽然后来离开了团队,但是slack的使用习惯还是保持到了现在。关于slack的workflow,大家可以参考这篇文章

关于触发器

容器服务作为阿里云的CaaS层的产品,与传统的PaaS产品不同,容器服务更多的侧重在提供容器集群的管理能力以及与三方系统的集成能力。对于三方集成,最常见的一种方式就是触发器,比如github提供了webhook机制可以在代码提交的时候通知其他的系统,这种简单快捷的方式在持续集成的系统中非常常见。

容服务提供了重新部署与自动扩容扩缩容两种触发器,如下:
容器服务slack运维机器人

可以简单的使用GET或者POST请求的方式调用这两个地址,从而达到重新部署与扩缩容的目的。容器服务本身提供了集群级别的openapi,应用级别的兼容docker的api,那么为什么还需要提供这种使用curl、wget甚至浏览器访问都可以调用的API。

这就要从这几个API的定位讲起,阿里云大部分的产品是IaaS的产品,这些产品只要将自身提供的能力做到性能、易用性以及原子性功能的更优即可。但是容器服务是CaaS层的产品,是对IaaS层的更高级的抽象,我们需要关心不只只是容器如何部署,更多是和开发如何结合,如何符合大家的编程模型或者适应大家的编程模型。而大家的编程模型又各不相同,我们不应该用PaaS的方式去规约开发者的使用习惯以及限制自身系统的能力,更合理的做法是提供原子性的功能,可以集成现有的系统与编程模型。而最简单的方式就是触发器。

容器服务的slack集成

那么是否有能力让slack集成容器服务,通过slack来运维容器呢。其实用slack做运维并非是一个新潮的词汇,GEEK们用slack在aws上管理云资源,做持续集成,大部分依赖slack的一个令人称赞的功能,slack机器人。

下面我们从0部署一个可以运维容器服务的slack机器人。

步骤0 创建slack的team与机器人

首先要学会使用slack的基本功能,然后学会创建一个slack机器人并取得token,这个步骤在本文中就不过多的赘述了。

步骤1 部署应用并创建触发器

在容器服务上部署一个demo的应用,并创建触发器。

2048:
  image: 'blackicebird/2048:latest'
  labels:
    aliyun.scale: '1'
    aliyun.routing.port_80: 2048
  restart: always

点击应用详情页面的创建触发器,即可创建自动扩容的触发器或者重新部署的触发器。
容器服务slack运维机器人

步骤2 部署slack robot
newtown:
    image: registry.aliyuncs.com/ringtail/newtwon:latest
    restart: always
    environment:
        - debug=true
        - key=<如果需要图灵聊天机器人,需填写此项,此项为图灵机器人的appkey>
        - token=<slack机器人的token>

其中key是图灵机器人的key,这个值选填,如果不填写,请删除key,图灵机器人只是为了增加这个项目的趣味性。token是slackbot的token,您可以通过slack的team管理中找到。

附录:
图灵机器人:http://www.tuling123.com/

步骤3 可以玩耍了

在这个slack robot中包含了两个基本模块,记忆模块与容器服务模块。命令的格式如下

记忆模块:    
记住 key value    //设置key,如果在别的模块使用,可以采用$key的方式
记住 key              // 获取 key
记住 全部         // 列出全部key 


容器服务模块:    
容器服务 触发 <触发器地址>  // curl url,建议用<>括起来网址,因为回显到slack的时候回自动触发。     

下面我们利用slack robot进行一次简单的运维 -- 容器扩容

容器服务slack运维机器人

主题命令如下

记住 2048触发器 <你的触发器地址>    

记住 2048触发器    

容器服务 触发 $2048触发器    

输入 “容器服务 触发 $2048触发器的后“,查看容器的服务列表,可以发现容器已经处在伸缩中了。

容器服务slack运维机器人
稍后可以发现容器已经扩容完成,欢迎大家探究更多的好玩的方式。
容器服务slack运维机器人

项目仓库

纽敦的仓库:https://github.com/ringtail/newtwon (出于对newton的尊敬改用newtown)

上一篇:linux 系统优化


下一篇:Linux系统优化思路-理论篇