Kubernetes 是一种流行的容器编排工具,它可以帮助组织管理和部署应用程序。但是,Kubernetes 集群的运行可能会很昂贵,尤其是对于大规模的集群。本文将探讨优化 Kubernetes 集群以降低服务器开支的几种方法。
1. 节点大小优化
节点大小是影响 Kubernetes 集群成本的重要因素。选择太大的节点会造成资源浪费,而选择太小的节点则会导致性能下降。为了优化节点大小,请考虑以下几个方面:
- 应用程序要求:根据应用程序的内存、CPU 和存储需求选择合适的节点大小。
- 工作负载类型:对于容器密集型工作负载,选择较小的节点大小可以提高资源利用率。
- 预留节点:通过预留节点,您可以确保应用程序获得所需资源,从而避免不必要的超额使用。
2. 节点池使用率监控
监控节点池的使用率至关重要。如果节点池的利用率较低,则可以考虑缩减节点池或使用低成本的节点类型。以下是监控节点池使用率的一些方法:
- 使用 Kubernetes 仪表板或 Prometheus 等监控工具。
- 设置警报以在利用率低于特定阈值时通知您。
- 利用 Kubernetes 的自动伸缩功能,根据需求自动调整节点数量。
3. 容器优化
优化容器可以减少运行 Kubernetes 集群的资源需求。一些优化容器的方法包括:
- 使用最小的基础镜像:选择大小较小的基础镜像,例如 Alpine 或 BusyBox。
- 移除不必要的依赖项:识别并移除不需要的程序包和库。
- 使用多阶段构建:将构建过程分解为多个阶段,以优化最终镜像大小。
4. 使用集群自动扩缩容
集群自动扩缩容是一种根据工作负载需求自动调整集群大小的功能。当工作负载增加时,它会添加更多节点,而在工作负载减少时,它会删除不必要的节点。这可以显着降低闲置容量的成本。
5. 使用预先设置节点组
预先设置节点组可以创建一个具有预定义配置的节点池。这可以简化集群管理,并确保节点始终符合您的应用程序要求。预先设置节点组还可以帮助您预留特定类型的节点,以满足特定工作负载的需求。
6. 使用污点和容忍度
污点和容忍度允许您将限制附加到节点,并控制特定节点上可以运行的 Pod 类型。通过使用污点和容忍度,您可以将关键 Pod 隔离到专用节点上,并防止它们受到资源争用的影响。
7. 使用日志聚合和监控
Kubernetes 提供了日志聚合和监控工具,可以帮助您了解集群的运行状况并识别优化机会。通过监控指标和日志,您可以了解资源使用模式,并找出浪费或效率低下的领域。
8. 使用云提供商的优化功能
许多云提供商提供专为优化 Kubernetes 集群而设计的附加功能。这些功能包括:
- 云优化的镜像:预先配置并针对云平台进行了优化的基础镜像。
- 托管 Kubernetes 服务:托管服务可以处理集群管理的复杂性,从而降低维护成本。
- 预设节点配置:您可以选择针对特定工作负载进行了优化且成本效益高的预设节点配置。
结论
通过遵循这些策略,您可以有效地优化 Kubernetes 集群,降低服务器开支。定期监控集群使用情况并根据需要调整配置至关重要。通过持续优化,您可以确保您的 Kubernetes 集群既高效又经济。
Alluxio 助力 Kubernetes,加速云端深度学习
加速云端深度学习:Alluxio 助力 Kubernetes人工智能领域近年来火热,推动其快速演进的关键因素包括英伟达 GPU 在内的异构算力、TensorFlow 和 Pytorch 等机器学习框架,以及海量数据集。
同时,Kubernetes 和 Docker 为代表的容器化基础架构成为数据科学家的首选,因其标准化和规模化特性。
TensorFlow 和 Pytorch 的容器版本依托容器标准化,而以 Kubernetes 为基础的集群调度技术则使大规模分布式训练成为可能。
观察下图,模拟数据下的深度学习模型训练速度。
从训练时间来看,单卡 P100 需要 108 个小时,4 天半的时间;而 V100 的 32 卡分布式训练只需 1 小时,成本方面,单卡 P100 接近 1400 元,8 卡 V100 则为 600 元,成本大幅降低。
更新的 GPU 硬件更高效且更经济。
Alluxio 是一个面向 AI 和大数据应用的分布式内存级数据编排系统,非常适合作为分布式缓存加速应用。
该项目由加州大学 Berkeley 分校 AMPLab 博士李浩源创立,最初名为 Tachyon。
通过顶级风险投资 Andreessen Horowitz 的投资,项目团队在旧金山湾区成立了 Alluxio 公司。
在大数据和 AI 生态圈中,Alluxio 位于数据编排层,对接计算应用如 Spark、Presto、Hive、Tensorflow 等,以及存储如阿里 OSS、HDFS。
通过这一层数据编排,实现计算和存储解耦,使计算和存储独立部署和演进,数据应用无需关心存储的具体类型、协议、版本、地理位置等,而存储则能灵活高效地供各种应用消费。
Alluxio 的核心功能包括:1. 提供分布式数据缓存,加速数据密集型应用。
读取非本地数据源时,Alluxio 可加载原始文件,分片并存储在靠近应用的 Alluxio 服务器上,增强应用数据本地性。
2. 提供灵活多样的数据访问 API,包括大数据领域常用的 HDFS 接口和 AI 训练场景常用的 POSIX 文件系统接口。
3. 统一文件系统抽象,将不同存储系统以透明方式接入一个文件系统,简化复杂数据平台的维护。
在云端 AI 训练场景,Alluxio 可以实现内存加速以满足 GPU 高吞吐的需求,使用 Alluxio 构建分布式缓存,训练容器和 Alluxio 工作容器间以高速率交换数据,显著提升效率和管理便捷性。
要在 Kubernetes 中使用 Alluxio,部署到 K8s 首先需要提供 Helmchart,统一配置用户身份、参数和分层缓存。
Alluxio 的架构包括 Master 以 statefulset 模式部署,确保稳定性,而 Worker 和 Fuse 以 daemonset 模式部署,并通过 podaffinity 绑定,实现数据亲和性。
Alluxio 支持 AI 模型训练场景的挑战在于,随着 GPU 硬件升级,数据存储访问压力增大。
性能评估显示,GPU 数量增加到 4 时,使用 Alluxio 的处理速度从 4981 images/second 降至 3762 images/second,性能不足合成数据的 30%。
优化策略包括缓存元数据减少 gRPC 交互、控制缓存行为、FUSE 性能调优等。
总结优化后,ResNet50 训练性能提升 236.1%,扩展性问题解决,训练速度扩展至四机八卡,性能损失为 3.29%,相较于 SSD 云盘,Alluxio 性能提升 70.1%。
Alluxio 与 Kubernetes 结合,为云端深度学习提供高效数据管理和加速支持。
作者简介:范斌,Alluxio 创始成员,曾负责架构设计,现关注开源社区运营;车漾,阿里云容器服务团队成员,关注云原生技术与 AI、大数据场景结合。
米哈游大数据云原生实践
近年来,云原生技术的快速发展促使越来越多的企业转向云原生架构,以提升应用部署与运行的效率与灵活性。
米哈游,面对业务的高速增长和大数据离线数据存储量的迅速增长,面临着原有架构在弹性、运维和资源利用率上的挑战。
为此,米哈游于2022年下半年着手调研并最终实施了Spark on K8s + OSS-HDFS方案,以实现大数据基础架构的云原生化。
这一方案在生产环境中稳定运行了一年左右,带来了显著的收益,包括弹性计算能力的增强、成本节约以及存算分离的优化。
弹性计算:通过Kubernetes集群的弹性能力,米哈游能够轻松应对游戏业务周期性更新、活动启动和新游戏上线带来的离线计算资源需求波动,避免资源浪费。
成本节约:依托阿里云的ACK(Kubernetes)集群的弹性资源管理和ECI Spot实例的高效利用,米哈游实现了成本的显著降低。
存算分离:Spark运行在Kubernetes之上,与HDFS、OSS等存储系统分离,通过Celeborn实现数据的读写,构建了易于维护和扩展的架构。
架构演进:随着Spark引擎对Kubernetes集群的支持逐渐成熟,米哈游选择了Spark on K8s架构,不仅实现了弹性计算和成本节约,也在架构上进行了持续的迭代优化。
离线混部:在离线混部场景下,米哈游通过将Spark任务与在线应用服务部署在同一Kubernetes集群中,实现了资源的高效利用和成本的控制,但同时也带来了架构复杂性和业务相互影响的挑战。
Spark on K8s + OSS-HDFS:为解决离线混部的局限性,米哈游设计了一种新的架构,底层存储采用OSS-HDFS,计算集群采用阿里云的容器托管服务ACK,以及稳定高效的Spark 3.2.3版本,实现了与云原生理念的更好契合。
架构设计与实现:Spark在Kubernetes上的运行原理涉及Pod作为最小调度单元,以及Driver和Executor的Pod实现。
通过spark-k8s-cli工具,米哈游实现了任务的提交和管理,同时提供了一系列增强功能,以适应生产环境的需求,包括任务的负载均衡、资源排队、网络异常处理等。
日志采集与展示:为了优化日志管理,米哈游通过改造Spark代码,使Driver和Executor的日志输出到OSS上,用户可以在Spark UI和Jobhistory页面直接查看日志。
同时,通过spark-k8s-cli提供了一个运行状态Web UI,实现日志的便捷获取。
弹性与降本:基于Kubernetes的弹性能力,结合ECI的秒级计费机制,米哈游实现了在Kubernetes集群上运行Spark任务的总成本降低,同时提高了资源利用率。
Celeborn解决方案:为解决Spark在Kubernetes上数据Shuffle的问题,米哈游引入了阿里开源的Celeborn服务,通过Push Shuffle模式实现数据的高效读写,同时对代码进行了功能增强和优化。
Kyuubi on K8s:为了提供SQL查询服务,米哈游在Kubernetes上部署了Kyuubi服务,以支持Spark、Flink和Trino等查询需求,同时对Kyuubi进行源码改造,增强了其与Kubernetes集群的集成性。
K8s Manager监控:为满足对集群内Spark任务、资源消耗等的监控需求,米哈游开发了K8s Manager服务,实时监控各类资源信息并生成指标,实现异常告警。
其他工作与解决方案:在技术方案实施过程中,米哈游遇到了各种问题和挑战,包括弹性网卡释放慢、Watcher失效、任务卡死等,通过优化Celeborn、调整Kubernetes资源管理、改进Kyuubi和K8s Manager功能等措施,这些问题得到妥善解决。
总结与展望:米哈游通过采用Spark on K8s + OSS-HDFS方案,实现了大数据基础架构的云原生化,取得了显著的业务与技术收益。
未来,米哈游将继续优化架构,增强系统承载与容灾能力,实现大数据组件的容器化,深化云原生实践,并通过更精细的资源管理和成本控制,推动业务的持续增长与创新。
Docker+ Kubernetes已成为云计算的主流(二十六)
最近正在抽时间编写k8s的相关教程,很是费时,等相关内容初步完成后,再和大家分享。
对于k8s,还是上云更为简单、稳定并且节省成本,因此我们需要对主流云服务的容器服务进行了解,以便更好地应用于生产。
主流云服务容器服务介绍
Docker+ Kubernetes已成为云计算的主流
亚马逊AWS
Amazon Web Services (AWS) 是亚马逊公司旗下云计算服务平台,为全世界范围内的客户提供云解决方案。
AWS面向用户提供包括弹性计算、存储、数据库、应用程序在内的一整套云计算服务,帮助企业降低IT投入成本和维护成本。
那么如何在AWS上运行Docker呢?AWS 同时为 Docker 开源解决方案和商业解决方案提供支持,并且可通过多种方式在 AWS 上运行容器:
微软Azure
Microsoft Azure 是一个开放而灵活的企业级云计算平台。
通过 IaaS + PaaS 帮助用户加快发展步伐,提高工作效率并节省运营成本。
Azure是一种灵活和支持互操作的平台,它可以被用来创建云中运行的应用或者通过基于云的特性来加强现有应用。
它开放式的架构给开发者提供了Web应用、互联设备的应用、个人电脑、服务器、或者提供最优在线复杂解决方案的选择。
在容器这块,Azure同样的提供了众多解决方案:
下面我们侧重介绍下以下服务:
阿里云
阿里云()创立于2009年,是全球领先的云计算及人工智能 科技 公司,为200多个国家和地区的企业、开发者和政府机构提供服务。
2017年1月阿里云成为奥运会全球指定云服务商。
2017年8月阿里巴巴财报数据显示,阿里云付费云计算用户超过100万。
阿里云致力于以在线公共服务的方式,提供安全、可靠的计算和数据处理能力,让计算和人工智能成为普惠 科技 。
阿里云在全球18个地域开放了49个可用区,为全球数十亿用户提供可靠的计算支持。
此外,阿里云为全球客户部署200多个飞天数据中心,通过底层统一的飞天操作系统,为客户提供全球独有的混合云体验。
飞天(Apsara)是由阿里云自主研发、服务全球的超大规模通用计算操作系统。
它可以将遍布全球的百万级服务器连成一台超级计算机,以在线公共服务的方式为 社会 提供计算能力。
从PC互联网到移动互联网到万物互联网,互联网成为世界新的基础设施。
飞天希望解决人类计算的规模、效率和安全问题。
飞天的革命性在于将云计算的三个方向整合起来:提供足够强大的计算能力,提供通用的计算能力,提供普惠的计算能力。
飞天诞生于2009年2月,目前为全球200多个国家和地区的创新创业企业、政府、机构等提供服务。
同样,阿里云对容器也提供了友好的支持:
容器服务提供高性能可伸缩的容器应用管理服务,支持用Docker和Kubernetes进行容器化应用的生命周期管理,提供多种应用发布方式和持续交付能力并支持微服务架构。
容器服务简化了容器管理集群的搭建工作,整合了阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器运行环境。
容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级 Kubernetes 容器化应用的全生命周期管理。
容器服务 Kubernetes 版简化集群的搭建和扩容等工作,整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳的 Kubernetes 容器化应用运行环境。
阿里云弹性容器实例(Elastic Container Instance)是 Serverless 和容器化的弹性计算服务。
用户无需管理底层 ECS 服务器,只需要提供打包好的镜像,即可运行容器,并仅为容器实际运行消耗的资源付费。
容器镜像服务(Container Registry)提供安全的镜像托管能力,稳定的国内外镜像构建服务,便捷的镜像授权功能,方便用户进行镜像全生命周期管理。
容器镜像服务简化了Registry的搭建运维工作,支持多地域的镜像托管,并联合容器服务等云产品,为用户打造云上使用Docker的一体化体验。
腾讯云
腾讯云为腾讯倾力打造的云计算品牌,以卓越 科技 能力助力各行各业数字化转型,为全球客户提供领先的云计算、大数据、人工智能服务,以及定制化行业解决方案。
其基于QQ、微信、腾讯 游戏 等海量业务的技术锤炼,从基础架构到精细化运营,从平台实力到生态能力建设,腾讯云将之整合并面向市场,使之能够为企业和创业者提供集云计算、云数据、云运营于一体的云端服务体验。
在容器这块,腾讯云提供了如下解决方案:
腾讯云容器服务(Tencent Kubernetes Engine ,TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务。
腾讯云容器服务完全兼容原生 kubernetes API ,扩展了腾讯云的 CBS、CLB 等 kubernetes 插件,为容器化的应用提供高效部署、资源调度、服务发现和动态伸缩等一系列完整功能,解决用户开发、测试及运维过程的环境一致性问题,提高了大规模容器集群管理的便捷性,帮助用户降低成本,提高效率。
容器服务提供免费使用,涉及的其他云产品另外单独计费。
容器实例服务(Container Instance Service , CIS)可以帮用户在云上快捷、灵活的部署容器,让用户专注于构建程序和使用容器而非管理设备上。
无需预购 CVM(云服务器),就可以在几秒内启动一批容器来执行任务。
同时,开发者也可以通过 kubernetes API 把已有kubernetes 集群的 pod 调度到 CIS 上以处理突增业务。
CIS 根据实际使用的资源计费,可以帮用户节约计算成本。
使用 CIS 可以极大降低用户部署容器的门槛,降低用户执行 batch 型任务或处理业务突增的成本。
从上面主流的云服务中我们可以看到,没有哪家云厂商不支持Docker,同样的,也没有哪家云厂商不支持Kubernetes!也就是说,Docker+ Kubernetes已经成为云计算的主流!
什么是Kubernetes(k8s)
Kubernetes(简称k8s)诞生于谷歌,是一个开源的,用于管理云平台中多个主机上的容器化的应用,k8s的目标是让部署容器化的应用简单并且高效,其提供了应用部署、规划、更新、维护的机制。
k8s主要有以下特点:
支持公有云,私有云,混合云,多重云(multi-cloud) 。
可以将容器化的工作负载从本地开发计算机无缝移动到生产环境。
在本地基础结构以及公共云和混合云中,在不同环境中协调容器,保持一致性。
支持模块化,插件化,可挂载,可组合。
并且k8s的扩展和插件在社区开发者和各大公司的支持下高速增长,用户可以充分利用这些社区产品/服务以添加各种功能。
支持自动部署,自动重启,自动复制,自动伸缩/扩展,并且可以定义复杂的容器化应用程序并将其部署在服务器群集甚至多个群集上——因为k8s会根据所需状态优化资源。
通过内置的自动缩放器,k8s可轻松地水平缩放应用程序,同时自动监视和维护容器的正常运行。
Kubernetes正在塑造应用程序开发和管理的未来
k8s构建于 Google 数十年经验,一大半来源于 Google 生产环境规模的经验。
结合了社区最佳的想法和实践,而且还在不断地高速迭代和更新之中。
她衔着金钥匙出生,一诞生就广受欢迎,更是在2017,其打败了所有的竞争对手,赢得了云计算的战争——主流的云厂商基本上都纷纷放弃了自己造“轮子”的举动,终止了各自的容器编排工具,加盟了k8s阵营,其中包括Red Hat、微软、IBM、阿里、腾讯、华为和甲骨文等。
k8s像风暴一样席卷了应用开发领域,并且已成为云原生应用程序(架构、组件、部署和管理方式)的事实标准,大量的开发者和企业正在使用k8s创建由微服务和无服务器功能组成的现代架构。
Docker+ Kubernetes已成为云计算的主流
容器是现代软件交付的未来,而Kubernetes是编排容器的最佳方案(事实上的标准)。
Docker 和Kubernetes相辅相成,联手打下了云计算的“万里江山”。
Docker 为打包和分发容器化应用程序提供了一个开放的标准,而 Kubernetes 则协调和管理通过 Docker 创建的分布式容器化应用程序。
换句话说,Kubernetes 提供了部署和运行通过Docker生成的应用程序所需的基础结构。
在主流的云服务,基于Docker+k8s的新型PaaS平台具有敏捷部署、弹性伸缩、灵活调度、故障自动恢复等优势,充分满足业务扩展中的资源支持,因此在短短两年之内,便从Docker Swarm、Cloud Foundry Diego、Kontena、Apache Mesos、Amazon ECS…等大量对手中脱颖而出,拿下了皇冠。
k8s和Docker的胜利意味着这是有史以来第一次,无论使用哪一种云平台,研发人员都可以拥有完全相同的计算环境。