热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

落地案例|日本雅虎如何在OpenStack上大规模构建和运行Kubernetes

Kubernetes落地案例:本文描述了日本雅虎在OpenStack上面运行Kubernetes,实现了“一键”部署代码到Kubernetes的目标。了解更

编者注:

今天的帖子是由日本雅虎的基础设施工程团队撰写,内容是他们如何在 Kubernetes 上运行 OpenStack。这篇帖子是由日本雅虎的工程博客编译而来。

简介:

这篇帖子大致描述了日本雅虎在 Google 和 Solinea 的帮助下,创建了一个自动工具链,在 OpenStack 基础设施平台上,帮助实现“一键”部署代码到 Kubernetes。

文章也基本涵盖了安全,网络,存储,性能等方面,确保产品已经就绪。

文章的最后也讨论了用于创建 CI/CD 管道的生态系统工具,在 VM 或者是裸机上面,Kubernetes 作为一个部署平台如何部署,以及描述了 Kubernetes 架构概览,帮助创建、部署你自己的集群。

前言

2012年,我们公司开始使用 OpenStack,很快,我们的内部环境改变了。我们最初的目标是将硬件虚拟化,OpenStack 帮助我们实现了这个目标。但是,随着云技术和容器技术的发展,我们的平台需要更多的功能——比如,能够发布服务到不同的平台。这篇帖子会举出一些例子——将应用程序运行到 OpenStack 上,并且输出到 Kubernetes 上。

代码生命周期

项目的目标是为平台创建镜像(从单个应用程序代码),并且部署这些镜像到每个平台上。比如,当代码库、裸机镜像、Docker 容器,CI 工具创建的虚拟镜像里面的代码发生改变的时候,那就 push 到我们的镜像库,然后再部署到每个基础设施平台。

我们会在我们的 CICD 管道使用以下产品:

镜像创建。每个镜像创建的工作已经展示在以下图表中。


VM 镜像创建


  1. push 代码到 Github

  2. hook 到 Jenkins master

  3. 在 Jenkins slave 发布 Job

  4. 检查 Packer 库

  5. 运行 Service Job

  6. 用 build 脚本运行 Packer

  7. Packer 为 OpenStack Glance 启动 VM

  8. 配置 VM,并且安装需要的应用

  9. 创建 snapshot 和 register 到 glance

  10. 从 Glance 下载新创建的镜像

  11. 上传镜像到 Artifactory


裸机镜像创建

  1. push 代码到 Github

  2. hook 到 Jenkins master

  3. 在 Jenkins slave 发布 Job

  4. 检查 Packer 库

  5. 运行 Service Job

  6. 下载 build 脚本创建的 base 裸机

  7. 用 Packer 创建脚本执行 diskimage-builder,一起创建裸机镜像

  8. 上传新创建的镜像到 Glance

  9. 上传镜像到 Artifactory


容器镜像创建

  1. push 代码到 Github

  2. hook 到 Jenkins master

  3. 在 Jenkins slave 发布 Job

  4. 检查 Dockerfile 库

  5. 运行 Service Job

  6. 从 Artifactory 下载基础 Docker 镜像

  7. 如果在 Artifactory 找不到 Docker 镜像,那就从 Docker Hub下载

  8. 执行 Docker build,并且创建镜像

  9. 上传镜像到 Artifactory

平台架构

现在让我们重点关注一下容器是如何工作的,梳理一遍我们使用 Kubernetes 作为部署平台的流程。这个平台的架构如下图所示。


为了使用 Container Host(OpenStack 实例),我们利用 CentOS,安装 Docker,Kubernetes,Calico,etcd 等等。当然,Kubernetes 上可以运行各种各样的容器。事实上,OpenStack 可以像容器一样运行在 Kubernetes 上。也就是,在 OpenStack 的 Kubernetes 上运行 OpenStack。我们目前有30多个 OpenStack 集群,所以管理和操作起来都挺困难。这样的情况下,我们想要创建一个简单的、基于 OpenStack 的集群,为 Kubernetes 提供所需的基础功能,并且使我们的 OpenStack 环境易于管理。

Kubernetes 架构

现在来更详尽地解释一下 Kubernetes 架构。架构图如下所示:


租户隔离

为了启用多租户使用,比如 OpenStack,我们利用 OpenStack Keystone 来进行验证和授权。

验证

有了 Kubernetes 插件,OpenStack Keystone 可以被用来验证。通过在 Kubernetes API 服务器上添加 Keystone 的 authURL,我们可以使用 OpenStack OS_USERNAME 和 OS_PASSWORD 这些(变量)来验证。

授权

我们目前使用的是 Kubernetes 授权的 ABAC(Attribute-Based Access Control)模式。我们跟咨询公司 Solinea 合作,他们帮忙创建了一个实用工具来转换 OpenStack 的 Keystone 用户和租户信息,将它们转移到 Kubernetes JSON 策略文件,这个文件可以映射 Kubernetes ABAC 用户和 namespace 信息到 OpenStack 租户。当发布 Kubernetes API Service 的时候,我们就指定策略文件。这个实用工具也从租户信息创建 namespace。

这些配置启用 Kubernetes 来验证,以及 OpenStack Keystone,在授权的 namespace 中操作。

数据卷和持久性数据

Kubernetes 提供持久性数据卷子系统,为 Pods 作为持久性存储运行。“持久性数据卷”能够支持云提供商存储,利用 OpenStack 的 cinder-volume,使用 OpenStack 作为云提供商。

网络

Flannel 和各种不同的网络项目在 Kubernetes 中以网络模型的形式存在,为此,我们曾经使用过 Calico 项目。日本雅虎推荐用L3网络(比如 redistributeARP 有效值或者 IP CLOS 网络),IP CLOS 网络或者 Calico 项目创建数据中心,以此来跟这个方向相匹配。

当我们申请像 Flannel 这样的覆盖网络时,我们没有获得 Kubernetes 集群外部访问 Pod IP 的权限。但是 Calico 项目做到了。我们也为负载均衡器使用 Calico 项目,这个我们之后会讲。

在 Calico 项目中,通过 BGP 运行在 BIRD 容器(OSS 路由软件)上,来broadcasting 产品IP。通过在容器化的 BIRD 上(BIRD 为一款 OSS 路由软件)运行 BGP,从而进行广播同步 IP 信息。默认设置下,它只会在集群内广播。我们通过在集群外设置对等路由器,它使得访问集群外部成为可能。

外部 Service 负载均衡器

Kubernetes 的外部 service 负载均衡器有很多选择(从集群外部访问 service),比如 NodePort,LoadBalance 和 Ingress。我们找不到可以准确匹配我们需求的解决方案。但是,我们发现了一个匹配我们需求的解决方案,就是通过 broadcasting 集群 IP 实现,这个集群 IP 是用于内部 service 负载均衡器(从集群内部访问服务),以及 Callico BGP 项目,从 Layer4 的集群外部启用了外部负载均衡器。

服务发现

通过 Sky DNS 插件,在 Kubernetes 实现服务发现也是可能的。作为集群内部服务,它在集群中类似于 ClusterIP 一样可访问。通过 BGP 来 broadcasting  ClusterIP,从集群外部命名解决工作。

Kubernetes 和镜像创建工作的联合,我们创建了以下工具链,使 push、部署代码变得容易。

总结

总而言之,通过将镜像创建和 Kubernetes 结合,日本雅虎在 Google 和 Solinea 的帮助下,成功地创建了自动工具链,使得在多租户,authn/authz,存储,网络,服务和服务发现这些过程,从代码的 push 到部署这整个过程都变得容易。

我们希望你找到关于生态系统工具的讨论,这些工具用于创建 CI/CD 管道, Kubernetes 作为在 VM 或者裸机上的部署平台,Kubernetes 架构整体概览就是为了帮助你构造部署你自己的集群。

文章由才云科技翻译,如若转载,必须注明转载自“才云科技”。查看原文请点击“阅读原文”。




推荐阅读
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • GAMETECH腾讯云游戏行业技术沙龙成都站圆满落幕
    11月13日,由腾讯云主办、游戏茶馆协办的2020年首场GAME-TECH腾讯云游戏行业技术沙龙在成都圆满落幕。本次沙龙邀请了腾讯云游戏行业解决方案总监宋永周、腾讯云游戏行业高级解决方案架构师曾梓恩、腾讯云游戏行业高级产品架构师郑晓曦、腾讯云游戏行业高级解决方案架构师温球良和天美L1(王者荣耀)服务器技术副总监杨光,为参会同行们带来了干货满满的技术建议。本文介绍了腾讯云游戏云的优势和为不同游戏研运场景提供的服务。腾讯云在中国游戏云服务市场领跑,成为众多游戏开发者的合作伙伴。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
author-avatar
手机用户2502931035
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有