关于程序员:云原生在京东丨如何在-Kubernetes-上部署有状态的云原生应用上

0次阅读

共计 2062 个字符,预计需要花费 6 分钟才能阅读完成。


Kubernetes 的呈现使得宽广开发同学也能运维简单的分布式系统,它大幅升高了容器化利用部署的门槛,用户通过它提供的 Deployment、ReplicaSet 控制器能够不便地部署一套高可用、可扩大的分布式无状态服务,这类利用的特点是 不在本地存储数据,通过简略的负载平衡策略可实现申请散发。然而越来越多的开发人员心愿把我的项目中依赖的数据库这类有状态服务也部署到 Kubernetes 外面,通过其进行编排部署,使利用与所依赖的后端存储尽量凑近一些,因为有状态服务的复杂性,这一过程并不容易。

在 Kubernetes 中有多种运行有状态应用程序的技术,每种技术各有优缺点。本文试图介绍在 Kubernetes 中运行有状态应用程序的要害办法,并探讨了在 Kubernetes 上部署有状态的服务的几种可行计划。

第一种办法是 将 Kubernetes 集群与 Samba、NFS 或 GlusterFS 等传统的存储基础设施集成在一起,这种办法能够轻松扩大到基于云的共享文件系统,例如 Amazon EFS、Azure 文件和 Google Cloud Filestore,在这种架构中,存储层与 Kubernetes 治理的计算层齐全脱钩。因为底层存储的持久性,工作负载齐全与其拆散,这使得 Pod 能够在任何节点上进行调度,而无需定义节点亲和性。

然而,这种办法对于须要高 I/O 吞吐量的有状态工作负载并不现实。共享文件系统并非旨在提供关系型数据、NoSQL 数据库和其余写入密集型工作负载所需的 IOPS。此办法的典型利用场景应该是内容管理系统,机器学习零碎和数字资产管理系统等。

第二种办法是 通过 Kubernetes 的控制器来保护所需的配置状态,Deployment、ReplicaSet、DaemonSet 和 StatefulSet 是一些罕用的控制器,其中 StatefulSet 是一种非凡的控制器。集群工作负载通常能够具备一个或多个主服务器和多个从服务器,大多数数据库都设计为在集群模式下运行,以提供高可用性和容错能力,有状态的集群工作负载继续在主服务器和从服务器之间复制数据。为此,集群基础架构心愿参加的实体(主从)具备统一裸露的端点,借以牢靠地同步状态。然而在 Kubernetes 中,Pod 被设计为长期的,不能保障具备固定的名称和 IP 地址。有状态集群工作负载的另一个要求是长久的存储后端,该后端具备容错能力并且可能满足 IOPS 的需要。

_Kubernetes 中引入 StatefulSet 控制器来运行有状态的集群工作负载,保障属于 StatefulSet 的 Pod 具备稳固的惟一标识符,它们遵循可预测的命名约定,还反对有序、便捷的部署和扩大。_StatefulSet 中的每个 Pod 都有一个对应的长久卷申明(PVC),该申明遵循类似的命名约定。当 Pod 终止并在其余节点上从新调度时,Kubernetes 控制器将确保 Pod 与同一 PVC 关联,以此来保障集群的状态。

因为 StatefulSet 中的每个 Pod 都有专用的 PVC 和 PV,因而应用共享存储没有特地的规定。然而能够预期 StatefulSet 能取得疾速、牢靠、长久的存储层(例如基于 SSD 的块存储设备)的反对,在确保将写操作齐全提交到磁盘后,能够从块存储设备中获取惯例备份和快照。典型的利用场景如 Apache ZooKeeper,Apache Kafka,MySQL,PostgreSQL 等。

尽管用户能够基于 StatefulSet 在 Kubernetes 中部署运维一套高可用有状态服务,如高 MySQL,PostgreSQL 等。但过程绝对简单,用户既要相熟各种 Kubernetes 资源对象,又要学习很多利用相干的操作细节,同时还需保护一套简单的治理脚本,为了升高在 Kubernetes 中部署简单利用的门槛 CoreOS 公司推出了 Operator。

Operator 是 用来打包、部署和治理须要运行在 Kubernetes 之上简单利用的一种办法,Operator 将运维人员对软件操作的常识代码化,同时综合使用 Kubernetes 中的各种资源对象来实现简单利用的部署和运维。Operator 通过  CustomResourceDefinition(CRD)为服务定义了新的资源对象,同时通过自定义控制器来保障利用处于预期状态。

Operator 的工作流程可形象成以下三个步骤:

  • Observe – 通过 Kubernetes API 察看指标对象的状态;
  • Analyze – 剖析以后状态与冀望状态的差异;
  • Act – 执行编排操作,将以后状态调整为冀望状。

因为开源社区的推动,Operator 越来越遍及。然而利用于各种惯例服务的 Operator 成熟度各不相同,具体细节请参考 github 开源我的项目 awesome-operators。Operator 典型的利用场景有 MySQL 高可用集群、TiDB 集群、TensorFlow 集群、Hadoop 生态相干集群 等。

预报

下一篇咱们将以最先进的开源数据库 PostgreSQL 为例,介绍如何在 Kubernetes 上部署运维有状态云服务,敬请期待!

正文完
 0