深入解析-无状态服务-StatefulSet (一)

news2025/2/25 13:12:21

一、有状态服务 VS 无状态服务

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,就可能会导致数据丢失或者集群的crash5.示例方面:mysql数据库、kafka、zookeeper、Redis主从架构
4.资源方面:statefulSet
5.创建方式:statefulSet管理
    Pod的特点:
唯一性: 每个Pod会被分配一个唯一序号
顺序性: Pod启动,更新,销毁是线性的,按顺序进行
稳定的网络标识: Pod主机名,DNS地址不会随着Pod被重新调度而发生变化.
稳定的持久化存储: Pod被重新调度后,仍然能挂载原有的PV,从而保证了数据的完整性和一致性.
6.缩容方式:有顺序的缩容
  StatefulSet 缩容只会操作 一个 pod 实例,因此有状态应用的缩容相对于无状态的缩容速度慢。
 

二、深入解析有状态服务

1 基本介绍

在 Kubernetes 中,有状态服务可以使用 StatefulSet 来进行部署和管理。

StatefulSet 可以确保有状态服务的有序部署和缩放,并在节点失败时自动重新启动实例。

与 Deployment 不同,StatefulSet 提供了稳定的网络标识符和稳定的存储卷名称,以确保有状态服务在重新调度后仍能够保持其身份和数据。

以下是有状态服务在 Kubernetes 中的一些重要概念和实践:

  1. Headless Service:Headless Service 是一种没有 Cluster IP 的 Service,它提供了一个稳定的 DNS 记录,以便有状态服务可以通过 DNS 查找彼此。Headless Service 通常与 StatefulSet 配合使用,以确保每个 Pod 都有唯一的 DNS 记录和稳定的网络标识符。
  2. PersistentVolume:PersistentVolume 是一种 Kubernetes 资源,它表示一个持久化存储卷。有状态服务通常使用 PersistentVolume 来持久化存储数据。
  3. StatefulSet:StatefulSet 是一种 Kubernetes 资源,用于部署有状态服务。StatefulSet 可以确保有序部署和缩放,并在节点故障时自动重新启动实例。StatefulSet 还提供了稳定的网络标识符和稳定的存储卷名称,以确保有状态服务在重新调度后仍能够保持其身份和数据
  4. Init Containers:Init Containers 是一种特殊类型的容器,它们在应用程序容器启动之前运行,并可以执行一些初始化任务,例如创建数据库或检查数据完整性。有状态服务通常使用 Init Containers 来进行一些必要的初始化操作。

总之,在 Kubernetes 中管理有状态服务需要使用一些特定的概念和实践,例如 Headless Service、PersistentVolume、StatefulSet 和 Init Containers。

这些工具和实践可以确保有状态服务的可靠性和一致性,并使其在节点故障和重新调度时能够正确地恢复和保持状态。

2 使用介绍

Headless Service 是 Kubernetes 中的一种服务类型,它不会分配 Cluster IP,并且不会进行负载均衡。

相反,它返回与服务中的每个端点相对应的 DNS 记录,这些记录可以用于直接访问这些端点。

Headless Service 通常用于需要直接与 Pod 进行通信的情况,例如 StatefulSet。

下面是一个使用 Headless Service 的示例代码:

apiVersion: v1
kind: Service
metadata:
  name: my-headless-service # 
spec:
  clusterIP: None
  selector:
    app: my-app
  ports:
    - name: http
      port: 80
      targetPort: 8080
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: my-statefulset
spec:
  serviceName: my-headless-service
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-container
          image: my-image
          ports:
            - containerPort: 8080
          env:
            - name: MY_POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name

1.在上述示例中,定义了一个 Headless Service,名为 my-headless-service,并将其设置为 clusterIP: None,这样它就不会分配 Cluster IP。

2.然后,定义了一个 StatefulSet,名为 my-statefulset,并指定了 serviceName: my-headless-service,这意味着 StatefulSet 将使用我们定义的 Headless Service。

3.还指定了 replicas: 3,这意味着我们将有三个 Pod。每个 Pod 包含一个名为 my-container 的容器,该容器使用名为 my-image 的映像,并公开端口 8080。

4.还将 MY_POD_NAME 环境变量设置为 Pod 的名称,以便容器可以使用该名称来识别自己。

5.这是一个基本的 Headless Service 示例,当访问服务时,它将返回每个 Pod 的 DNS 记录,可以使用这些记录来直接访问每个 Pod。

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

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

相关文章

hackmyvm-buster

题目地址 信息收集 主机发现 ┌──(root㉿kali)-[/home/kali] └─# arp-scan -I eth1 192.168.56.0/24 Interface: eth1, type: EN10MB, MAC: 00:0c:29:34:da:f5, IPv4: 192.168.56.103 WARNING: Cannot open MAC/Vendor file ieee-oui.txt: Permission denied WARNING: C…

【原创】Windows11安装WSL“无法解析服务器的名称或地址”问题解决方法

原因分析 出现这个问题一开始以为WSL设置了某个服务器,但是通过运行 nslookup www.microsoft.com 出现下面的提示 PS C:\Windows\system32> nslookup www.microsoft.com 服务器: UnKnown Address: 2408:8000:XXXX:2b00:8:8:8:8非权威应答: 名称: e13678…

网页制作08-html,css,javascript初认识のhtml使用框架结构,请先建立站点!

框架一般由框架集和框架组成。 框架集就像一个大的容器,包括所有的框架,是框架的集合。 框架是框架集中一个独立的区域用于显示一个独立的网页文档。 框架集是文件html,它定义一组框架的布局和属性,包括框架的数目,框架…

【Vscode 使用】集合1

一、使用make工具管理工程 windows下,下载mingw64,配置好mingw64\bin 为 Win10系统全局变量后。 在mingw64/bin目录下找到mingw32-make.exe工具。复制一份改名为:make.exe,没错,就是那么简单,mingw64自带m…

文章精读篇——用于遥感小样本语义分割的可学习Prompt

题目:Learnable Prompt for Few-Shot Semantic Segmentation in Remote Sensing Domain 会议:CVPR 2024 Workshop 论文:10.48550/arXiv.2404.10307 相关竞赛:https://codalab.lisn.upsaclay.fr/competitions/17568 年份&#…

解决 kubeasz 安装k8s集群跨节点pod 无法使用cluster ip通讯问题

问题描述 使用kubeasz搭建k8s集群后使用的配置文件 # etcd cluster should have odd member(s) (1,3,5,...) [etcd] 192.168.xx.22# master node(s) [kube_master] 192.168.xx.22# work node(s) [kube_node] 192.168.xx.9 192.168.xx.22# [optional] harbor server, a privat…

Docker 搭建 Nginx 服务器

系列文章目录 Docker 搭建 Nginx 服务器 系列文章目录前言一、准备工作二、设置 Nginx 容器的目录结构三、启动一个临时的 Nginx 容器来复制配置文件四、复制 Nginx 配置文件到本地目录五、删除临时 Nginx 容器六、创建并运行 Nginx 容器,挂载本地目录七、修改 ngin…

Spring AI + 大模型开发应用

JAVA SpringAI 大模型开发AI应用DEMO 前言JAVA项目创建示例 前言 在当今快速发展的技术领域,人工智能(AI)已经成为推动创新和变革的重要力量。然而,AI应用的开发过程往往复杂且耗时,需要开发者具备深厚的技术背景和丰…

【C++11】 并发⽀持库

🌈 个人主页:Zfox_ 🔥 系列专栏:C从入门到精通 目录 前言:🚀 并发⽀持库一:🔥 thread库 二:🔥 this_thread 三:🔥 mutex 四&#xff1…

Windows 11【1001问】如何下载Windows 11系统镜像

随着科技的不断进步,操作系统也在不断地更新换代。Windows 11作为微软最新一代的操作系统,带来了许多令人兴奋的新特性与改进,如全新的用户界面、更好的性能优化以及增强的安全功能等。对于想要体验最新技术或者提升工作效率的用户来说&#…

视觉分析之边缘检测算法

9.1 Roberts算子 Roberts算子又称为交叉微分算法,是基于交叉差分的梯度算法,通过局部差分计算检测边缘线条。 常用来处理具有陡峭的低噪声图像,当图像边缘接近于正45度或负45度时,该算法处理效果更理想。 其缺点是对边缘的定位…

深度学习-6.用于计算机视觉的深度学习

Deep Learning - Lecture 6 Deep Learning for Computer Vision 简介深度学习在计算机视觉领域的发展时间线 语义分割语义分割系统的类型上采样层语义分割的 SegNet 架构软件中的SegNet 架构数据标注 目标检测与识别目标检测与识别问题两阶段和一阶段目标检测与识别两阶段检测器…

【大模型】蓝耘智算云平台快速部署DeepSeek R1/R3大模型详解

目录 一、前言 二、蓝耘智算平台介绍 2.1 蓝耘智算平台是什么 2.2 平台优势 2.3 应用场景 2.4 对DeepSeek 的支持 2.4.1 DeepSeek 简介 2.4.2 DeepSeek 优势 三、蓝耘智算平台部署DeepSeek-R1操作过程 3.1 注册账号 3.1.1 余额检查 3.2 部署DeepSeek-R1 3.2.1 获取…

《计算机视觉》——图像拼接

图像拼接 图像拼接是将多幅有重叠区域的图像合并成一幅全景或更大视角图像的技术,以下为你详细介绍: 原理:图像拼接的核心原理是基于图像之间的特征匹配。首先,从每幅图像中提取独特的特征点,如角点、边缘点等&#x…

element实现需同时满足多行合并和展开的表格

element实现需同时满足多行合并和展开的表格 需求描述: 以下面这张图为例,此表格的“一级表格”这一行可能存在多行数据,这种情况下需要将“一级指标”,“一级指标扣分xxx”,“一级指标关联xxx”这三列数据的行展示根据后面数据&#xff08…

气象干旱触发水文(农业)干旱的概率及其触发阈值的动态变化-贝叶斯copula模型

前言 在干旱研究中,一个关键的科学问题是:在某一地区发生不同等级的气象干旱时,气象干旱会以何种概率引发不同等级的水文干旱、农业干旱和地下水干旱?换句话说,气象干旱的不同程度会分别引发其他类型干旱的哪种等级&a…

系统学习算法:专题十二 记忆化搜索

什么是记忆化搜索,我们先用一道经典例题来引入,斐波那契数 题目一: 相信一开始学编程语言的时候,就一定碰到过这道题,在学循环的时候,我们就用for循环来解决,然后学到了递归,我们又…

c++入门-------命名空间、缺省参数、函数重载

C系列 文章目录 C系列前言一、命名空间二、缺省参数2.1、缺省参数概念2.2、 缺省参数分类2.2.1、全缺省参数2.2.2、半缺省参数 2.3、缺省参数的特点 三、函数重载3.1、函数重载概念3.2、构成函数重载的条件3.2.1、参数类型不同3.2.2、参数个数不同3.2.3、参数类型顺序不同 前言…

51单片机测试题AI作答测试(DeepSeek Kimi)

单片机测试题 DeepSeek Kimi 单项选择题 (10道) 6题8题判断有误 6题判断有误 智谱清言6题靠谱,但仔细斟酌,题目出的貌似有问题,详见 下方。 填空题 (9道) 脉宽调制(Pulse …

去耦电容的作用详解

在霍尔元件的实际应用过程中,经常会用到去耦电容。去耦电容是电路中装设在元件的电源端的电容,其作用详解如下: 一、基本概念 去耦电容,也称退耦电容,是把输出信号的干扰作为滤除对象。它通常安装在集成电路&#xf…