当前位置: 首页 > 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;收藏⭐ 文…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件&#xff0c;这个上传文件是整体功能的一部分&#xff0c;文件在上传的过程中…...