有状态的应用如何部署 1?

简介: 有状态的应用如何部署 1?

前面我们分享很多关于 K8S 的内容,有没有发现 pod 都是无状态,RS / RC 管理的 pod 也是无状态的,我们可以任意删除一个 pod,副本管理器又会马上给我们创建一个 pod

那么如果咱们的这个 pod 是有挂载持久卷的,那么我们用老方法可还行?

有状态和无状态

简单说明一下,什么是有状态的服务,什么是无状态的服务:

有状态服务

  • 服务本身依赖于环境中的状态,可能需要数据库来持久化状态数据
  • 某一个时刻,一个请求只能被服务的某个实例处理
  • 会存储状态数据,若需要扩展实例,可能整个系统都进行变动

无状态服务

  • 服务本身不依赖自身的状态
  • 外部的任何请求到服务的任何一个实例都是可以得到正确的期望的响应
  • 可以横向扩展,能做负载均衡,自身不会存储状态机

回顾 ReplicaSet

咱们回顾一下 RS / RC ,他们都是管理的 pod 的控制器,创建出来的 pod 也都是通过预设好的模板创建出来的,这些 pod 也没有什么区别

我们上面有提到数据,如果我们在 RS 中加入一个声明的持久卷会是什么样的效果呢?

会是像这样所有 pod 共享一个持久卷声明?

还是会向这样每一个 pod 有一个独立的持久卷声明呢?

答案当然是前者

这个点可以在强调一下,感兴趣的小伙伴可以尝试一下,我们创建的是一个 RS,RS 里面会根据 pod 的副本数,来创建和删除多个 pod,若我们指定了持久卷,那么是多个 pod 共享同一个卷的

因为咱们的 pod 都是从 pod 模板生成的, pod 的模板早已指定好具体的持久卷是哪一个,无论生成多少个 pod ,都是共享一个持久卷

除非咱们创建多个 RS

那么如果我们需要就 1 个 RS 就能做到创建的每一个 pod 都可以享受独立的持久卷声明呢?

那么就抱歉了,K8S 暂时还不支持,没准后续可以支持也说不一定

回过头来看,如果我们需要 一个 pod 对应一个持久卷声明,一个持久卷,那么就得一个 RS 创建 一个 pod 才能实现了

那么我们如何进行扩容和缩容呢?

这又是一个麻烦事,这种做法不能自动的动态进行扩缩容,只能我们手动去删除 RS 或者修改 RS 的副本个数 ,而且对于以后横向扩展的时候,我们无限的改动 RS ,这真的太笨重了,云原生的做法绝对不能是这个样子的,肯定有好方法

多个 pod 共享一个持久化卷,但是使用不同的目录?

看上去感觉还不错,我们是不是就可以让多个 pod 共享一个持久化卷,但是使用不同的目录,类似于下面这种呢?

根据示意图来看,感觉可行对吧

咱们细想一下的时候,我们就知道这样子不太行嘞

对于不同的 pod ,需要动态的去指定持久卷的不同目录,那么如何做到呢?这些 pod 都是通过同一个模板创建出来的,如何动态的去改变呢?

思来想去,还是需要多个 RS,不同的 RS 指定同一个持久化卷,不同的 pod 模板指定自己需要使用的挂载路径

那么 RS 是不是就真的搞不定上面的需求呢? 创建一个 RS ,让多个 pod 有自己独立的持久化卷

是的,就是搞不定,咱们看看 K8S 还有没有其他的处理方式来处理这种需求,放心,肯定可以解决,下回见

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

更多的可以查看 零声每晚八点直播:https://ke.qq.com/course/417774

相关文章
|
缓存 运维 Java
nacos常见问题之点击下线提示报错如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
621 2
|
测试技术 API 开发者
【Docker项目实战】在Docker环境下部署go-file文件分享工具
【2月更文挑战第15天】在Docker环境下部署go-file文件分享工具
501 1
|
存储 自然语言处理
国际化和本地化(Internationalization and Localization):打开全球市场的关键
在全球互联网时代,国际化和本地化是确保您的产品或服务能够在全球范围内成功的关键因素之一。本博客将深入探讨国际化和本地化的概念、重要性以及如何有效实施它们,以满足不同文化和地区的用户需求。
493 1
阿里云如何提交工单,以及工单处理不了如何解决
阿里云如何提交工单,以及工单处理不了如何解决
1402 2
|
分布式计算 数据处理 MaxCompute
MaxCompute单字段拆分多行多列
数据导入MaxCompute后,需要把某个字段String类型(多键值(key-value )对 ) 拆分成多行,每行有都有key, value两列。比如“{k1:v1,k2:v2,k3:k4}” 拆成多行,每行两个值key,value 分别为k1,v1;k2,v2;k3;k4。
4619 0
|
监控 应用服务中间件 持续交付
EDAS
【7月更文挑战第27天】
1164 9
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
631 3
|
NoSQL Redis 数据库
12)Redis 的游标迭代器(scan)
12)Redis 的游标迭代器(scan)
401 1
|
监控 JavaScript Java
部署应用程序到服务器
部署应用程序到服务器
554 3
|
存储 设计模式 Java
Spring Boot中的事件溯源模式
Spring Boot中的事件溯源模式

热门文章

最新文章