Kubernetes运行有状态应用:7项有效注意事项

Stella981
• 阅读 829

Kubernetes运行有状态应用:7项有效注意事项

Kubernetes是一个开放编排平台,旨在用于部署,管理容器化的应用程序。

在Kubernetes的早期,该平台主要支持和运行无状态应用程序。无状态应用程序,被认为在重新启动容器时不需要保留从上一个会话到下一个会话的数据的应用程序。

这就造成了误解,认为Kubernetes仅适用于无状态应用程序。但是,随着Kubernetes的普及,它已经发展成为各种类型的应用程序的编排平台之一,包括可伸缩和高度可用的有状态应用程序的部署和管理。

但是,即使为状态应用程序提供了完整的业务流程支持,Kubernetes仍存在各种不足,尤其是与存储相关的不足。Kubernetes有意留给供应商填补。

越来越多用户使用Kubernetes的有状态应用程序,推动了云原生存储解决方案的发展,该解决方案可以提供有状态应用程序所需的可用性和弹性。

Kubernetes存储演进

最初,Kubernetes提供了基本支持,使用GFS和AWS等特定云提供商的共享存储驱动器(例如NFS和ISCSI)将存储卷静态附加到Pod。但是向Kubernetes添加任何新的存储解决方案都需要将代码提交到Kubernetes核心代码库中,从而使存储过程变得复杂。

Diamanti向Kubernetes贡献了FlexVolume插件,从而在Kubernetes中开启了存储卷配置的新时代。它使存储供应商可以创建自定义存储插件,而无需将其添加到Kubernetes存储库中。

反过来,这为Kubernetes用户提供了更好的管理和数据服务的存储解决方案。多年来,Kubernetes社区引入了多种功能丰富的存储,例如:

  • 永久存储卷(PV),为集群中的对象提供存储资源。

  • PersistentVolumeClaim(PVC),这是使用PV的请求。

  • Volume Dynamic Provisioning允许按需创建数据存储卷。

  • StatefulSets轻松扩展和管理有状态应用程序。

FlexVolume插件为容器存储接口(CSI)的存储插件铺平了道路。该插件提供了Kubernetes与第三方存储集成的标准化解决方案,并为Kubernetes内部的数据服务提供支持。

Kubernetes运行有状态应用程序的注意事项

即使有了如上的改进,组织在Kubernetes中使用有状态应用程序时仍然面临与存储相关的挑战。随着组织采用包含重要知识产权的容器化数据库和其他应用程序,他们意识到需要提供一套更高级的存储功能。其中一些包括:

1. 易于使用的持久存储

Kubernetes为持久存储卷和有状态应用程序提供全面支持。但是,组织仍需要使用第三方CSI插件,来提供程序执行存储卷的实际配置。

例如,大多数公共云将Kubernetes与他们现有的存储架构集成在一起,以向用户提供此功能,但是这些架构通常在选择和性能上受到限制。

当谈到私有云时,有很多第三方选项可用,但是很难找到一个提供丰富功能,最佳性能并且具有成本效益的存储解决方案。

最重要的是,市场上许多现有的存储解决方案–都旨在支持虚拟化工作负载,然而,事实证明,在裸机上运行容器具有更高的可伸缩性和性能,并减少了不必要的抽象层。但是,很难找到一种适用于裸机容器的好的存储解决方案。

2. 高可用性选项

有状态应用程序的性质,决定了需要更多地考虑应用程序如何从不同的故障模式中恢复,但并非所有第三方Kubernetes存储解决方案都是高度可用的。

为了解决此问题,许多供应商提供了共享存储,但是这些解决方案通常性能不高和缺乏可管理性。

存储可用性服务( Storage availability services ),通常使用恢复点目标(RPO)和恢复时间目标(RTO)进行衡量。RTO衡量恢复数据所需的时间,RPO衡量恢复过去多久的数据。

下表演示了有状态应用程序必不可少的各种数据服务。

Kubernetes运行有状态应用:7项有效注意事项

3. 混合云数据的可移植性

在当今的云原生世界中,越来越多的组织采用混合云方法,来结合公共云和私有云的优势。虽然可以轻松地跨多个云迁移无状态应用程序,但是很难将数据从一个云迁移到其他云。

4. 性能

市场上的大多数存储解决方案,都缺乏数据密集型应用程序所需的性能,这使存储设备成为应用程序性能的主要瓶颈。

带有固态驱动器的新存储技术 ,如NVMe (Non-Volatile Memory Express) 的出现意味着存储不再是瓶颈。因此,在选择存储供应商时,除了吞吐量之外,还要考虑最坏情况的延迟。

5. 服务质量(QoS)的保证

Kubernetes为容器本身预留了CPU和内存。但是,Kubernetes不支持存储或网络带宽预留,这仍然是一个问题。

为了保护重要的有状态应用程序免受此缺点的影响,为存储资源提供QoS级别保证很重要。

6. 用于存储和数据的共享网络

大多数传统存储解决方案都依赖于主机网络来存储数据流量。此数据流量与常规网络流量竞争,并带来安全风险。寻找隔离存储和容器流量的解决方案,有时是必要的。

7. 安全性/加密

考虑存储解决方案的安全性和加密方面。大多数企业都需要安全协议,例如自加密磁盘,存储卷级加密和密钥管理等,以保护自己免受数据丢失和安全漏洞的侵害。

结论

Kubernetes已经发展成为协调有状态应用程序的最佳平台。你可以使用Kubernetes中的StatefulSet和持久存储卷,轻松管理和扩展有状态应用程序。

但是,如果没有基础存储架构,仅利用Kubernetes的全部潜力是不够的。在决定第三方存储供应商时,请牢记这些挑战,并寻找适合你的应用程序部署的存储供应商。

译者:王延飞

原文链接:https://thenewstack.io/a-guide-to-running-stateful-applications-in-kubernetes/

END


Kubernetes  CKA线下班

Kubernetes运行有状态应用:7项有效注意事项

Kubernetes运行有状态应用:7项有效注意事项

Kubernetes运行有状态应用:7项有效注意事项

本文分享自微信公众号 - K8S中文社区(k8schina)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Nginx反向代理upstream模块介绍
!(https://oscimg.oschina.net/oscnet/1e67c46e359a4d6c8f36b590a372961f.gif)!(https://oscimg.oschina.net/oscnet/819eda5e7de54c23b54b04cfc00d3206.jpg)1.Nginx反
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这