【K8s】专题四(4):Kubernetes 控制器之 StatefulSet

以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号!

公众号二维码


目录

一、基本介绍

二、工作原理

三、相关特性

四、资源清单(示例)

五、常用操作


一、基本介绍

在 Kubernetes 中,StatefulSet 是一种高级 API 对象,用于声明式地管理有状态应用的生命周期,确保指定数量的 Pod 副本始终运行且是最新的,并通过确保 Pod 的有序性、持久性和唯一性来实现对有状态应用的支持。

说明:有状态应用(Stateful Application)是指应用程序在处理客户请求时会存储客户端的状态信息。这意味着应用程序会记住之前的交互或状态,并在处理后续请求时使用这些信息。与无状态应用不同,有状态应用会跟踪每个客户端的会话状态,并将其存储在服务器端。这使得应用程序能够为每个客户端提供个性化的体验,并记住客户端在之前的操作中所做的选择。

与 Deployment 相同,StatefulSet 可以管理基于相同规范的 Pod。

与 Deployment 不同,StatefulSet 虽然每个 Pod 是根据相同规范创建的,但不可互换,且每个 Pod 都有一个持久标识符。


二、工作原理

StatefulSet 控制器的工作原理主要体现在以下几个方面:

  • Pod 的有序性:StatefulSet 控制器会为每个 Pod 分配一个唯一的序号,并确保 Pod 的启动和终止顺序与序号一致。这对于有状态应用至关重要,因为它们通常需要按照特定的顺序处理数据
  • Pod 的持久性:StatefulSet 控制器会为每个 Pod 提供持久化存储卷,并确保 Pod 即使重启或迁移到其他节点也能访问相同的存储卷。这对于有状态应用至关重要,因为它们需要保存数据以供后续使用
  • Pod 的唯一性:StatefulSet 控制器会确保每个 Pod 的名称都是唯一的,即使 Pod 被删除并重新创建也是如此。这对于有状态应用至关重要,因为它们通常需要使用唯一的名称来标识 Pod

StatefulSet 控制器的工作流程大致可以分为以下几个步骤:

  • 创建 Pod:当用户创建一个 StatefulSet 资源对象时,StatefulSet 控制器会根据 StatefulSet 的预期状态创建相应的 Pod
  • 启动 Pod:StatefulSet 控制器会按照 Pod 的序号顺序启动 Pod
  • 监控 Pod:StatefulSet 控制器会持续监控 Pod 的状态,确保副本数量与预期状态一致
  • 滚动更新:StatefulSet 控制器支持滚动更新策略,可以逐步更新 StatefulSet 中的 Pod 版本,而不会导致应用程序服务中断
  • 版本回滚:如果 StatefulSet 更新出现问题,StatefulSet 控制器可以回滚到之前的版本
  • 清理旧资源:StatefulSet 控制器会清理不再需要的旧 Pod 和存储卷资源


三、相关特性

1、网络标识符

StatefulSet 控制器为每个 Pod 提供一个稳定、唯一的网络标识符,即 Pod 名称和稳定的网络域名。这使得有状态应用在整个生命周期中都能够保持相同的标识,方便应用内部的通信和数据交换。


2、持久化存储

StatefulSet 控制器为每个 Pod 提供一个稳定的持久化存储卷,并确保 Pod 即使重启或迁移到其他节点也能访问相同的存储卷。


3、有序启停

StatefulSet 控制器会按照 Pod 的序号顺序启动 Pod,并确保 Pod 的终止顺序与序号一致。


4、滚动更新

StatefulSet 控制器支持滚动更新策略,可以逐步更新 StatefulSet 中的 Pod 版本,而不会导致应用程序服务中断。


5、自动修复和回滚

Pod 出现故障时,StatefulSet 控制器会自动创建新的 Pod 来替换它,确保应用程序始终处于运行状态。如果更新出现问题,StatefulSet 控制器可以回滚到之前的版本,可以避免数据损坏或丢失。

6、 无头服务

StatefulSet 控制器可以通过无头服务(Headless Service,其 clusterIP 字段值为 None)实现 Pod 之间直接通信,而无需使用外部负载均衡器。

# 无头服务示例
apiVersion: v1
kind: Service
metadata:
  name: demo-servic
  labels:
    app: demo-servic
spec:
  selector:
    app: nginx
  clusterIP: None            # 🔔 值为 None
  ports:
  - name: web
    port: 80


四、资源清单(示例)
# statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: demo-statefulset
spec:
  replicas: 3
  selector:
    matchLabels:
      app: demo-statefulset
  template:
    metadata:
      labels:
        app: demo-statefulset
    spec:
      containers:
      - name: demo-container
        image: demo-image:latest
        ports:
        - containerPort: 80
      volumeMounts:
      - name: data
        mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: data
      labels:
        app: demo-statefulset
    spec:
      storageClassName: demo-storageclass
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi

上述 statefulset.yaml 文件定义了一个名为 demo-statefulset 的 StatefulSet 对象,该对象包括 3 个 Pod 副本(Pod 名称分别为 demo-statefulset-0,demo-statefulset-1,demo-statefulset-2),每个 Pod 包含一个名为 demo-container 的业务容器,业务容器使用 demo-image:latest 镜像,并指定监听端口为 80。每个 Pod 挂载一个独立的 PVC 对象实现数据的持久化存储(PVC 名称分别为 data-demo-statefulset-0,data-demo-statefulset-1,data-demo-statefulset-2)。

说明:可以通过以下命令查看 StatefulSet 资源清单支持定义的内容

kubectl explain statefulset --recursive


五、常用操作

1、创建 StatefulSet

# 方式一:命令行
kubectl create statefulset demo-statefulset --image=demo-image:latest
 
# 方式二:资源清单
kubectl create -f statefulset.yaml
或
kubectl apply -f statefulset.yaml

2、更新 StatefulSet

# 方式一:更新 statefulset.yaml 内容后执行
kubectl apply -f statefulset.yaml
 
# 方式二:更新镜像
kubectl set image statefulset demo-statefulset app=demo-image:v1
 
# 方式三:更新环境变量
kubectl set env statefulset demo-statefulset keyname=keyvalue


3、回滚 StatefulSet

# 默认回滚至上一版本
kubectl rollout undo statefulset demo-statefulset
 
# 回滚至指定版本
kubectl rollout undo statefulset demo-statefulset --to-revision=3
 
# 查看可回滚版本
kubectl rollout history statefulset demo-statefulset


4、查看 StatefulSet

# 查看实例列表
kubetcl get statefulset
 
# 查看详细信息
kubectl describe statefulset demo-statefulset


5、删除 StatefulSet

# 方式一:命令行
kubectl delete statefulset demo-statefulset
 
# 方式二:资源清单
kubectl delete -f statefulset.yaml


6、副本伸缩

kubectl scale statefulset demo-statefulset --replicas=1

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI写作:如何利用AI提升文章创作效率?

工欲善其事,必先利其器。 随着AI技术与各个行业或细分场景的深度融合,日常工作可使用的AI工具呈现出井喷式发展的趋势,AI工具的类别也从最初的AI文本生成、AI绘画工具,逐渐扩展到AI思维导图工具、AI流程图工具、AI生成PPT工具、AI…

cicd的基本概念

一.gitlab-cicd技术点 DevOps CI/CD理念与主流工具 DevOps 运动的兴起给业界提供了一个参考答案。其中CI 和 CD两个理念就是解决开发者和运维协同工作的一剂良方。 CI 是 Continuous Integration 的缩写,表示持续集成。CD 是 Continuous Delivery 的缩写&#xf…

10- Redis 键值对数据库是怎么实现的?

在开始将数据结构之前,先给介绍下 Redis 是怎样实现键值对(key-value)数据库的。 Redis 的键值对中的 key 就是字符串对象,而 value 可以是字符串对象,也可以是集合数据类型的对象,比如 List 对象&#xf…

刷题训练之分治快排

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:熟练掌握分治快排算法。 > 毒鸡汤:学习,学习,再学习 ! 学,然后知不足。 > 专栏选自:刷…

ThreadLocal与ForkJoin使用踩坑记录

由于并发的需要原因,使用CompletableFuture异步执行Dubbo接口,RpcContext中存储了tenantId等信息。上线一段时间后,发现有些时候拿到的上下文并不是自己线程的上下文。 原因分析 CompletableFuture.supplyAsync内部使用ForkJoinPool执行。 要…

【EI会议/稳定检索】2024年电机与电气控制国际会议(ICMEC 2024)

2024 International Conference on Motor and Electrical Control 2024年电机与电气控制国际会议 【会议信息】 会议简称:ICMEC 2024 截稿时间:(以官网为准) 大会地点:中国厦门 会议官网:www.meciac.com 会议邮箱&…

夸张,腾讯实习三个月,存款20W+

大家好,我是白露。 今天在牛客上看到一条帖子,让我感叹万分:实习两三个月,竟然已经存下了20多万的存款。 这也太夸张了吧?不太真实啊…… 很多网友表示疑问,“两三个月实习顶多存两三万吧?武理…

【工具】windows下VMware17解锁mac安装选项(使用unlocker427)

目录 0.简介 1.环境 2.安装前后对比 3.详细安装过程 3.1 下载unlocker427 1)下载地址 2)下载unlocker427.zip 3)解压之后是这样的 4)复制iso中的两个文件到你本地的VMware的安装目录下 5)复制windows下的所有…

【笔记】从零开始做一个精灵龙女-装备阶段

这里只记录相对重要的步骤和一些思路 但是头发那块很详细哦~ (标的小数字不用在意,那个是我网课的时长记录) 耳环 1.创建一个圆环,调整参数 做好后再复制一个小的 肩甲 2.0-2.4 1.创建圆柱体/球体也可 然后把底部的两个点删…

有哪些好用的ai工具,可以提升科研、学习、办公等效率?

最近,Sora的诞生为AI再添了一把火。 据介绍,这款“文生视频”的Sora可以直接输出长达60秒的视频,并且包含高度细致的背景、复杂的多角度镜头,以及富有情感的多个角色。 不仅能准确呈现细节,还能理解物体在物理世界中…

Accelerate笔记:本地SGD

本地 SGD 是一种分布式训练技术,其中梯度不是每一步都同步。每个进程都会更新自己版本的模型权重,在给定的步数后,通过跨所有进程平均这些权重来同步它们。 在底层,本地 SGD 代码禁用了自动梯度同步(但累积仍然如预期工…

什么是最好的手机数据恢复软件?6 款手机数据恢复软件 [2024 年更新]

什么是最好的手机数据恢复软件?在这篇文章中,您将了解 6 款最好的免费手机数据恢复软件,并学习如何恢复数据的完整指南。 最好的手机数据恢复软件是什么? 手机数据恢复软件是恢复智能手机中丢失或删除的文件、消息、照片和其他宝…

Win10文件系统错误(-2147219196)

问题出现的原因: C盘快挤满了,导致电脑很卡,于是删掉了C盘用户下的一些文件C:\Users\DIY-PC,省了五六十G的内存,结果发现把一些系统文件也删掉了,导致图片预览报错 问题现象: (自…

6月软考新通知:24下集成大概率是中级蕞简单的一门

2024下半年软考6月新通知: 一、24下软考考试时间安排: 24下半年软考报名时间:8月19日-9月15日 24下半年软考考试时间:11月9-12日 24下半年软考成绩查询:12月中(预计) 二、考情分析 24上软考…

免费,C++蓝桥杯等级考试真题--第7级(含答案和解析)

C蓝桥杯等级考试真题--第7级 答案:D 解析:步骤如下: 首先,--a 操作会使 a 的值减1,因此 a 变为 3。判断 a > b 即 3 > 3,此时表达式为假,因为 --a 后 a 并不大于 b。因此,程…

气压、湿度、震动开关、声音、红外火焰传感器 | 配合Arduino使用案例

BMP180 气压传感器 BMP180 是一种用于测量气压的科学仪器。可以获取到温度、气压、海拔。 先在 arduino ide 中安装依赖 /****** Arduino 接线 ***** Arduino 传感器* VCC 5v* GND GND* A4 SDA * A5 SCL ***********************/#include &l…

【Springcloud微服务】MybatisPlus下篇

🔥 本文由 程序喵正在路上 原创,CSDN首发! 💖 系列专栏:Springcloud微服务 🌠 首发时间:2024年6月4日 🦋 欢迎关注🖱点赞👍收藏🌟留言&#x1f43…

Beyond Compare 4 代码对比重新激活使用30天

1.同时按住‘’Win”“R”键,打开运行窗口。 2.在文本框中输入“regedit”,然后点击“确定”。 3.打开注册表,删除相关注册信息 打开注册表后,依次点击左侧列的“HKEY_CURRENT_USER”-“SOFTWARE”-“Scooter Software”-“Beyo…

[预告] 现代C++之全面解读Mutex与RAII Lock

目标 在我们编写并发编程项目的时候,mutex是必须要掌握的点,深入mutex的底层原理与实现能够帮助我们更好的理解与使用mutex。例如:在编写代码时,我们会遇到如下几个场景: 如何避免死锁如何自动释放锁如何设置超时控制多…

KT142C语音芯片ic批量生产说明不需要usb拷贝音频

一、批量生产的简介 内置空间虚拟成U盘的批量生产说明,其实就是将音频文件配置文件打包成一个bin文件就可以了,当然借助于电脑端的exe工具。“FAT镜像文件生成工具_1.0.9.exe” 最后,将生成的文件,重命名为“userfat-日期-特点.b…