批处理及有状态等应用类型在 K8S 上应该如何配置?
众所周知, Kubernetes(K8S)更适合运行无状态应用, 但是除了无状态应用. 我们还会有很多其他应用类型, 如: 有状态应用, 批处理, 监控代理(每台主机上都得跑), 更复杂的应用(如:hadoop 生态...). 那么这些应用可以在 K8S 上运行么? 如何配置?
其实, K8S 针对这些都有对应的不同的运行方式. 您要做的, 就是考虑您的应用程序类型会如何影响其运行方式.
Kubernetes 定义了适用于不同类型应用程序的不同类型的工作负载。要确定适合您的应用程序的工作负载,请根据如下思路来思考您的应用程序:
是为了完成任务。一个典型例子是一个应用程序,启动时会跑一批数据,并在批处理执行完成后退出。该应用程序可能会定期运行(如每月)。对于这种类型的应用程序,合适的 Kubernetes (或 OpenShift) 容器平台对象包括 Jobs 和 CronJob 对象。
长时间一直运行. 对于长时间运行的应用程序,可以编写 Deployment。(当然啦, 最好是无状态的)
需要在每个节点上运行。某些类型的 Kubernetes 应用程序需要在群集中的每个主节点(master)或工作节点(worker)上运行。DNS 和监控的应用程序是需要在每个节点上连续运行的应用程序的典型例子。您可以将这种类型的应用程序作为 DaemonSet 运行。您还可以基于节点标签(node labels)在部分符合条件的节点上运行 DaemonSet。
复杂的应用, 或需要全生命周期管理。当您要移交应用程序以便其他运维人员可以很方便地使用它时,请考虑创建一个Operator (类似 HELM Charts, 区别是 HELM 只负责安装, Operator 除了安装, 还多了全生命周期管理)。Operator 可让您构建智能的应用,因此它可以自动处理备份和升级之类的事情。与 Operator Lifecycle Manager(Operator 生命周期管理器, 简称:OLM)结合使用,集群管理者可以将 Operator 暴露给特定的 namespace,以便集群中的用户可以运行它们。示例有:
- 有身份或编号要求。应用程序可能具有身份要求或编号要求。例如,您可能需要运行该应用程序的不多不少刚好三个实例, 并且实例命名为
0
,1
和2
。那么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 上应该如何配置?的更多相关文章
- SqlServer性能急剧下降,查看所有会话的状态及等待类型---Latch_Ex
当某个数据库文件空间用尽,做自动增长的时候,同一时间点只能有一个用户人员可以做文件自动增长动作,其他任务必须等待,此时会出现Latch资源的等待.使用sp_helpdb查看业务数据库时发现:该数据库设 ...
- iOS开发 - Swift实现检测网络连接状态及网络类型
一.前言 在移动开发中,检测网络的连接状态尤其检测网络的类型尤为重要.本文将介绍在iOS开发中,如何使用Swift检测网络连接状态及网络类型(移动网络.Wifi). 二.如何实现 Reachabili ...
- Watcher、ZK状态、事件类型 ,权限
zookeeper有watch事件,是一次性触发的,当watch监视的数据发生变化时,通知设置了该watch的client,即watcher. 同样,其watcher是监听数据发送了某些变化,那就一定 ...
- MegaCli是一款管理维护硬件RAID软件,可以通过它来了解当前raid卡的所有信息,包括 raid卡的型号,raid的阵列类型,raid 上各磁盘状态
MegaCli 监控raid状态 转载weixin_30344131 最后发布于2015-10-16 13:05:00 阅读数 简介 MegaCli是一款管理维护硬件RAID软件,可以通过它来了 ...
- Effective JavaScript Item 36 实例状态仅仅保存在实例对象上
本系列作为EffectiveJavaScript的读书笔记. 一个类型的prototype和该类型的实例之间是"一对多"的关系.那么,须要确保实例相关的数据不会被错误地保存在pro ...
- kettle输入“去除空格类型”设置不上
kettle输入“去除空格类型”设置不上,设置完了还是现实“none”的办法: 在xml中直接将对应处“none”改为“both”,即“去掉两边空格”. 原文来自:http://blog.csdn.n ...
- 《C#从现象到本质》读书笔记(二)第2章 C#类型基础(上)
<C#从现象到本质>读书笔记第二篇 第2章 C#类型基础(上) 类型指的是集合{类,结构,接口,枚举,委托}中的任意一个成员.任何拥有某类型的值(value)称为某类型的一个实例(inst ...
- 类型“Observable<Response>”上不存在属性“map”
出错提示: angular2 Property 'map' does not exist on type 'Observable<Response>' 类型“Observable<R ...
- 有状态软件如何在 k8s 上快速扩容甚至自动扩容
概述 在传统的虚机/物理机环境里, 如果我们想要对一个有状态应用扩容, 我们需要做哪些步骤? 申请虚机/物理机 安装依赖 下载安装包 按规范配置主机名, hosts 配置网络: 包括域名, DNS, ...
- Swift - 判端网络连接状态,连接类型(3G还是Wifi)
IJReachability是一个使用Swift写的第三方网络检测类.可以测试网络是否连接,并支持3G和Wifi的检测. 使用样例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
随机推荐
- 手把手教你python数据处理项目——探索ebay汽车销售数据
探索Ebay汽车销售数据 一.实验目的 1. 熟悉清理数据的流程: 2. 分析Ebay二手车销售数据: 3. 了解jupyter notebook为pandas提供的一些独特特性. 二.实验开发环 ...
- Java 设计模式----单例模式--懒汉式
1 package com.bytezreo.singleton; 2 3 /** 4 * 5 * @Description 单例模式 ---懒汉式 6 * @author Bytezero·zhen ...
- C++ //排序案列 //描述:将person自定义数据类型进行排序,Person中有属性 姓名,年龄,身高 //排序规则: 按照年龄进行的升序,如果年龄相同按照身高进行降序
1 //排序案列 2 //描述:将person自定义数据类型进行排序,Person中有属性 姓名,年龄,身高 3 //排序规则: 按照年龄进行的升序,如果年龄相同按照身高进行降序 4 5 #inclu ...
- 【思维题、KMP】P3526 [POI2011]OKR-Periodicity 题解
P3526 [POI2011]OKR-Periodicity 题解 前言 一道非常厉害的思维题.看题解得到了一些提示搞出来了. 作为 2011 年的题还是很厉害的. 约定 定义 \(s[l,r]\) ...
- Kubernetes CKA考试之Killer Simulator(下)
写在前面 个人微信公众号:密码应用技术实战 个人博客园首页:https://www.cnblogs.com/informatics/ 注:学习交流使用 目录 写在前面 Question 16 | Na ...
- Prettier 和 ESLint 冲突解决方案 eslint-config-prettier eslint-plugin-prettier
划重点 eslint-config-prettier 禁用 eslint 冲突配置 eslint-plugin-prettier Prettier先格式化 (默认是先eslint格式化,再Pretti ...
- Java递归实现全排列改进(二)---利用ArrayList实现去重
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Test{ priv ...
- Android 开发Day3
每次重新创建一个项目时,需要下载所对应的.gradle文件,但是你的磁盘里有相应的.gradle文件,随着你创建的Project越多,下载的gradle文件就会越多,占用内存就会越大 . 解决方案: ...
- 恶意软件开发(一)Reverse Shell
什么是Reverse Shell? 反向 Shell(Reverse Shell)是指远程攻击者在攻击成功后,通过建立一个反向连接,让受害者的机器连接到攻击者的机器上,从而达到控制受害者机器的目的.通 ...
- STL:vector中如何使用at()来避免程序报错
#include <iostream> #include <vector> using namespace std; int main() { vector<int> ...