资源
工程

在AWS Spot实例上滚动您自己的远程Docker执行器

威尼斯人真人威尼斯人官网有时发现自己需要将任务卸载到专门的硬件上.  这允许任务更有效地运行,并减少常规执行器的负载, 比如那些运行威尼斯人官网的CI/CD操作的, SDK指标摄取和威尼斯人官网的聚合.

 

的注意事项

 

Many different approaches and tools are available to address such needs; some are very basic to operate, 而其他人则有一个陡峭的学习曲线.

 

威尼斯人官网探索了各种可能性, 但大多数情况证明,在简单的使用方面是超大的. 例如, 威尼斯人官网可以创建或使用Kubernetes集群, 一个简单的CronJob和一个用于AWS的分配器. 仍然, 这样的需求需要Kubernetes的实践知识和对维护这种操作的深刻理解,而大多数移动工程师都不具备这些知识.

 

除了, 威尼斯人官网探索了重新利用现有气流操作的想法, which our peer teams make use of – but that proved impossible due to the technicalities of mixing permissions across the groups; such an issue also existed with using AWS Batch.

 

值得注意的是,上述两种方法和其他第三方解决方案都需要威尼斯人官网拥有预算, 但就像所有事情一样, 这是一个概念验证, 所以需要一个更简单的解决方案.

 

威尼斯人官网考虑的另一个重要因素是解决方案的可访问性, 以一种不会引入太多复杂性和新技术的方式. 这就把答案引向了一个稍微不同的方向, 允许威尼斯人官网像运行普通Jenkins作业一样运行工作负载, 这是大多数软件工程师已经熟悉的.

 

最后的决定

在考虑了威尼斯人官网的选择之后, 威尼斯人官网选择了一个更简单、更容易的解决方案, 这让威尼斯人官网可以利用现有的技术栈和知识来运作, 同时在任何威尼斯人官网想要的地方无缝运行威尼斯人官网的业务.

 

以适应上述要求, 威尼斯人官网编写了一个软件脚本,用于在AWS计算实例上运行威尼斯人官网的SDK Metrics摄取工作负载, 不需要一台机器24/7处于活动状态, 因为威尼斯人官网想最大化威尼斯人官网的成本/计算机效率和使用现货实例, 因为在威尼斯人官网的摄入过程中肯定有“死点”.

 

威尼斯人官网用于此实用程序的编程语言是 go-lang因为它为AWS和Docker提供了成熟的sdk,并且两者都非常快地启动.

 

在这篇博文中, 威尼斯人官网将遍历重新创建脚本所需的步骤,并了解其内部工作原理.

先决条件和依赖项

脚本才能成功运行, 您将需要一个预先存在的AMI,并且安装了docker守护进程, 运行并公开Docker API端口(2375)给相关的调用机. 下面公开非威尼斯人官网 GitHub要点 通过styblope提供了一些关于如何使docker守护进程除了侦听UNIX套接字之外还侦听TCP的信息, 但总结一下要求:

 

  1. 创建守护进程./etc/docker中包含
    {“主机”:[" tcp: / / 0.0.0.0:2375”、“unix: / / / var /运行/码头工人.袜子")}
  2. 使用系统以指示守护进程使用上述配置文件的方式运行守护进程, i.e.,通过编辑docker.服务或创建覆盖.相依

 

此外,本文假设您的go-lang项目已经提供了以下依赖项:

威尼斯人官网要做什么?

在深入研究代码之前, 下面是威尼斯人官网即将看到的实际操作过程的简要概述:

  1. 使用“RunInstances”API请求Amazon EC2
  2. 等待机器联机
  3. 连接到在新配置的机器上运行的docker服务
  4. 拉一个docker映像
  5. 根据上面的图像创建一个容器
  6. 启动容器
  7. 将容器的日志传输到威尼斯人官网的进程
  8. 为简洁起见,在威尼斯人官网的进程中使用容器的退出代码
  9. 使用“TerminateInstancesRequest”API终止EC2机器

告诉我代码!

因此,首先,威尼斯人官网需要创建并运行一个EC2实例,最好是一个spot实例. 幸运的是, 这是一个相当简单的任务, 威尼斯人官网只需要一些细节就可以调用API并接收新创建的EC2实例的细节.

 

下面是请求对象在go-lang中的样子:

 

使用这个对象实际执行实例请求:

 

如果成功, 这次通话的结果是建设性的, as it includes details about the newly created and running instance; this will help us connect to the instance:

 

现在威尼斯人官网已经运行了一个实例, we can attempt to connect to it; we can hijack Docker SDK’s “Ping” API to check if the instance has the docker daemon running and accepting connections:

 

在创建一个新的docker客户端对象之后, 上面描述的代码执行尝试连接实例上的Docker守护进程的简单任务,最长时间为5分钟, 每隔5秒.

 

连接成功后, ping结果将包含EC2实例中的docker守护进程正在使用的API版本.

 

现在威尼斯人官网已经运行了机器,并且已经准备好了一个新创建的docker客户端, 威尼斯人官网可以开始在刚刚创建的EC2实例上实际使用docker服务.
首先将docker映像拉到实例本身.

 

但在那之前, 如果您想使用ECR作为您的映像存储库,请注意, 您必须向在该实例上运行的docker服务提供凭据.

要执行此操作,最好调用“Get作者izationToken”API.

 

要在docker API中使用这个令牌,你必须稍微操作一下这个字符串:

 

在这里,威尼斯人官网终于可以拉出威尼斯人官网的图像:

 

如果威尼斯人官网想要管道输出图像拉取操作:

 

现在威尼斯人官网可以继续处理容器,从创建容器开始:

 

如果一切顺利(否则), 检查从aws/docker)返回的错误,直到这里, 现在威尼斯人官网可以启动容器:

 

现在让威尼斯人官网将日志输出从docker管道到运行威尼斯人官网的进程:

 

如果威尼斯人官网想要停止容器,威尼斯人官网可以使用停止容器API:

 

最后,要接收容器的退出代码,威尼斯人官网可以使用Inspect API:

 

现在, 做个好公民, we have to terminate the EC2 instance we used; this might also save a few bucks in case we grabbed an expensive machine:

Summary

在Kubernetes时代,这可能看起来有点像向另一个方向迈进了一步.  然而, 考虑到管理项目的团队都是手机开发者, 一个更直接的方法, 更多的头脑和实践方法已经解决了这个问题.

 

这篇文章描述了威尼斯人官网如何快速授权AWS和Docker api和sdk来创建小型远程执行单元,并像在本地运行一样运行它们. 威尼斯人官网在詹金斯身上进行了微调, 允许一个简单的作业输出,就好像Jenkins自己运行代码一样.

作者
最近的帖子

作者:Sagi Antebi

Sagi在5年前开始在DT工作. 如今,他领导着Android Marketplace SDK的开发工作, 内部和外部工具,如DT Exchange SDK分析和威尼斯人官网的模拟需求平台- Forest. Sagi是两个可爱幼儿的父亲,还有一只非常独特的黑色拉布拉多犬,名叫Missy.

探索更多的

请与威尼斯人官网联系,看看威尼斯人官网能如何帮助贵公司

请求一个演示-家

威尼斯人官网使用cookie来操作威尼斯人官网的网站并用于营销目的. 查看威尼斯人官网的 隐私政策 or 不要出售我的个人信息政策 欲知详情.
接受
拒绝
友情链接: 1 2 3 4 5 6 7 8 9 10