OpenStack与Kubernetes融合架构下的优化实践

简介: 如果你想使用Kubernetes来构建你的应用程序环境,通过OpenStack来部署Kubernetes其架构是一种推荐的方式,本文将与大家分享Kubernetes在OpenStack上的编排方式与其优化方法。

如果你想使用Kubernetes来构建你的应用程序环境,通过OpenStack来部署Kubernetes其架构是一种推荐的方式,本文将与大家分享Kubernetes在OpenStack上的编排方式与其优化方法。

以下介绍5种针对Kubernetes的调优方式,希望对大家有所帮助。

接下来让我们从架构分析开始,了解为什么需要这样的架构存在,解决什么样的问题。接着了解优化的目的,我们深入探讨几个优化方式与选项。结合部分实际案例或测试来优化后的改善。最后探讨后续发展与计划。



架构分析

容器的存在是为了解决无状态(stateless)的服务占用系统资源的问题。针对网络应用程序来说,即能减少虚拟化所带来的消耗,成为效能优化的一大亮点。在容器之上应用程序仍需与多个容器共存,甚至互相通信。

因此Kubernetes、Mesos、Swarm等容器编排服务就成为新世代架构的宠儿。 Kubernetes概念架构如下图所示:

在Kubernetes架构下,提供docker容器网络与周期管理。通过COE(Container Orchestration Engine)管理的容器群,不但享受便利,也拥有快速编排应用程序架构的优势。

但通过下图(Cloud Native Landscape by Cloud Native Computing Foundation)可以认识到:Kubernetes还需要建立在一个可以良好地承载如此多样性服务的基处建设(即IaaS),而在图中最底下的基础架构(Infrastructure)你会选择那个平台?

以现今的云应用,相信多数私有云会选择以OpenStack作为基础框架,公有云也有不少案例使用OpenStack。而在选好的框架上承载相应的应用程序。

通过上面一起思考出的组合,若各位已经熟悉Magnum开源项目或是企业Kubernetes产品(例如ESContainer),其提供你在OpenStack架构上想要的Kubernetes框架的方式。

另外此架构也还有几个优点供大家参考:通过此架构可以达成Kubernetes全自动化管理,通过此架构可以提供完整多租户框架。

在这样的整体架构规划下,可以深入讨论以下几大重点:网络、运算、储存与编排。想必大家通过之前网络调优的干货(http://www.easystack.cn/en/technical_share/748/ )与NUMA相关处理器技术干货(http://www.easystack.cn/en/ technical_share/700/ )已经对自己的环境的基础架构有相当的了解,甚至已经着手进行优化。

接下来正是文章想要突显的重点,如何从编排下手让OpenStack上的Kubernetes加速?如何调优?当你已经千方百计优化了你的应用程序时,还有那些方式可以让效能更上一层楼?

优化项目-调优编排

编排项目对于在OpenStack构建任何应用程序都具有重要角色,在下图(Magnum的架构图)中可以看见Heat (编排服务)对于整体流程的重要性。通过Heat脚本可以布署集群与安装任何应用程序于集群上。因此选择调优Heat绝对是值得参考的选项。

调优1:开启convergence模式

若你的OpenStack环境已经到了Mitaka或是以上版本。则建议你将convergence模式打开(若版本为Newton以上版本,预设已经是开启)。打开方式为在`/etc/heat/heat.conf`档案下加入`convergence_engine = True`的选项。

开启后对于操作不会有任何改变,使用者仍可以用原先的操作模式与脚本建立编排资源。原先已经建立的编排资源则会维持在非Convergence模式下继续运行。而新建立的编排资源则会以Convergence模式维运。

下图为比较建立100个简单的资源,200个简单的资源,与100个复杂资源时在Convergence模式或是非Convergence模式下的效能。可以观察到,越复杂的资源越需要更多的时间来完成,越容易在Convergence模式下获得大幅的改善。

尤其是针对像是Kubernetes等需要建立多台Nova Instance (虚拟机或裸机)的状况下,通过模式转换而获得的效率改善理应更显著(Kubernetes一般架构属于复杂度较高的资源,因此可以参考图中复杂度高的状况比较表)。

什么是Convergence模式?

谈到这里,应该有不少开发者对Convergence相当陌生。 Convergence比起旧架构在服务之间的差异只有新增了一个worker服务。但是实际上程序流程完全不同。如果我们如下指令建立一个Kubernetes 群集。

如果是旧有的架构指令会被转为API call,再通过RPC交由其中的一个后端Engine服务由头到尾处理整个Kubernetes资源建构。

但如下图在Convergence模式下,Kubernetes脚本抵达后端服务(Engine)时,会依照资源立刻被分成单一工作,交付给其他后端服务并行执行。

也就是说,若后端服务数量允许,所有的Kubernetes master与minion都可以并行运行在独立的后端服务,并且只需要你花费部署一台节点的时间,就可以将整个集群都建置完毕。

过程中Heat服务会在数据库中建立一张叫做Syncpoint的表,用来确认与取得操作的权限。并且存入资源相依性的连结数据以保证有资源创建流程(像是确保Cinder Volume挂载操作,必须在Nova将Kubernetes节点与Cinder Volume创建出来后才能执行)。

调优2:调整`num_engine_workers`

Engine worker数量调整,指的就是我们在调优1时提及的后端服务数量。通过下图架构可以看到,当API服务收到请求,并通过RPC往后方传送时,是在多个Engine worker中,由抢先接收到者,作为处理该请求的后端。

而这个调优设定可以用来决定每一个实体的Heat后端节点上要跑几个后端服务程序。如若环境(在`/etc/heat/heat.conf`文件)尚未设定此参数,预设是按照CPU数量来调整单一节点上Heat的服务程序数量。

但是注意到,若你的电脑为HPC时建议将数量调高,因为你拥有较为强大的网络、运算、与储存资源,可以尝试由1:1.5(cpu:num_engine_workers)开始测试效能,在往上调整,直到你的Kubernetes集群的布署效能达到顶峰。

相对地,若你的CPU数量过多,其他部分的资源并未规划为高效能状况(可能发生在用来提供运算的节点上),建议尝试1.25:1(cpu:num_engine_workers)开始测试效能,并往下调整(num_engine_workers数量),直到你的环境取得更好的整体效能。

注意到单一节点上的编排服务程序数量,并不等于多节点上的整合。因此调整到适当的数量,也等同于提供其他程序(RPC、数据库、其他服务程序)更多资源的使用空间。

尤其是像布署Kubernetes环境,将会同时调用Cinder管理储存, Neutron管理网络Nova管理虚机或裸机。因此资源分配更应该微调以获取更好的整体效能。

调优3:开启高速缓存

多数的OpenStack服务都具有一定数量的缓存机制,若内存空间允许建议挑选部分服务(比如编排服务)开启缓存机制,开启方式为将缓存设定写入heat.conf内。

至于写入选项可参考网站:https://docs.openstack.org/developer/oslo.cache/opts.html 。若无特别想设定的参数,可以直接在[cache]下新增enabled=True即可。

至于为什么在此特别提及此设定,因为当你要布署或是扩展你的Kubernetes集群时,在资源编排上都会是以资源群组为单位,比如说要再扩展出新的50台Kubernetes minion节点。

在资源编排时,这50台属于同一Kubernetes丛集的minion节点将会被视为同一个资源群集,并在编排时一同处理。因此若能将高速缓存开启,在这案例上就可以直接节省49次等同于98%的部分操作。

目前在编排服务内,以下几个主要环节已经设有快取机制,包含Stack信息数据,Resource信息数据,Constraint数据(通过呼叫其他项目CLI以认证部分参数。例如当K8S master参数有Floating ip时,Constraint就会通过Neutron CLI找寻Floating ip数据作为参数认证依据)等。

调优4:允许OpenStack直接操作Kubernetes

在实际使用Kubernetes时,许多时候需要临时或一次性变更多个 Kubernetes集群,或是对单一个大型的Kubernetes集群进行多次操作或复杂操作,其实也可以纳入OpenStack管理范围作一次性操作,进而完成所有任务。

在编排服务中有能安装与管理应用程序的能力,在提供镜像时,只需要在里面多加入kubelet hook就可以了。后续只需通过更改编排脚本即可进行操作。

对于不知道hook是什么的读者,可以理解基本上它就是一个在os-collect-config协助将文件(例如yaml文件)转入Kubernetes节点上之后,通过节点上kubelet指令执行操作。流程如下图所示:

当你计划开发Kubernetes自动化管理时,除了将kubelet hook加入镜像内,也要注意到kubelet执行后,必须要能够发送消息给Heat或Zaqar等等(看你在编排脚本撰写时的设定),因此请务必打开部分防火墙设定(像是80或8080等等)允许消息发送。

Heat的自动化软件布署与设定,通过同一个用来设定K8S的脚本即可设定相关资源。如果你想要将软件布署加入你的K8S脚本中,可以参考以下脚本片段。

当中`configure_master_deployment`就是可以将单一布署脚本应用于多个节点上的`OS::Heat::SoftwareDeploymentGroup`资源。

其工作会将`OS::Heat::SoftwareConfig`中设定的脚本与脚本形态(Ansible, script, Puppet, Kubelet, etc.)通过K8S节点(你的OS::Nova::Server资源)中的os -collect-config将脚本信息拉进节点中(此为随时监听动作,可以调整监听区间,预设为30秒),再通过Kubelet hook呼叫Kubelet指令,执行脚本。

任何执行结果或是错误状况。都会通过消息回传给Heat服务。另外有关于详细kubelet hook信息可以参考:https://github.com/openstack/heat-agents/tree/master/heat-config-kubelet 。

在编排脚本上加入:

kubelet_config:

type: OS::Heat::StructuredConfig

properties: group: kubelet

options:

images_timeout: 600

containers_timeout: 120

poll_period: 10

config:

version: v1beta2

containers: ...

即可以操作kubelet ,你也可以将cofig部分换成yaml文件输入。至于在编排脚本上完整的使用方式,可以参考https://github.com/openstack/heat-templates/blob/master/hot/software-config/example-templates/example-kubelet-template.yaml

调优5 :调优镜像

对于Kubernetes的优势之一即将服务都转进容器内执行,然而目前许多大型环境遗忘了应该建制Kubernetes的镜像优化。目前有几家知名的欧洲大型研究机构,就在对他们OpenStack云上的Kubernetes,进行这项优化。

优化方向有2:

1. 替代原先使用的镜像,将更适合容器的小型镜像作为整体建置选择。

2.将上面提及编排时所需要的hooks加入映像档。在此提供相关的Dockerfile作为参考。

(https://github.com/openstack/tripleo-common/blob/master/heat_docker_agent/Dockerfile)

总结

通过将上面5项调优(调优1:开启convergence模式;调优2:调整`num_engine_workers`;调优3:开启高速缓存;调优4:允许OpenStack直接操作Kubernetes;调优5:调优镜像)应用到你的K8S环境中,在执行布署或扩展(或缩编)时,会产生明显的效能改善。

当K8S布署下去后,实体网络调整变得非常困难。若你选择运用OpenStack编排管理,在任何环境中改变节点信息,包含网络,群集实体配置,储存等等就会变成更为简单的操作。

你也可以通过专门负责资源管理的编排服务,强化资源布署效能。因为你绝对不可能将你的运营中的容器化应用程序布署在只有一个单一节点的K8S,你更不希望因为任何人员操作时修改遗漏,导致整个群集停止服务。通过编排就变成是个较为符合自动化目标的选项。

除了上面5项建议外,也鼓励你将你的问题、想法、解法、或是其他任何帮助发到社区上或是联系我们,由社区作为源头,我们有能力直接改变源头以继续强化Kubernetes与OpenStack的整合与优化,我们努力将源头技术优化了,不久一定产生更多的优化选项。最后受惠的,相信就是你正在运营的环境。

本文转自中文社区-OpenStack与Kubernetes融合架构下的优化实践

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
20天前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
7天前
|
机器学习/深度学习 算法 数据可视化
基于深度混合架构的智能量化交易系统研究: 融合SSDA与LSTM自编码器的特征提取与决策优化方法
本文探讨了在量化交易中结合时序特征和静态特征的混合建模方法。通过整合堆叠稀疏降噪自编码器(SSDA)和基于LSTM的自编码器(LSTM-AE),构建了一个能够全面捕捉市场动态特性的交易系统。SSDA通过降噪技术提取股票数据的鲁棒表示,LSTM-AE则专注于捕捉市场的时序依赖关系。系统采用A2C算法进行强化学习,通过多维度的奖励计算机制,实现了在可接受的风险水平下最大化收益的目标。实验结果显示,该系统在不同波动特征的股票上表现出差异化的适应能力,特别是在存在明确市场趋势的情况下,决策准确性较高。
31 5
基于深度混合架构的智能量化交易系统研究: 融合SSDA与LSTM自编码器的特征提取与决策优化方法
|
7天前
|
弹性计算 Java 关系型数据库
Web应用上云经典架构实践教学
Web应用上云经典架构实践教学
Web应用上云经典架构实践教学
|
15天前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
15天前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
21天前
|
消息中间件 运维 安全
后端开发中的微服务架构实践与挑战####
在数字化转型的浪潮中,微服务架构凭借其高度的灵活性和可扩展性,成为众多企业重构后端系统的首选方案。本文将深入探讨微服务的核心概念、设计原则、关键技术选型及在实际项目实施过程中面临的挑战与解决方案,旨在为开发者提供一套实用的微服务架构落地指南。我们将从理论框架出发,逐步深入至技术细节,最终通过案例分析,揭示如何在复杂业务场景下有效应用微服务,提升系统的整体性能与稳定性。 ####
33 1
|
22天前
|
消息中间件 运维 API
后端开发中的微服务架构实践####
本文深入探讨了微服务架构在后端开发中的应用,从其定义、优势到实际案例分析,全面解析了如何有效实施微服务以提升系统的可维护性、扩展性和灵活性。不同于传统摘要的概述性质,本摘要旨在激发读者对微服务架构深度探索的兴趣,通过提出问题而非直接给出答案的方式,引导读者深入
41 1
|
20天前
|
Cloud Native API 持续交付
云原生架构下的微服务治理策略与实践####
本文旨在探讨云原生环境下微服务架构的治理策略,通过分析当前面临的挑战,提出一系列实用的解决方案。我们将深入讨论如何利用容器化、服务网格(Service Mesh)等先进技术手段,提升微服务系统的可管理性、可扩展性和容错能力。此外,还将分享一些来自一线项目的经验教训,帮助读者更好地理解和应用这些理论到实际工作中去。 ####
36 0
|
网络协议 Linux 网络安全
openstack 云平台一体化部署(超详细)
openstack 云平台一体化部署(超详细)
1351 0
openstack 云平台一体化部署(超详细)
|
4月前
|
消息中间件 缓存 Shell
跟我一起来学OpenStack部署
跟我一起来学OpenStack部署
352 0

热门文章

最新文章