这篇文章是一岁多。老文章可能包含过时的内容。检查页面中的信息出版以来并没有成为不正确的。

我们如何构架和运行在OpenStack Kubernetes规模在雅虎!日本

编者按:今天的文章是由基础设施工程团队在雅虎!日本,谈论他们如何OpenStack Kubernetes上运行。这篇文章已被翻译和编辑上下文——出版许可雅虎日本工程博客

介绍
这篇文章概述了雅虎!日本,在谷歌和Solinea的帮助下,建立了一个自动化工具链“一键式”代码部署到运行在OpenStack Kubernetes。

我们还将覆盖的基本安全、网络、存储、和性能需要确保生产准备。

最后,我们将讨论生态系统工具用于构建CI / CD管道,Kubernetes部署平台在vm /裸金属,和Kubernetes架构的概述来帮助你师和部署自己的集群。

前言
自2012年公司开始使用OpenStack,我们的内部环境很快就发生了变化。我们最初的目标与OpenStack虚拟化硬件实现。然而,由于云计算和容器技术的进步,我们需要在各种平台上发射服务的能力。这篇文章将提供我们的例子的应用程序运行在OpenStack Kubernetes和移植。

编码生命周期
这个项目的目标是为所有必需的平台创建图像从一个应用程序代码,并部署这些图像上每个平台。例如,当代码更改注册表的代码,裸金属图像,码头工人容器和创建VM映像CI(持续集成)工具,推进我们的图像注册表,然后部署到每个基础设施平台。

我们在蔡先生管道使用以下产品:

函数 产品
代码注册表 GitHub企业
CI工具 詹金斯
图像注册表 Artifactory
Bug跟踪系统 JIRA
裸金属平台部署 OpenStack讽刺
部署虚拟机平台 OpenStack
部署容器平台 Kubernetes

形象的创造。每个图像创建工作流是下一个图所示。

VM映像创建:

  1. 1。把代码GitHub
  2. 2。钩詹金斯主
  3. 3所示。在詹金斯发射工作的奴隶
  4. 4所示。检验封隔器库
  5. 5。运行服务工作
  6. 6。通过构建脚本执行封隔器
  7. 7所示。封隔器启动VM OpenStack一瞥
  8. 8。配置虚拟机并安装所需的应用程序
  9. 9。10.10创建快照和注册一眼。从看11.11下载新创建的图像。Artifactory上传图像

裸金属图像创建:

  1. 1。把代码GitHub
  2. 2。钩詹金斯主
  3. 3所示。在詹金斯发射工作的奴隶
  4. 4所示。检验封隔器库
  5. 5。运行服务工作
  6. 6。下载基本裸金属图像构建脚本
  7. 7所示。与封隔器创建构建脚本执行diskimage-builder裸金属图像
  8. 8。上传新创建的图像
  9. 9。Artifactory上传图像

容器形象塑造:

  1. 1。把代码GitHub
  2. 2。钩詹金斯主
  3. 3所示。在詹金斯发射工作的奴隶
  4. 4所示。结帐Dockerfile库
  5. 5。运行服务工作
  6. 6。从Artifactory下载基地码头工人的形象
  7. 7所示。如果没有在Artifactory发现码头工人的形象,从码头工人下载中心
  8. 8。码头工人执行构建和创建图像
  9. 9。Artifactory上传图像

平台架构。

让我们关注工作流容器走过我们如何使用Kubernetes部署平台。这个平台架构如下。

函数 产品
基础设施服务 OpenStack
容器的主机 CentOS
容器集群管理器 Kubernetes
集装箱网络 项目有斑点的
容器引擎 码头工人
容器注册表 Artifactory
服务注册中心 etcd
源代码管理 GitHub企业
CI工具 詹金斯
基础设施配置 起程拓殖
日志记录 Fluentd、Elasticsearch Kibana
指标 Heapster、Influxdb Grafana
服务监控 普罗米修斯

我们使用CentOS容器主机(OpenStack实例)并安装码头工人,Kubernetes,棉布,etcd等等。当然,可以在Kubernetes运行各种容器应用程序。事实上,我们OpenStack作为其中的一个应用程序运行。没错,OpenStack Kubernetes OpenStack。我们目前有30多个OpenStack集群,迅速成为很难管理和操作。因此,我们想要创建一个简单的,基地OpenStack集群提供Kubernetes所需的基本功能和使我们OpenStack环境易于管理。

Kubernetes架构

让我解释Kubernetes架构更详细一些。架构图如下。

|产品描述| | | OpenStack梯形| Kubernetes身份验证和授权| | OpenStack煤渣|外部卷使用Pod(多个容器的分组)| | kube-apiserver |配置和验证对象像豆荚或服务(定义访问服务的容器)通过REST API | | kube-scheduler |豆荚分配给每个节点| | kube-controller-manager |执行状态管理,管理复制控制器| | kubelet |运行在每个节点代理和管理Pod | |棉布|启用inter-Pod连接使用边界网关协议| | kube-proxy | iptable NAT配置表配置IP和负载平衡(ClusterIP) | | etcd |变电站分发给存储Kubernetes和棉布信息| | etcd-proxy |在每个节点上运行,客户端请求转移到etcd集群|

租户隔离启用多租户使用像OpenStack,我们利用OpenStack梯形进行身份验证和授权。

身份验证OpenStack梯形Kubernetes插件,可用于身份验证。通过添加authURL梯形在启动Kubernetes API的服务器,我们可以使用OpenStack OS_USERNAME和OS_PASSWORD进行身份验证。授权我们目前使用的ABAC(基于属性的访问控制)模式Kubernetes授权。Solinea我们与咨询公司合作,帮助创建一个实用程序OpenStack关键用户和租户信息转换为Kubernetes JSON策略文件映射Kubernetes ABAC OpenStack租户用户和名称空间信息。然后我们指定策略文件时启动Kubernetes API服务器。这个工具也从租户信息创建名称空间。这些配置使Kubernetes与OpenStack梯形和操作认证授权的名称空间。卷和数据持久性Kubernetes提供了“持久卷”子系统为吊舱是持久性存储。“持久卷”是支持云提供商的存储能力,可以利用OpenStack cinder-volume利用OpenStack云提供商。网络法兰绒和各种网络存在作为Kubernetes网络模型,我们使用棉布为这个项目。雅虎日本建议与纯L3建立数据中心网络重新分配ARP验证或IP秘密地网络,项目棉布匹配这个方向。当我们运用叠加模型像法兰绒,我们不能访问Pod以外的IP Kubernetes集群。但项目棉布使这一切成为可能。我们也使用项目棉布负载平衡我们稍后描述。

在项目棉布、广播生产IP边界网关协议在鸟容器(OSS路由软件)Kubernetes每个节点上启动。默认情况下,它仅在集群播出。通过设置凝视路由器以外的集群,它可以访问一个仓以外的集群。外部服务负载均衡

有多种选择的外部服务负载平衡器(从集群之外的服务)等Kubernetes NodePort, loadbalance和入口。我们找不到解决方案,完全匹配的要求。然而,我们找到了一个解决办法,几乎匹配我们的要求通过传播集群IP用于内部服务负载平衡(从内部访问服务集群)与项目棉布边界网关协议使外部负载平衡集群的以外的第四层。

服务发现

服务发现是可能的在Kubernetes利用SkyDNS插件。这是作为集群内部提供服务,它可以在像ClusterIP集群。通过广播ClusterIP边界网关协议、名称解析作品以外的集群。通过结合图像创建工作流和Kubernetes,我们建立了以下工具链很容易从推动部署代码。

总结

总之,通过结合创建工作流和形象Kubernetes,雅虎日本的帮助谷歌Solinea,成功地建立了一个自动化工具链使它容易从代码推动部署,在多租户,authn / authz、存储、网络、生产部署的服务发现和其他必要的因素。我们希望你发现的讨论生态系统工具用于构建CI / CD管道,Kubernetes部署平台在vm /裸机和Kubernetes架构的概述来帮助你师和部署自己的集群。感谢所有人的帮助与这个项目。——Norifumi Matsuya, Hirotaka市川Masaharu宫本茂供养和木下光男。这篇文章已被翻译和编辑上下文——出版许可雅虎日本工程师的博客这是一分之一系列文章关注Kubernetes。