批处理及有状态等应用类型在 K8S 上应该如何配置?

批处理,状态,应用,类型,k8s,应该,如何,配置 · 浏览次数 : 78

小编点评

** Kubernetes 应用程序类型和运行方式** **无状态应用** * Jobs 和 CronJob  对象:用于运行一次性任务,例如批处理工作。 * Deployment:用于长期运行的应用程序,例如数据库和监控代理。 **有状态应用** * StatefulSet:用于存储应用程序状态的应用程序。 * StatefulSet 对于需要独立存储的应用程序最有用。 **批处理应用** * Jobs:用于运行多个任务的应用程序。 **监控代理** * DaemonSet:用于在多个节点上运行应用程序的集群。 **复杂应用** * Operator:用于构建智能的应用程序,可自动处理备份和升级等事情。 **身份或编号要求的应用程序** * StatefulSet:适用于需要独立存储应用程序的应用程序。

正文

众所周知, Kubernetes(K8S)更适合运行无状态应用, 但是除了无状态应用. 我们还会有很多其他应用类型, 如: 有状态应用, 批处理, 监控代理(每台主机上都得跑), 更复杂的应用(如:hadoop 生态...). 那么这些应用可以在 K8S 上运行么? 如何配置?

其实, K8S 针对这些都有对应的不同的运行方式. 您要做的, 就是考虑您的应用程序类型会如何影响其运行方式.

Kubernetes 定义了适用于不同类型应用程序的不同类型的工作负载。要确定适合您的应用程序的工作负载,请根据如下思路来思考您的应用程序:

  • 是为了完成任务。一个典型例子是一个应用程序,启动时会跑一批数据,并在批处理执行完成后退出。该应用程序可能会定期运行(如每月)。对于这种类型的应用程序,合适的 Kubernetes (或 OpenShift) 容器平台对象包括 JobsCronJob  对象。

  • 长时间一直运行. 对于长时间运行的应用程序,可以编写 Deployment。(当然啦, 最好是无状态的)

  • 需要在每个节点上运行。某些类型的 Kubernetes 应用程序需要在群集中的每个主节点(master)或工作节点(worker)上运行。DNS 和监控的应用程序是需要在每个节点上连续运行的应用程序的典型例子。您可以将这种类型的应用程序作为 DaemonSet 运行。您还可以基于节点标签(node labels)在部分符合条件的节点上运行 DaemonSet。

  • 复杂的应用, 或需要全生命周期管理。当您要移交应用程序以便其他运维人员可以很方便地使用它时,请考虑创建一个Operator (类似 HELM Charts, 区别是 HELM 只负责安装, Operator 除了安装, 还多了全生命周期管理)。Operator 可让您构建智能的应用,因此它可以自动处理备份和升级之类的事情。与 Operator Lifecycle Manager(Operator 生命周期管理器, 简称:OLM)结合使用,集群管理者可以将 Operator 暴露给特定的 namespace,以便集群中的用户可以运行它们。示例有:

OperatorHub

  • 有身份或编号要求。应用程序可能具有身份要求或编号要求。例如,您可能需要运行该应用程序的不多不少刚好三个实例, 并且实例命名为012。那么StatefulSet是适合于这种应用。StatefulSet 对于需要独立存储的应用程序(例如数据库和 Zookeeper 群集)最有用。总结起来, 就是有状态的应用就选择 StatefulSet .

{% note success %}
🧠思考:

现在的趋势是一些企业级的、复杂、高级的有状态软件开始偏向于采用 Operator 而不是 Helm。因为 Operator 提供更多「自愈」、「自洽」的能力,可以实现更高级、更高级别的自动化甚至是无人托管。

总结

应用类型 K8S 资源类型 备注
Job、批处理 Jobs CronJob
长时间运行的无状态应用 Deployment DeploymentConfig DeploymentConfig是OpenShift特有的
长时间运行的无状态应用- 高可用 Deployment里加ReplicaSet字段
需要在每个节点上运行的应用 DaemonSet
复杂的应用, 或需要全生命周期管理的应用 Operator Helm Charts也适用于安装复杂应用
有状态应用 StatefulSet

本文由博客一文多发平台 OpenWrite 发布!

与批处理及有状态等应用类型在 K8S 上应该如何配置?相似的内容:

批处理及有状态等应用类型在 K8S 上应该如何配置?

众所周知, Kubernetes(K8S)更适合运行无状态应用, 但是除了无状态应用. 我们还会有很多其他应用类型, 如: 有状态应用, 批处理, 监控代理(每台主机上都得跑), 更复杂的应用(如:hadoop 生态...). 那么这些应用可以在 K8S 上运行么? 如何配置? 其实, K8S 针对

Spring Boot RestController接口如何输出到终端

背景 公司项目的批处理微服务,一般是在晚上固定时段通过定时任务执行,但为了预防执行失败,我们定义了对应的应急接口,必要时可以通过运维在终端中进行curl操作。然而,部分任务耗时较长,curl命令执行后长时间没有输出,如果不查看日志,无法知道系统当前的状态,因此有必要研究一下如何在curl命令调用接口

CANN训练:模型推理时数据预处理方法及归一化参数计算

摘要:在做基于Ascend CL模型推理时,通常使用的有OpenCV、AIPP、DVPP这三种方式,或者是它们的混合方式,本文比较了这三种方式的特点,并以Resnet50的pytorch模型为例,结合训练营提供的sample,说明了分别是如何实现预处理的。 本文分享自华为云社区《【2023 · CA

异常知识点的总结

第一部分:异常及异常处理 思考: 1.什么是异常? python中有哪些异常? 》异常本身是类 print(a) # NameError: name 'a' is not defined 错误类型 NameError print(3+'a') # TypeError: unsupported ope

一种异步延迟队列的实现方式

目前系统中有很多需要用到延时处理的功能:支付超时取消、排队超时、短信、微信等提醒延迟发送、token刷新、会员卡过期等等。通过延时处理,极大的节省系统的资源,不必轮询数据库处理任务。 目前大部分功能通过定时任务完成,定时任务还分使用quartz及xxljob两种类型轮询时间短,每秒执行一次,对数据库造成一定的压力,并且会有1秒的误差。轮询时间久,如30分钟一次,03:01插入一条数据,正常3:3

[转帖]Redis是的缓存特征及类型

文章目录 缓存特征缓存处理请求的两种情况缓存的类型只读缓存读写缓存 缓存特征 一个系统中的不同层之间的访问速度不一样,所以我们才需要缓存,这样就可以把一些需要频繁访问的数据放在缓存中,以加快它们的访问速度。 计算机系统中的三层存储结构,以及它们各自的常用容量和访问性能 计算机系统中,默认有两种缓存:

在WPF中使用WriteableBitmap对接工业相机及常用操作

写作背景 写这篇文章主要是因为工业相机(海康、大恒等)提供的.NET开发文档和示例程序都是用WinForm项目来说明举例的,而在WPF项目中对图像的使用和处理与在WinForm项目中有很大不同。在WinForm中用System.Drawing.Bitmap来处理图像,而在WPF中是用System.W

< Python全景系列-3 > Python控制流程盘点及高级用法、神秘技巧大揭秘!

全面深入地介绍 Python 的控制流程,包括条件语句、循环结构和异常处理等关键部分,尤其会将列表解析、生成器、装饰器等高级用法一网打尽。此外,我还将分享一些独特的见解和研究发现,希望能给你带来新的启发。文章的结尾,我们将有一个 "One More Thing" 环节,我会分享一个很特别但又很少人知道的有用的 Python 控制流程的技巧。

[转帖]一张图搞定redis内存优化及配置

https://www.jianshu.com/p/3195663af83e Redis内存优化及配置.png Redis优化及配置 Redis所有的数据都在内存中,而内存又是非常宝贵的资源。常用的内存优化方案有如下几部分:一、配置优化二、缩减键值对象三、命令处理四、缓存淘汰方案 一、配置优化 Li

Swift中发布-订阅框架Combine的使用

Combine简介 Combine是一个苹果用来处理事件的新的响应式框架,支持iOS 13及以上版本。 你可以使用Combine去统一和简化在处理类似于target-action,delegate,kvo等事情的代码。 iOS目前已经有第三方的响应式框架了,如:RxSwift、ReactiveCoc