首页 > 其他分享 >【云原生篇】K8S之StatefulSet 详解

【云原生篇】K8S之StatefulSet 详解

时间:2024-04-04 18:31:21浏览次数:18  
标签:web 存储 StatefulSet nginx 副本 Pod K8S 详解

在 Kubernetes (K8s) 中,StatefulSet 是一种用于管理有状态应用的工作负载 API 对象。与 Deployment 管理无状态应用不同,StatefulSet 为每个 Pod 副本提供了持久性标识符(如名称和网络标识),并且可以保证部署和扩展顺序、以及网络标识和存储的稳定性。

核心特性

  • 稳定、唯一的网络标识符:StatefulSet 中的每个 Pod 都有一个固定的、按顺序的名称(如 <statefulset-name>-0),即使它们被重新调度到其他节点。
  • 稳定的存储:StatefulSet 可以将持久化存储卷 (Persistent Volume) 与 Pod 的标识符关联起来,即使 Pod 被重新调度,它们的存储卷也不会丢失。
  • 有序的部署、扩展和删除:StatefulSet 保证了 Pod 的部署、扩展和删除是按照严格的顺序进行的,通常是从 0 到 N-1,对于某些应用,这种顺序非常重要。
  • 有序的滚动更新:StatefulSet 允许你对其管理的 Pod 进行顺序更新,确保不会同时中断多个副本。

使用场景

StatefulSet 适用于需要一个或多个以下特性的应用:

  • 稳定且唯一的网络标识。
  • 稳定的持久存储。
  • 有序的、优雅的部署和扩展。
  • 有序的、自动的滚动更新。

常见的用例包括:

  • 分布式数据库,如 MongoDB、Cassandra 和 Elasticsearch。
  • 任何需要持久化存储的服务。
  • 有状态的应用,其中每个实例都需要保持其身份和数据。

示例

以下是一个简单的 StatefulSet 示例,它创建了一个由 3 个 Nginx 服务器 Pod 组成的 StatefulSet。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx"
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
          name: web
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: ["ReadWriteOnce"]
      storageClassName: "my-storage-class"
      resources:
        requests:
          storage: 1Gi

在这个示例中:

  • serviceName 指定了 Pods 被控制的 Service 的名称。
  • StatefulSet 创建了三个 Pod 副本,每个副本都有一个固定的名称(web-0web-1web-2)。
  • volumeClaimTemplates 为每个 Pod 副本创建了一个持久化存储卷。这意味着即使 Pod 被重新调度到其他节点,数据也会被保留。

注意事项

  • 使用 StatefulSet 时,需要一个头部 Service 来控制网络域。这个 Service 负责为每个 Pod 副本提供一个稳定的 DNS 名称。
  • StatefulSet 的滚动更新可能比 Deployment 慢,因为它按顺序更新每个副本。
  • 管理有状态应用更加复杂,需要仔细管理数据的备份和恢复策略。

StatefulSet 提供了 Kubernetes 环境中部署和管理有状态应用所需的稳定性和灵活性。

标签:web,存储,StatefulSet,nginx,副本,Pod,K8S,详解
From: https://blog.csdn.net/lin819747263/article/details/137288985

相关文章

  • Python+requests+Pytest+logging+allure+pymysql框架详解
    一、框架目录结构1)tools目录用来放公共方法存储,如发送接口以及读取测试数据的方法,响应断言数据库断言前置sql等方法;2)datas目录用例存储接口用例的测试数据,我是用excel来存储的数据,文件数据图片数据等;3)testcases目录用来存放测试用例,一个python文件对应一个接口模块的......
  • Python常用算法思想--递归算法思想详解【附源码】
    递归算法能够重复性的将问题分解为同类的子问题,然后解决这些子问题,最终达到解决最开始的问题为目的。以下从解决“阶乘”问题、“汉诺塔”问题、“斐波那契数列”问题、“最大公倍数和最小公约数”问题、“小球弹跳”、“深度优先”与“广度优先”问题等六个经典递归算法的案例......
  • 基于深度学习的犬种识别系统详解(网页版+YOLOv8/v7/v6/v5代码+训练数据集)
    摘要:本文深入研究了基于YOLOv8/v7/v6/v5等深度学习模型的犬种识别技术,核心采用YOLOv8并整合了YOLOv7、YOLOv6、YOLOv5算法,进行性能指标对比;详述了国内外研究现状、数据集处理、算法原理、模型构建与训练代码,及基于Streamlit的交互式Web应用界面设计。在Web网页中可以支持图像、视......
  • k8s informer resync机制
    informerFactory创建informerinformer一般由informerFactory创建(支持直接创建informer,一般不这么做),informerFactory支持创建多种资源类型的informer,同一个informerFactory中同一种资源类型只创建一个informer。DeltaFIFOqueue里面保存了KeyOf函数计算得到的存储资源对象的key......
  • 【递推与递归】python例题详解
    文章目录1、递归实现指数型枚举2、递归实现排列型枚举3、递归实现组合型枚举4、简单斐波那契5、带分数6、翻硬币1、递归实现指数型枚举题目从 1∼n这 n个整数中随机选取任意多个,输出所有可能的选择方案。输入格式输入一个整数 n。输出格式每行输出一种方案。同一......
  • k8s PV和PVC以及StorageClass
    本地盘和云磁盘区别本地盘不支持跨物理机迁移,云磁盘支持跨物理机迁移。本地目录生命周期emptyDir、downwardAPI、configMap、secret:kubelet创建本地目录,该目录会随着Pod的消亡而删除。hostPath:本地目录一直存在。PVC、PV和StorageClass关系PVC是持久卷定义,PV是持久卷即磁盘,St......
  • C语言入门:预处理器指令详解
    目录一宏定义A.不带参数的宏定义:B.带参数的宏定义(宏函数):C.宏定义的注意事项:二条件编译A.#ifdef/#ifndef:B.#if/#elif/#else/#endif:C.#pragmaonce:三头文件包含A.#include:B.头文件包含顺序:C.编译警告:四C语言的优缺点A.C语言的优点:B.C语言的缺点:五C......
  • Liunx中mail详解(centos7 / kylin)
    #下载邮件yuminstall-ymailx一.系统用户之间发送邮件#方法一#发送邮件mail-s"邮件标题"用户名#回车,就可以输入内容,按住ctrl+删除键即可删除输入的内容,换行也使用回车#ctrl+d发送/回车输入一个.再回车也可以进行发送,当然这个点不会放进内容里#方法二echo......
  • SpringSecurity认证和授权流程详解
    什么是SpringSecuritySpringSecurity是一个Java框架,用于保护应用程序的安全性。它提供了一套全面的安全解决方案,包括身份验证、授权、防止攻击等功能。SpringSecurity基于过滤器链的概念,可以轻松地集成到任何基于Spring的应用程序中。它支持多种身份验证选项和授权策略,开发人员......
  • 逻辑回归(Logistic Regression)详解
    逻辑回归是一种用于分类问题的机器学习算法,尤其是在二分类问题中应用广泛。它的名字虽然带有"回归",但实际上是一种分类算法。在本文中,我将详细解释逻辑回归的原理、方法和应用。1.逻辑回归的原理逻辑回归的原理基于统计学和概率论。其基本思想是通过对输入特征的线性组合......