当前位置: 首页 > news >正文

六、K8S之StatefulSet

StatefulSet

一、概念

Deployment一样StatefulSet也是中一种可以帮助我们部署和扩展Pod的控制器,使用Deployment时多数时候不需要在意Pod的调度方式。如果需要关心Pod的部署顺序、对应持久化存储或者要求Pod拥有固定的网络标识时,就需要StatefulSet控制器来完成调度工作

每个由StatefulSet创建出来的Pod都拥有一个序号(从0开始,启动完成才会进行下一个)和固定的网络标识。并且可以在yaml中定义添加**VolumeClaimTemplate**来声明Pod存储的PVC

StatefulSet 对于需要满足以下一个或多个需求的应用程序很有价值:

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

二、使用

---
apiVersion: v1
kind: Service
metadata:name: nginxlabels:app: nginx
spec:ports:- port: 80name: webclusterIP: Noneselector:app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: web
spec:serviceName: "nginx"replicas: 2selector:matchLabels:app: nginx  # 使用标签选择器,筛选标签里有app等于nginx的podstemplate:metadata:labels:app: nginx  # 创建一个带有标签app=nginx的podsspec:containers:- name: nginximage: nginx:1.7.9ports:- containerPort: 80name: web

这里创建了一个StatefulSet对象,关联了带有app=nginx的pods,并且还指定了名为nginx的service

为什么StatefulSet还需要指定service呢? service已经使用标签选择器选中了pods,StatefulSet通过关联 Service,可以为 StatefulSet 中的每个 Pod 分配一个稳定的网络标识(如 DNS 域名),使其可以从集群内和集群外进行访问。这种关联有助于实现有状态应用程序的可靠通信和外部访问。

比如想访问上面的pod可以使用, 格式为:pod名称.service名称.命名空间.svc.集群后缀,但后面的可以简写,比如:

ping  web-0.nginx

三、扩缩容

3.1、使用命令直接扩容
kubectl scale sts web --replicas=5
3.2、缩容
kubectl scale sts web --replicas=3

缩容完后再看日志

kubectl describe sts web---------------------------------------------Type    Reason            Age    From                    Message----    ------            ----   ----                    -------Normal  SuccessfulCreate  29m    statefulset-controller  create Pod web-0 in StatefulSet web successfulNormal  SuccessfulCreate  29m    statefulset-controller  create Pod web-1 in StatefulSet web successfulNormal  SuccessfulCreate  4m28s  statefulset-controller  create Pod web-2 in StatefulSet web successfulNormal  SuccessfulCreate  4m26s  statefulset-controller  create Pod web-3 in StatefulSet web successfulNormal  SuccessfulCreate  4m24s  statefulset-controller  create Pod web-4 in StatefulSet web successfulNormal  SuccessfulDelete  10s    statefulset-controller  delete Pod web-4 in StatefulSet web successfulNormal  SuccessfulDelete  3s     statefulset-controller  delete Pod web-3 in StatefulSet web successful

从日志里可以看出,StatefulSet的pods管理是有顺序

四、更新

4.1、普通更新

先使用命令进行修改内容后保存

kubectl edit sts web

statefulSet与depolyment的更新区别在于,statefulSet是有序的,按照倒叙进行一个一个的更新,看如下日志

kubectl describe sts web------------------------------------------Type    Reason            Age                       MessageNormal  SuccessfulDelete  19s                   delete Pod web-2 in StatefulSet web successfulNormal  SuccessfulCreate  18s (x2 over 10m)     create Pod web-2 in StatefulSet web successfulNormal  SuccessfulDelete  16s                   delete Pod web-1 in StatefulSet web successfulNormal  SuccessfulCreate  14s (x2 over 35m)     create Pod web-1 in StatefulSet web successfulNormal  SuccessfulDelete  12s                   delete Pod web-0 in StatefulSet web successfulNormal  SuccessfulCreate  11s (x2 over 35m)     create Pod web-0 in StatefulSet web successful
4.2、灰度更新/金丝雀发布

这是一种逐步升级 StatefulSet 的策略,它可以在不影响整个应用程序的情况下测试新版本的 Pod,并逐步将新版本的 Pod 逐步引入到应用程序中。

下面我们将操作一个场景,目前有三个nginx版本为1.9.1的pod,我们需要将这些pod切换成1.7.1的版本,但是不知道1.7.1版本是否有问题的情况下,我们需要先多扩展一个1.7.1的pod,如果这个1.7.1的没有问题了,我们就把另外所有的pod都换成这个版本

修改内容

kubectl edit sts web

修改部分


# 将镜像换成1.7.1
- image: nginx:1.7.1#  把partition 设置为 3,那么此时滚动更新时,只会更新那些 序号 >= 3 的 pod
updateStrategy:rollingUpdate:partition: 3

在这里,我们将partition设置为 3,而我们现在最大的pod序号是2(从0开始),所以这次修改内容并不会影响到原来的pod版本

4.3、删除更新策略

把更新模式设置为删除策略时,在更新 StatefulSet 配置文件时,不会触发pods的更新。相反,需要手动删除旧的pod,k8s才会创建一个新版本的Pod

spec:updateStrategy:type: OnDelete  # 或 RollingUpdate

五、非级联删除

当我们使用普通删除sts的命令时,会把下面的pods也删除了,如果我们只是想删除sts,不删下面的pods可以使用非级联删除命令

kubectl delete sts web --cascade=false

相关文章:

六、K8S之StatefulSet

StatefulSet 一、概念 和Deployment一样StatefulSet也是中一种可以帮助我们部署和扩展Pod的控制器,使用Deployment时多数时候不需要在意Pod的调度方式。如果需要关心Pod的部署顺序、对应持久化存储或者要求Pod拥有固定的网络标识时,就需要StatefulSet控…...

基于微服务+Java+Spring Cloud开发的建筑工地智慧平台源码 云平台多端项目源码

建筑工地智慧平台源码,施工管理端、项目监管端、数据大屏端、移动APP端全套源码 技术架构:微服务JavaSpring Cloud VueUniApp MySql自主版权实际应用案例演示 建筑工地智慧平台已应用于线上巡查、质量管理、实名制管理、危大工程管理、运渣车管理、绿色…...

微信小程序异常:navigateTo:fail can not navigateTo a tabbar page

场景还原 微信小程序利用路径wx.navigateTo跳转界面时发送异常 跳转代码 showDetail(e){// 获取图片绑定的ID编号let id e.currentTarget.dataset.id;// 指定编号查询 携带参数到详情界面 wx.navigateTo({url: /pages/details/details?id id,})}异常代码 WAServiceMain…...

智慧公厕高精尖技术揭秘,让卫生管理更智能、更舒适

随着科技的飞速发展,智慧公厕正逐渐走进人们的生活。借助物联网、互联网、云计算、大数据、人工智能、自动化控制等技术的应用,智慧公厕将卫生管理提升到一个全新的水平,为公众打造了清洁舒适的使用环境。本文以智慧公厕源头厂家广州中期科技…...

Spring Cloud的革新:服务网格和云原生整合

文章目录 介绍Spring Cloud服务网格的兴起Spring Cloud与Service Mesh的整合1. 服务发现2. 负载均衡3. 故障处理4. 安全性 云原生整合结论 🎉欢迎来到架构设计专栏~Spring Cloud的革新:服务网格和云原生整合 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f37…...

EfficientDet: Scalable and Efficient Object Detection

CVPR2020 V7 Mon, 27 Jul 2020 引用量:243 机构:Google 贡献:1>提出了多尺度融合网络BiFPN 2>对backbone、feature network、box/class prediction network and resolution进行复合放缩,有着不同的…...

【数据结构】二叉树链式存储及遍历

二叉树链式存储及遍历 文章目录 二叉树链式存储及遍历前言实现过程代码实现源代码总结 前言 本文章中的内容参考于王道数据结构考研书,如果你对该部分的内容的记忆有所模糊,可以阅读我的文章再加深印象 实现过程 1.定义二叉树结构体 2.初始化二叉树的根结…...

数字孪生技术:新零售的未来之路

随着科技的不断进步,新零售产业正经历着巨大的变革。数字孪生作为一种新兴技术正在加速这一变革的进程。它不仅为新零售企业带来了更高效的运营方式,还为消费者提供了更个性化、便捷的购物体验。那么,数字孪生技术究竟如何在新零售产业中发挥…...

NIO教程

一,概述 原本的java是基于同步阻塞式的i/o通信(bio) 性能低下,所以出现了nio这种非阻塞式的 二,Java 的I/O演进之路 2.1 i/o模型基本说明 i/o模型:就是用什么样的通道或者说通信模式和架构进行数据的传输和接收&am…...

【MySQL】表的内连和外连

文章目录 一. 内连接二. 外连接1. 左外连接2. 右外连接 一. 内连接 利用where子句对两种表形成的笛卡尔积进行筛选,其实就是内连接的一种方式 另一种方式是inner join select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件现在有如下表 mysql> desc…...

文心一言:文心大模型 4.0 即将发布

本心、输入输出、结果 文章目录 文心一言:文心大模型 4.0 即将发布前言文心 4.0 的成本问题架构文心 4.0 是否可以对标 GPT-4文心4.0 会不会收费弘扬爱国精神文心一言:文心大模型 4.0 即将发布 编辑:简简单单 Online zuozuo 地址:https://blog.csdn.net/qq_15071263 前言 …...

HTML笔记

注释标签&#xff1a;<!-- --> 标题标签&#xff1a;&#xff08;作用范围依次递减&#xff09; <h1></h1> <h2></h2> <h3></h3> <h4></h4> <h5></h5> <h6></h6> 段落标签&#xff1a;<p&g…...

design compiler中的drc规则详解

design compiler中的drc规则详解 DRC是什么&#xff1f;DRC分类各个DRC的含义写在最后 DRC是什么&#xff1f; 本文讨论的DRC即是Design Rule Constraint,而不是Design Rule Check&#xff0c;后者是物理端或者后端的一个关键步骤。 DRC分类 DRC为DC中的一个约束大类&#x…...

CEC2013(MATLAB):螳螂搜索算法(Mantis Search Algorithm,MSA)求解CEC2013

一、螳螂搜索算法 螳螂搜索算法&#xff08;Mantis Search Algorithm&#xff0c;MSA&#xff09;由Mohamed Abdel-Basset等人于2023年提出&#xff0c;该算法模拟螳螂独特的狩猎和性同类相食行为。MSA由三个优化阶段组成&#xff0c;包括寻找猎物&#xff08;探索&#xff09…...

【错误:No package snapd available.】在 CentOS 上启用 snap 并安装 snapd

参考&#xff1a;Install snapd on CentOS using the Snap Store | Snapcraft sudo yum install epel-releasesudo yum install snapd...

Shell命令笔记2

大家好&#xff0c;分享下最近工作中用得比较多的shell命令&#xff0c;希望对大家有帮助。 获取数组长度&#xff1a; ${#array_name[*]}获取脚本相对路径 script_path$(dirname "$0")获取脚本的名字 script_name$(basename "$0")获取脚本的绝对路径 …...

怎么团队合作,协作开发

一、代码托管平台 我是在大一下的一个竞赛中接触到的代码托管平台 那个时候我也算是什么都不会的&#xff0c;不过不得不说这个确实比较重要&#xff0c;对我造成了一些冲击 在我看来&#xff0c;代码托管平台的作用就是在一个中转站&#xff08;仓库&#xff09;上存储我们写…...

python 练习--更新

1.判断一个列表中的数值是否全部小于某个数 方法一&#xff1a;利用if函数 &#xff08;只要列表中有一个数字比大 就可以终止比较&#xff09; n int(input("请输入需要比较的数字:")) arr1 [1,3,4,5,8] index 0 for i in arr1:if i > n:index 1continue…...

【Java 进阶篇】JavaScript 事件详解

在本篇博客中&#xff0c;我们将深入探讨JavaScript事件&#xff0c;这是网页交互的核心。我们将从什么是事件开始&#xff0c;然后逐步介绍事件的类型、如何注册事件、事件处理程序、事件对象以及事件冒泡等相关内容。最终&#xff0c;我们将提供大量的示例代码来帮助您更好地…...

动态内存管理+柔性数组+经典笔试题

&#x1f493;博客主页&#xff1a;江池俊的博客⏩收录专栏&#xff1a;C语言进阶之路&#x1f449;专栏推荐&#xff1a;✅C语言初阶之路 ✅数据结构探索&#x1f4bb;代码仓库&#xff1a;江池俊的代码仓库&#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐ 文…...

DanKoe 视频笔记:通用时代崛起:如何通过多种兴趣茁壮成长

在本教程中&#xff0c;我们将探讨为何在当今的“创作者经济”中&#xff0c;拥有广泛兴趣和技能的“通才”比只精通一门的“专家”更具优势。我们将分析背后的原因&#xff0c;并提供一套实用的步骤&#xff0c;帮助你作为一名通才&#xff0c;在数字世界中建立个人品牌、吸引…...

硅基神经植入体耐久性研究新突破

神经植入体包含构建在硅材料上的集成电路&#xff08;IC&#xff09;&#xff0c;即通常所说的芯片。这些植入体需要做到小巧且柔韧&#xff0c;以模拟人体内部的环境。然而&#xff0c;人体内的环境具有腐蚀性&#xff0c;这引发了人们对可植入硅IC耐久性的担忧。一支研究团队…...

智慧电子元器件识别 电子废弃物场景下的物料分类与元器件识别 元器件分拣数据集 电子废弃物自动分拣 电容数据集 保险丝数据集 第10617期

电子废弃物分类与元器件检测数据集 README 项目概述 本数据集专注于电子废弃物场景下的物料分类与元器件识别任务&#xff0c;为固废资源化利用、智能拆解及环保检测领域提供高质量标注数据&#xff0c;助力电子废弃物的高效回收与无害化处理。核心数据信息维度内容数据类别共1…...

汉字破局:AI时代的文明反攻与英语世界的“偷师”真相

汉字破局&#xff1a;AI时代的文明反攻与英语世界的“偷师”真相今天我们要聊的&#xff0c;从来不是简单的“中文VS英文”语言之争&#xff0c;而是一场席卷AI世界的文明维度大反攻——三千年前刻在龟甲上的甲骨文&#xff0c;那些横平竖直、撇捺交错的线条&#xff0c;正在以…...

OpCore-Simplify终极指南:如何快速构建完美的OpenCore EFI配置

OpCore-Simplify终极指南&#xff1a;如何快速构建完美的OpenCore EFI配置 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的Hackintosh配置…...

HarfBuzz完全指南:如何理解字体渲染引擎的核心技术与字体子集化实践 [特殊字符]

HarfBuzz完全指南&#xff1a;如何理解字体渲染引擎的核心技术与字体子集化实践 &#x1f680; 【免费下载链接】harfbuzz HarfBuzz text shaping engine 项目地址: https://gitcode.com/gh_mirrors/ha/harfbuzz HarfBuzz是一个开源的文本整形引擎&#xff0c;专门处理复…...

抖音内容高效下载实战:从单视频到批量采集的完整指南

抖音内容高效下载实战&#xff1a;从单视频到批量采集的完整指南 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 还在为无法保存喜欢的抖音内容而烦恼吗&#xff1f;是否经常遇到需要批量下载用户主页所有作…...

直接上干货,咱们用粒子群算法给PID控制器做个暴力调参。传统PID参数调整像盲人摸象,PSO(粒子群优化)相当于派出一群带雷达的无人机直接扫描整片山区找最优解

基于粒子群算法的PID控制优化算法案例 matlab源代码 代码有详细注释&#xff0c;完美运行先看目标——让这个二阶系统达到最顺滑的响应&#xff1a; % 被控对象传递函数 sys tf(1, [1 3 2]); t 0:0.01:10; % 时间序列 粒子群的核心配置得够骚&#xff1a; %% PSO参…...

AI图像放大神器Upscayl:告别模糊时代的终极解决方案

AI图像放大神器Upscayl&#xff1a;告别模糊时代的终极解决方案 【免费下载链接】upscayl &#x1f199; Upscayl - Free and Open Source AI Image Upscaler for Linux, MacOS and Windows built with Linux-First philosophy. 项目地址: https://gitcode.com/GitHub_Trendi…...

Qwen3-ForcedAligner在开源项目中的贡献指南

Qwen3-ForcedAligner在开源项目中的贡献指南 1. 引言 如果你对语音识别和音频处理感兴趣&#xff0c;想要为开源项目做贡献&#xff0c;Qwen3-ForcedAligner是个绝佳的选择。这个项目专注于语音文本对齐技术&#xff0c;能够精确标注音频中每个词或字符的时间戳&#xff0c;对…...