美文网首页实践人生
有状态的应用如何部署 1?

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

作者: 阿兵云原生 | 来源:发表于2023-07-27 12:03 被阅读0次

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

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

[图片上传失败...(image-e17388-1690517009860)]

有状态和无状态

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

有状态服务

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

无状态服务

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

回顾 ReplicaSet

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

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

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

[图片上传失败...(image-14d64b-1690517009860)]

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

[图片上传失败...(image-17b923-1690517009860)]

答案当然是前者

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

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

除非咱们创建多个 RS

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

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

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

[图片上传失败...(image-d763dd-1690517009860)]

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

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

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

[图片上传失败...(image-d845c6-1690517009860)]

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

[图片上传失败...(image-a21387-1690517009860)]

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

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

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

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

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

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

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

欢迎点赞,关注,收藏

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

[图片上传失败...(image-978055-1690517009860)]

好了,本次就到这里

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

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

相关文章

  • DaoCloud坑系列

    1. 应用重新部署异常 点击重新部署报错如下图: 查看应用容器发现很多异常的容器: 推测是Daocloud容器状态...

  • Kubernetes的折磨(二):Helm / NFS / Je

    一般来说,部署无状态应用很简单,但是一旦牵涉到有状态的应用,尤其是非云原生的软件,部署就很复杂了,还好我们有Hel...

  • week15-Nginx企业应用

    Nginx网站服务应用 1. Nginx服务监控状态页部署 官方说明 在遇到模块不知道如何配置得时候都可以进进入 ...

  • 使用 cf push 部署应用到 SAP BTP 后启动失败 s

    cf push 将应用部署到 SAP Business Technology Platform 之后,应用状态处于...

  • Ubuntu上使用Gatling部署Phoenix应用 - 为你

    目前讲述如何部署Phoenix应用的文章并不多,这篇文章旨在叫你如何在Ubuntu上部署Phoenix应用至生产环...

  • 有状态应用管理 StatefulSet

    StatefulSet (有状态集,缩写为sts) 常用于部署有状态的且需要有序启动的应用程序,比如在进行 Spr...

  • 009-应用数据持久化

    1.无状态应用与有状态应用 应用的有状态和无状态是根据应用是否有持久化保存数据的需求而言的,即持久化保存数据的应用...

  • Nginx扩展应用

    一、网站web服务扩展应用 1、nginx服务监控状态页部署 vim conf.d/state.confserve...

  • 十四 中间件容器化及Helm

    (一) 容器化中间件 1.如何部署应用到K8S 当我们需要部署应用时后,考虑是否需要部署到K8S时一般需要考虑上图...

  • 一些笔记

    在 Intellij IDEA 中部署 Java 应用到 阿里云 ECS 如何在配置只有1G内存的服务器上部署To...

网友评论

    本文标题:有状态的应用如何部署 1?

    本文链接:https://www.haomeiwen.com/subject/rvvlpdtx.html