使用 Kubernetes 管理容器化的有状态应用

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:

ijreffmw0pz79w5t.jpg!heading

 

编者按:本文转载自“才云 Caicloud”,作者 Josh Berkus。

目前,几乎所有关于容器和微服务的谈论都跟“无状态”的应用挂钩。这完全可以理解,因为无状态应用程序更简单。而且容器和编排技术已经成熟到能够承工作负载的程度:即有状态的应用。

Kubernetes 是一个用于自动部署、扩展和管理容器化应用程序的开源系统,我之前做过两次关于 Kubernetes、数据库以及容器的演讲。

什么是“无状态”应用?

无状态服务,即 Web 服务器、代理和应用程序代码这样的应用程序,它们可以处理数据但不进行存储。编排过程中,开发者比较喜欢使用它们,因为它们易于部署且易于扩展。如果流量上升,则只需添加更多的负载平衡。更重要的是,它们是“不变动的”;上游容器镜像和基础架构中正在运行的容器其实几乎没有区别。这意味着它们可以随时被替代,而且容器实例切换过程中几乎不需要耗费“切换成本”。

什么是有状态应用?

有状态的服务,即路由器、CDN(内容传送网络)、streaming 服务器和认证服务器。从部署开始,这些容器就开始与上游镜像不同了,时间越长它们的差异越大。这种差异就被称为“state(状态)”。事实上,每个运行的应用程序都至少有一个小状态(差异),但对于“无状态”应用程序来说,状态(差异)很小,而且可以进行快速替换。

对于有状态的,那就不是这样的情况了。虽然状态可以通过状态节点进行同步或复制,但是这必须通过应用程序专用的一些方法在业务流程系统之外完成。总之很麻烦。

数据库和有状态应用程序

当然,鉴于我在 PostgreSQL 工作18年的历史,我真正关心的有状态应用程序是交易型数据库。数据库对于大多数应用程序堆栈而言至关重要,而且对于状态支持来说也是一个很好的测试用例,因为它们可以用有效方式进行状态化,包括: 

Storage

Identity

Session

Cluster Role 

例如,PostgreSQL 需要将数据和交易存储在每个 PostgreSQL 容器(存储)持久和特有的文件中。每个容器需要被识别为特定的数据库节点,我们需要能够通过名称或地址将流量路由到它。数据库客户端连接或会话也有一个状态,打破它们需要付出一定的代价,所以我们不想随意移动数据库节点。最后,每个数据库节点在其数据库集群中都有一个角色,集群角色例如 master、replica、shard 等。这些集群角色将持续存在,直到数据库特定 event 更改它们为止。

在流行的容器云堆栈上实现这些类型的状态一直是具有挑战性的。 Docker 和编排框架将大多数类型的状态视为发生在容器堆栈之外的状态,迫使数据库架构师管理存储、身份、路由以及很多其他的东西。你没有办法将数据库移动到帮助您的容器。因此,尽管很多网页应用程序已经容器化,但几乎没有数据库或其他有状态的应用程序能够容器化。那么,我们在哪里存储数据?一般来说,可以使用 Amazon RDS。

使用 Kubernetes StatefulSet 的数据库 

Kubernetes 项目一直致力于一个对象和一组功能,去年称为 StatefulSet 来处理数据库和其他状态服务。开发人员最初以“PetSet”的工作名称发布了此功能,但是他们进行了更改,然后发布到1.5版本中,并且有了一个更合适的名字:StatefulSet。此时,StatefulSet 实现 Storage 和 Identity 有状态质量。其他两个可以使用最小粘合代码使用 Kubernetes 作为资源实现。换句话说,你不必等待部署协调的容器化数据库。

现在,你可以在 Kubernetes 上的容器中运行数据库,但是为什么要这样做呢?答案与容器无关,但是都与编排的好处有关。

我们期望再现代数据库平台中高可用性(HA),希望它能够脱颖而出,但这光靠数据库软件是提供不了的。引入群集,替换故障机器上的数据库节点,重新路由应用程序流量到迁移的节点,以及其他 HA 注意事项需要大量的代码和许多数据库外部以及其内部的实用程序。

这样的代码很难写,因为它需要先实现分布式系统。

像其他业务流程系统一样,Kubernetes 提供了一个简单易用的分布式系统。数据库(如 PostgreSQL和MySQL)如果没有内置的 HA,很容易变成这样,已经是 HA 的数据库(如 Cassandra 和 RethinkDB),那就可以实现全自动。从经验来说,这是比自己从头开始做更容易。

我创建了一些例子,展示如何在我的 atomicdb 演示 repo 上使用 StatefulSet 来部署 PostgreSQL。以上这些是为了说明如何使用功能,并非完整的生产部署。 Zalando 是 Patroni 集群管理项目的领导者发布了 Helm Chart,它基于 Kubernetes 的群集 PostgreSQL。

(欲了解更多关于作者的演讲信息,请点击“查看原文”

作者简介:

Josh Berkus 供职于 RedHat 的 Project Atomic,这个项目需要跟Kubernetes,AtomicHost,Docker,Fedora 以及其它项目近距离接触。 他之前在 PostgreSQL 核心团队拥有十几年工作经验,为流行的开源数据库做出贡献。 


  

本文转自d1net(转载)

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
28天前
|
缓存 Kubernetes Docker
容器服务ACK常见问题之容器服务ACK ingress websocket配置失败如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
18天前
|
Kubernetes 监控 数据安全/隐私保护
K8s好看的管理页面Rancher管理K8S
K8s好看的管理页面Rancher管理K8S
34 4
|
18天前
|
Kubernetes 容器
k8s容器时间与服务器时间不一致问题
k8s容器时间与服务器时间不一致问题
17 0
|
5天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
11 4
|
6天前
|
JSON Kubernetes Go
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
15 0
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
|
17天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
14 0
|
25天前
|
存储 安全 算法
【C++ 17 包裹类 泛型容器 std::any】深入理解与应用C++ std::any:从泛型编程到多态设计
【C++ 17 包裹类 泛型容器 std::any】深入理解与应用C++ std::any:从泛型编程到多态设计
47 1
|
28天前
|
存储 Kubernetes 监控
容器服务ACK常见问题之容器服务ACK启动时readiness告警如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
28天前
|
存储 监控 Kubernetes
容器服务ACK常见问题之cmonitor-agent容器一直没起来如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
30天前
|
Prometheus 监控 Kubernetes
Kubernetes 集群监控与日志管理实践
【2月更文挑战第29天】 在微服务架构日益普及的当下,Kubernetes 已成为容器编排的事实标准。然而,随着集群规模的扩大和业务复杂度的提升,有效的监控和日志管理变得至关重要。本文将探讨构建高效 Kubernetes 集群监控系统的策略,以及实施日志聚合和分析的最佳实践。通过引入如 Prometheus 和 Fluentd 等开源工具,我们旨在为运维专家提供一套完整的解决方案,以保障系统的稳定性和可靠性。

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多