这篇文章是一岁多。老文章可能包含过时的内容。检查页面中的信息出版以来并没有成为不正确的。
我们如何构架和运行在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。把代码GitHub
- 2。钩詹金斯主
- 3所示。在詹金斯发射工作的奴隶
- 4所示。检验封隔器库
- 5。运行服务工作
- 6。通过构建脚本执行封隔器
- 7所示。封隔器启动VM OpenStack一瞥
- 8。配置虚拟机并安装所需的应用程序
- 9。10.10创建快照和注册一眼。从看11.11下载新创建的图像。Artifactory上传图像
裸金属图像创建:
- 1。把代码GitHub
- 2。钩詹金斯主
- 3所示。在詹金斯发射工作的奴隶
- 4所示。检验封隔器库
- 5。运行服务工作
- 6。下载基本裸金属图像构建脚本
- 7所示。与封隔器创建构建脚本执行diskimage-builder裸金属图像
- 8。上传新创建的图像
- 9。Artifactory上传图像
容器形象塑造:
- 1。把代码GitHub
- 2。钩詹金斯主
- 3所示。在詹金斯发射工作的奴隶
- 4所示。结帐Dockerfile库
- 5。运行服务工作
- 6。从Artifactory下载基地码头工人的形象
- 7所示。如果没有在Artifactory发现码头工人的形象,从码头工人下载中心
- 8。码头工人执行构建和创建图像
- 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。