QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

将 GitHub 的 Web 和 API 迁移到运行在裸机上的 Kubernetes

  • 2017-09-24
  • 本文字数:1916 字

    阅读完需:约 6 分钟

过去一年中, GitHub 将其运行 Ruby on Rails 应用程序的内部基础设施迁移到了 Kubernetes 上,Ruby on Rails 是 github.com 和 api.github.com 的载体。迁移过程始于在 Unicorn 进程上运行 Web 和 API 应用程序,上述 Uncorn 进程部署于由 Puppet 管理的裸机( metal cloud )服务器之上。最后,整个迁移过程在容器处理完所有 Web 和 API 请求时结束,这些容器由部署在 metal cloud 上的 Kubernetes 集群运行。

根据 GitHub Engineering 博文,部署和运行 GitHub 的基本方法在过去八年中没有显著变化。然而,GitHub 本身却发生了巨大变化,包括新的功能、更大的软件社区、更多的 GitHub 开发人员及员工以及每秒钟更多的请求。随着 GitHub 组织的发展,现有的运营方式开始出现新问题。许多团队希望将功能提取到可以独立运行和部署的较小服务中。随着服务数量的增加,网站可靠性工程师(SRE)团队发现他们越来越频繁地进行维护,这意味着他们没有时间来增强底层平台。GitHub 工程师需要一个可以用来实验、部署和扩展新服务的自助服务平台。

Kubernetes 的这几个品质使其从最初被评估过的几个平台中脱颖而出,包括:支持该项目的活跃的开源社区 ; 第一次运行(第一个吃螃蟹)的体验,因此我们可以在初始实验的最初几个小时内部署小型集群和应用程序 ; 以及“可用于激发其设计的大量经验”,其中值得一提的当属 acmqueue 杂志上的" Borg, Omega 和 Kubernetes "这篇文章。

在本项目的最初阶段,GitHub 团队作出了慎重的决定,只关注于关键 Web 流量负载的迁移。做出这一决定源于许多因素,例如:

  • 围绕 GitHub 对 Kubernetes 的深入了解会对迁移过程大有裨益。
  • 团队希望确保我们制定的习惯和模式适合大型应用程序以及较小型的服务。
  • 成功迁移一个关键且知名度高的工作负载能进一步推进 Kubernetes 在 GitHub 的使用。

鉴于被迁移的工作量非常关键,在处理任何生产流量之前必须需要极高的运营信心。因此,我们构建了一系列 Kubernetes “审查实验室”集群作为原型。最终我们得到了一个基于聊天的接口,它被用于为所有pull 请求创建GitHub 的独立部署。审查实验室会在最后一次部署后的一天内被清理,由于每个实验室创建于自己的Kubernetes 命名空间中,清理与删除命名空间一样简单,而且部署系统会在必要时自动执行清理。

为满足旗舰GitHub Web 服务(该服务依赖于对其他数据服务低延迟的访问)的性能和可靠性要求,我们在GitHub 的物理数据中心和POPs 中运行的metal cloud 之上实施了Kubernetes 基础设施。这项工作还涉及许多子项目,包括:通过 Project Calico 网络提供商使用容器网络、借鉴Kelsey Hightower 的 Kubernetes the Hard Way 教程、将 Kubernetes 节点和 Kubernetes apiserver 的配置变得 Puppet 化、 以及增强 GitHub 的内部负载均衡服务( GLB )以支持 Kubernetes NodePort 服务等。

在增强 GitHub 部署系统后,我们将一套新的 Kubernetes 资源部署到与现有生产服务器平行的一个 github-production 命名空间上,并增强了 Github 负载均衡服务,可基于受Flipper 影响的功能切换的 cookie ,将员工的网络请求路由到另外的后端服务器。然后,员工就能在任务控制栏中用按钮选择用于实验的Kubernetes 后端服务器。来自内部用户的负载帮助我们发现问题、修复错误,并习惯在生产中采用Kubernetes。

几次初始故障测试产生了出乎意料的结果。特别是,模拟单个apiserver 节点的故障测试中断了集群并且对运行工作负载的可用性产生了负面影响。考虑到Kubernetes 集群降级可能会中断服务,现在我们将Web 应用程序在每个物理站点上的多个集群上运行,并且把将请求从不正常集群转移到其他正常集群的过程完全自动化。

前端转型在一个多月内就完成了,而且性能和错误率被控制在目标之内。在迁移过程中,我们遇到了一个始终存在的问题:在高负载和/ 或高容器流失率的时候,部分Kubernetes 节点会出现内核错误并重启。SRE 团队对此情况不太满意,并且一直高度重视这个问题,但让他们很高兴的是,Kubernetes 能够自动绕过这些故障,并继续提供流量,将错误控制在目标范围内。

GitHub 工程团队“受到了我们将应用程序迁移到 Kubernetes 的启发”。虽然我们将首次迁移的范围有意限定为无状态工作负载,但对于在 Kubernetes 上试验运行有状态服务,例如使用 StatefulSets,我们仍然感到非常期待。

有关 GitHub 采用 Kubernetes 的更多信息您可在 GitHub Engineering 博文中找到。

英文原文 Migrating GitHub’s Web and API to Kubernetes Running on Bare Metal


感谢罗远航对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-09-24 19:001709

评论

发布
暂无评论
发现更多内容

市场规模超百亿 低代码与传统IT开发有何不同

力软低代码开发平台

携手共创开源新格局|2023开放原子全球开源峰会将于6月11日在京隆重开幕

开放原子开源基金会

大数据 开源 开放原子开源基金会 开放原子全球开源峰会 开放原子

软件测试/测试开发丨学习笔记之接口自动化测试

测试人

程序员 软件测试 自动化测试 接口测试 测试开发

文件传输只是第一步,文件同步和备份的关键是

镭速

AIGC背后的技术分析 | 通过EBG学习概念cup

TiAmo

机器学习 AIGC 解释学习

财务共享服务中心建设流程是什么样的?

用友BIP

财务共享

亿级 GPS 数据如何实现高效存储和查询?不同类型数据库选型分析

爱倒腾的程序员

涛思数据 时序数据库 ​TDengine taosdata

Python压缩JS文件,重点是 slimit

华为云开发者联盟

Python 开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜

Mac电脑上的系统监控工具:iStat Menus 中文激活版

真大的脸盆

Mac Mac 软件 系统监控

全球化企业应如何统筹规划财务共享中心?

用友BIP

财务共享

微服务系列之单体架构

Disaster

微服务

GaussDB(DWS)迁移实践丨row_number输出结果不一致

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

喜报!云智慧王海虎荣获中国信通院突出贡献专家奖

云智慧AIOps社区

大前端 低代码 数据可视化

惊!掌握通义千问的关键,从这些必知内容开始!

加入高科技仿生人

人工智能 低代码 ChatGPT 数字转型 通义千问

架构实战营 模块1作业

吴俊

架构实战营

数字化转型,低代码开发真的靠谱?

引迈信息

低代码 数字化 JNPF

“Fabarta 数据血缘治理解决方案”荣获“2023 鑫智奖”双料奖项

Fabarta

数据挖掘 数据分析 数据治理 图智能 血缘治理

了不起的互联网老男孩,在创业路上不掉队

HarmonyOS SDK

HMS Core

Flutter调优--深入探究MediaQuery引起界面Rebuild的原因及解决办法 | 京东云技术团队

京东科技开发者

flutter 企业号 5 月 PK 榜 MediaQuery rebuild

离线版Gerber查看器+PCB/PCBA检测神器新功能!

华秋PCB

工具 电路 元器件 PCB PCB设计

让初学者读懂代码的入门书

博文视点Broadview

深度解析如何通过财务共享建设助推企业数智化转型

用友BIP

财务共享

软件测试/测试开发丨学习笔记之用户端App自动化测试

测试人

程序员 软件测试 自动化测试 测试开发 app自动化测试

除了运行、休眠…进程居然还有僵尸、孤儿状态

华为云开发者联盟

Linux 开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜

新手系列 I 如何使用 TDesign 轻松开发项目,秘诀都在这里

TDesign

#开源项目 项目搭建

OpenAI如何让ChatGPT遵守了伦理道德的底线

陈磊@Criss

艾媒金榜|2023年中国信创数据库企业TOP15

亚信AntDB数据库

数据库 AntDB AntDB数据库

通义千问预体验,如何让 AI 模型应用“奔跑”在函数计算上?

Serverless Devs

软件测试 | 软件危机的几个体现

测吧(北京)科技有限公司

测试

Musl libc 库成功适配到 openEuler Embedded,推动欧拉嵌入式生态发展

openEuler

Linux 操作系统 嵌入式 openEuler risc-v

将GitHub的Web和API迁移到运行在裸机上的Kubernetes_DevOps & 平台工程_Daniel Bryant_InfoQ精选文章