【K8S系列】第七讲:有状态服务 VS 无状态服务

news2025/3/1 9:46:42

目录

序言: 

1.无状态服务介绍

2 有状态服务介绍

2.1 稳定的网络标识

2.2  稳定持久化存储

3 总结


序言: 

昨天有位大佬,问这个问题

   

 ………………………………………………

 

决定学习之后,有了这篇文章.

1.无状态服务介绍

1.数据方面:无状态服务不会在本地存储持久化数据.多个实例可以共享相同的持久化数据

2.结果方面:多个服务实例对于同一个用户请求的响应结果是完全一致

3.关系方面:这种多服务实例之间是没有依赖关系

4.影响方面:在k8s控制器 中动态启停无状态服务的pod并不会对其它的pod产生影响

5.示例方面:nginx实例,tomcat实例,web应用

6.资源方面:相关的k8s资源有:ReplicaSet、ReplicationController、Deployment

7.创建方式:Deployment被设计用来管理无状态服务的pod

每个pod完全一致,原因如下:

  • 无状态服务内的多个Pod创建的顺序是没有顺序
  • 无状态服务内的多个Pod的名称是随机的.pod被重新启动调度后,它的名称与IP都会发生变化
  • 无状态服务内的多个Pod背后是共享存储的

8.缩容方式:随机缩容

        由于是无状态服务,所以这些控制器创建的pod序号都是随机值。并且在缩容也是随机,并不会明确缩容某一个pod。因为所有实例得到的返回值都是一样,所以缩容任何一个pod都可以

2 有状态服务介绍

1.数据方面:有状态服务需要在本地存储持久化数据,典型的是分布式数据库的应

2.结果方面:实例之间,请求结果可能存在不一致

3.关系方面:分布式节点实例之间有依赖的拓扑关系.比如,主从关系.

4.影响方面:如果K8S停止分布式集群中任 一实例pod,就可能会导致数据丢失或者集群的crash

5.示例方面:mysql数据库、kafka、zookeeper、Redis主从架构

6.资源方面:statefulSet

7.创建方式:statefulSet管理

    Pod的特点

  • 唯一性: 每个Pod会被分配一个唯一序号
  • 顺序性: Pod启动,更新,销毁是线性的,按顺序进行
  • 稳定的网络标识: Pod主机名,DNS地址不会随着Pod被重新调度而发生变化.
  • 稳定的持久化存储: Pod被重新调度后,仍然能挂载原有的PV,从而保证了数据的完整性和一致性.

8.缩容方式:有顺序的缩容

        StatefulSet 缩容只会操作 一个 pod 实例,因此有状态应用的缩容相对于无状态的缩容速度会慢。

举例来说, 一个分布式存储应用若同时下线多个节点 ,则可能导致其数据丢失

比如说,一个数据项副本数设置为 2 的数据存储应用, 若同时有两个节点下线,如果一份数据它正好保存在这两个节点上,这份数据就会丢失

因此缩容是线性的 ,则分布式存储应用需要时间把丢失的副本复制到其他节点 ,从而保证数据不会丢失。其实,这也是第七点中所讲的顺序性。

2.1 稳定的网络标识

如何理解稳定的网络标识?以redis为例:可以这样理解:

例如:需要创建名为test-redis-podStateful模型,

根据配置的Replica=3的设置,K8S会创建三个Pod,依次命名为:

  1. test-redis-pod-0
  2. test-redis-pod-1
  3. test-redis-pod-2

K8S为有状态的服务Pod分配稳定的网络标识,具体实现基于test-redis-pod-0名称,借助Headless DNS进行如下解析,获取后端其中一个Pod的地址.

$(pod name).$(service name).$(namespace).svc.cluster.local

下面通过Pod名称访问Redis集群的Master节点地址的方法.

session.save_path = "tcp://test-redis-pod-0.test-redis-service.default.svc.cluster.local:6379"

在Redis Pod内部,主从节点之间数据同步的需求,Slave节点对应的配置文件中需要一个稳定的Master地址.

下边脚本通过稳定访问test-redis-pod-0 名称来间接获得Redis Master节点IP地址,

然后写入到Redis Slave的配置文件中,这样后续Slave节点与Master节点可以完成增量数据的同步.

if [ "${server_host}" != "test-redis-pod-0" ];then
        #echo "server-count: ${server_counts}" >> /data/redistest.log

        while [ -z "${master_address}" ];do
            echo "master_address is not available, ${master_address} waiting for redis master..." >> /data/redistest.log
            master_address=$(replication_master_address)
            sleep 1s
        done
    fi

    echo "master_address: $(master_address)" >> /data/redistest.log
    if [ ! -z "$master_address" ]; then
        printf "\nslaveof %s 6379\n" "$master_address" >> $conf
    fi

在Redis Pod外部, 可以这样来访问具体的Pod服务.

$(pod name).$(service name).$(namespace).svc.cluster.local

2.2  稳定持久化存储

如何理解稳定的持久化存储,可以参考下图:

如图:

1.唯一:每个Redis Pod对应一个PVC/PV.当Pod发生调度时,需要在别的节点启动时,根据Pod背后关联的存储信息,可以保证其名称的稳定性.

2.复用Pod还是会attach挂载到原来的PV/PVC中,从而确定每个Pod有自己专用的存储卷.

3 总结

主要介绍了无状态和有状态服务的基础概念,从八个方面介绍了两者的区别,

并以redis集群为例,详细讲解了稳定的网络标识和稳定的持久化存储

  

介绍了:

  • Deployment部署无状态服务
  • Stateful新的部署组件.

  

Stateful 主要是通过支持Pod一些特性

  • 名称唯一性
  • 稳定的网络标识
  • 稳定的持久化存储

  

从而实现在K8S中部署运维有状态服务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/9364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS中clip-path、white-space使用

clip-path clip-path属性可以创建一个只有元素的部分区域可以显示的剪切区域、之前大部分都是使用 overflow: hidden border-radous 来实现一些布局 使用 clip-path 可以按需更简便的完成。 clip-path: polygon 多边形显示 里面输入坐标值 左上角为原点,右下角…

工程师新红利,我国预计到2025年培养20万名这类人才

前 言 近段时间,受到众所周知的事件影响,国外半导体企业掀起一股裁员潮。据《日经亚洲评论》报道,当外资公司正在收缩中国业务时,中国科技企业借此正竭力争夺外资企业中的成熟工程师。这足以说明一点,国内对成熟工程…

三剑客之 grep

目录基本参数正则表达式本文参考文献:GNU Grep 3.8 grep 是一个在 UNIX 上的命令行工具,它通过给定的模式(pattern)来搜索一个输入文件,并输出匹配到这些模式的内容 grep 于1974年公开,是文本三剑客中最早…

ROS总结理解

机器人操作系统入门_中科院软件所-重德智能机器人联合研究中心_中国大学MOOC(慕课) 可以参考视频学习 目录 .1ROS版本 .2 ROS架构 .3 ROS与IDE安装 .4 Catkin与工作空间 5.ROS的Package结构 6.ROS的常用指令 7.Metapackage 8.Master和Node .9 Topic和msg .10 Servic…

css 改变下划线长度,伪元素模拟border-bottom

要实现文字下方下划线 1 border-bottom配合width <html><head><style>p {border-bottom: 1px solid red;}</style> </head><body><p>选中内容</p> </body></html>直接设置border-bottom&#xff0c;会由于p标签…

vue3使用element-plus

1、下载包 npm install element-plus --save 2、引入 全局引入挂载&#xff1a;引入记得有css文件&#xff08;下载不下来可能是项目正在运行&#xff0c;先关掉&#xff09; import { createApp } from vue import App from ./App.vue import ElementPlus from element-plus …

MySQL 主从复制

现在我们的应用基本都往高性能的方向发展&#xff0c;各种语言都开始推出一些多进程和分布式的框架&#xff0c;其目的就是为了能够做到一个高性能的应用。包括会使用各种MQ和缓存的中间件&#xff0c;其实使用这些中间件的最终目的都是为了能够缓解数据库的压力&#xff0c;数…

下载离线地图地形数据库(3D离线地图开发)

下载离线地图地形数据库&#xff08;3D离线地图开发&#xff09; 发布时间&#xff1a;2020-03-03 版权&#xff1a; 离线地形&#xff1a;是用来表示地表高低起伏的一种三维地形数据库&#xff0c;有了这个地形数据&#xff0c;才能真实的反应出地球表面的高低起伏状态&#…

Docker安装Nginx并修改Nginx配置文件

一、Docker安装Nginx 1、首先在虚拟机上要确保你已经启动了docker。 2、其次登录DockerHub官网&#xff0c;然后搜索nginx&#xff0c;,然后在虚拟机里面输入docker pull nginx,就可以下载nginx的镜像了。 3、注意下载完以后要使用docker images指令查看一下是否下载成功了&am…

市场调查与分析[市场调查员][抽样技术方案][抽样方法][F检验]

正大杯比赛最新参考题&#xff08;预测含必考&#xff09; - 知乎 目录 A市场调查员 B抽样技术方案 一、调查目的、范围、对象及内容 二、抽样方案设计的原则与特点 三、样本区、县的选取 3.1全国区、县的调查总体 3.2区、县分层 (1)地域 (2)区、县类别 四、各阶…

怎么复习信息系统项目管理师?

废话不多说~ 正文开始~ 一、备考前期准备 1、合理规划时间&#xff0c;把握备考节奏 大家在网上经常会看到&#xff0c;考软考高级很简单&#xff0c;说是1个月就可以。 确实现实中存在大神&#xff0c;况且运气还占据一定比例&#xff0c;人家能上&#xff0c;咱真的不一…

鼎医信息加入PolarDB开源数据库社区

近日&#xff0c;上海鼎医信息技术有限公司签署阿里巴巴开源CLA(Contribution License Agreement, 贡献许可协议), 正式与阿里云PolarDB 开源数据库社区牵手。 过去 5 年&#xff0c;阿里云针对 PolarDB 进行了诸多创新&#xff0c;通过采用存储计算分离、软硬一体化设计&#…

SREWorks v1.3 版本发布 | 插件机制发布

在v1.2版本发布之后&#xff0c;SREWorks团队着手开始了v1.3版本的迭代。此次v1.3版本融合了较多用户需求&#xff0c;以及对底座机制进行了较大调整和优化&#xff0c;故发版时间长了很多。下面让我们切入正题&#xff0c;来看看这些大变化究竟是哪些&#xff1f; 1. 插件机制…

Web3——开发第一个智能合约

学习写第一个智能合约&#xff0c;下面连接是集成开发环境 https://github.com/smartcontractkit/full-blockchain-solidity-course-js#lesson-2-welcome-to-remix-simple-storage 点击 “Remix” 来到Remix IDE&#xff0c;这就是我们要写代码的地方&#xff0c;集成开发环境…

一文入门mybatis-plus

mybatis-plus mybatis-plus官网 MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生. 可以说呢&#xff0c;在MP基础上还可…

一次想不到的 Bootstrap 类加载器带来的 Native 内存泄露分析

最近我们线上有同学反馈&#xff0c;java 服务在接入了支持预发的 javaagent 以后会出现缓存的内存增长&#xff0c;去掉 agent 启动以后内存增长正常。于是分析了一下这个问题&#xff0c;写了这篇文章。 备注&#xff1a;JVM 堆内存最大 1000M 主要会涉及下面这些内容&#…

防火墙基础技术

目录 一、内容概述 二、防火墙概述 防火墙的应用 防火墙的本质 防火墙的发展历程 防火墙特征 防火墙分类 包过滤防火墙&#xff1a; 包过滤防火墙的缺点&#xff1a; 代理防火墙&#xff1a; 代理防火墙的缺点&#xff1a; 状态检测防火墙&#xff1a; 状态检测防火…

【Linux修炼手册:基本指令(下)】

目录 1 man指令&#xff08;重要&#xff09; 2 more指令 3 less指令&#xff08;重要&#xff09; 4 head指令和tail指令 5 时间相关的指令 6 Cal指令 7 find指令&#xff1a;&#xff08;灰常重要&#xff09; -name 8 grep指令 9 zip/unzip指令 10 其他常见命令 1…

SiPM使用总结

1、SiPM的电子模型 首先我们来看一下二极管的雪崩电子模型&#xff0c;电子模型和雪崩时的电流波形如下图所示&#xff0c; 电流上升的快慢是由电容的充放电速度决定的&#xff0c;充电的时常数TdRS*Cd&#xff0c;放电的时常数 TqRq*Cd&#xff0c;这里Rq>>Rs&#xf…

《Hidden Markov Map Matching Through Noise and Sparseness》读书笔记

摘要 Our test shows how the algorithm breaks down as the sampling rate of the GPS is reduced. We also test the effect of increasing amounts of additional measurement noise in order to assess how well our algorithm could deal with the inaccuracies of other…