Kubernetes从零到精通(07-工作负载-StatefulSet)

StatefulSet示例

        正如Deployment管理无状态应用程序的资源,StatefulSet用来管理有状态应用程序(如kafka、redis、zookeeper集群等)的资源,它为每个 Pod 分配一个固定的名称和存储,以确保它们可以保留状态,无论Pod怎么调度,每个 Pod 的 ID都是永久不变的。下面是一个基于 StatefulSet 的 Redis 集群配置示例,使用持久化存储PVC和无头服务Headless Service来确保 Redis 节点的可访问性。

1.创建应用配置文件redis-statefulset-demo.yaml:

apiVersion: apps/v1
kind: StatefulSet
metadata:name: redislabels:app: redis
spec:selector:matchLabels:app: redisserviceName: "redis"  #与一个叫redis的无头服务关联replicas: 3  #创建三个Redis副本template:metadata:labels:app: redisspec:containers:- name: redisimage: redis:6.2  # 使用Redis官方镜像6.2ports:- containerPort: 6379name: redisvolumeMounts:- name: redis-datamountPath: /data  #Redis数据存储路径resources:requests:memory: "256Mi"cpu: "100m"limits:memory: "512Mi"cpu: "500m"command: ["redis-server", "--appendonly", "yes"]  # 启用持久化volumeClaimTemplates:  #定义PVC的模板- metadata:name: redis-data  #PVC名称spec:accessModes: [ "ReadWriteOnce" ]  #定义为仅可读写一次resources:requests:storage: 2Gi  #每个Redis实例请求2Gi的存储storageClassName: storage-demo  #使用一个叫storage-demo的StorageClass

2.Service和存储后续会详细介绍,创建的示例文件如下:

apiVersion: v1
kind: Service
metadata:name: redislabels:app: redis
spec:ports:- port: 6379name: redisclusterIP: None  #None表示无头服务,支持StatefulSet Pod的DNS解析selector:app: redis
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: storage-demo
provisioner: kubernetes.io/aws-ebs  #例如AWS EBS接口动态提供存储
parameters:type: gp2

3.开始创建:

kubectl apply -f storageclass-demo.yaml

kubectl apply -f headlessservice-demo.yaml 

kubectl apply -f redis-statefulset-demo.yaml

4.验证Pod状态和服务状态:

kubectl get pods -l app=redis

kubectl exec -it redis-0 -- redis-cli  

StatefulSet关键特性 

1.稳定的网络标识

        每个StatefulSet中的Pod都有一个唯一的、有序的网络标识,它们的名称遵循pod_name-[0,1,2,...]的格式。例如,如果StatefulSet名称为redis,Pod的名称将是redis-0、redis-1、redis-2等。这些Pod名称在整个生命周期内不会改变,即使Pod重新调度到不同的节点。StatefulSet通常配合无头服务(HeadlessService)使用,使得每个Pod都可以通过一个固定的DNS名称被访问,例如redis-0.redis.default.svc.cluster.local。

2.稳定的存储

        StatefulSet可以与PersistentVolumeClaim(PVC)一起使用,每个Pod都可以分配到唯一的PVC,这样可以保证每个Pod拥有固定的存储,确保数据持久化。即使Pod被重新调度,它们也会重新挂载相同的存储卷,保持数据的完整性。

3.有序部署和终止

         StatefulSet会按照顺序(从0到N)来创建、更新和删除Pod。这意味着在部署时,redis-0会先启动,之后依次启动redis-1、redis-2等。Pod的删除顺序是逆序的,即从redis-N开始到redis-0,以确保应用程序的有序启动和关闭。

4.有序更新

         在更新StatefulSet时,Pod会按顺序逐个更新,即只有在前一个Pod成功启动并运行后,才会更新下一个Pod。这种更新方式适用于需要维护数据一致性的有状态应用,比如数据库或分布式系统。

 

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

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

相关文章

PHP仓库物资出入库管理系统小程序源码

仓库物资出入库管理系统:让库存管理变得井井有条 **📦 开篇:告别混乱,拥抱智能库存时代 还在为仓库里堆积如山的物资和繁琐的出入库记录而头疼吗?是时候告别那些混乱的日子了!“仓库物资出入库管理系统”应…

Redis的持久化和高可用性

目录 一、淘汰策略 1、背景 2、淘汰策略 二、持久化 1、背景 2、fork进程写时复制机制 3、Redis持久化方式 1、aof 2、rdb 三、高可用 1、主从复制 2、Redis哨兵模式 3、Redis cluster集群 一、淘汰策略 1、背景 首先Redis是一个内存数据库,将所有数…

【Python机器学习】序列到序列建模和注意力机制——编码-解码架构

LSTM非常擅长处理序列,但我们需要一对而不是一个LSTM。我们将构建一个模块化的架构,称为编码-解码架构。 编码-解码架构的前半部分是序列编码器,该网络将序列(如自然语言文本)转换为较低维的表示形式(如思…

重生奇迹MU 红龙剑士的风采 游戏玩家的记忆

在重生奇迹MU游戏中,剑士是一个老牌职业,而其中红龙剑士更是备受瞩目的角色。红龙剑士选手身着一身红色龙王装,仿佛已经沐浴了敌人的鲜血,是一个经验丰富的剑手。很多老玩家都信任剑士这个职业,并视其为忠实的伙伴&…

[每周一更]-(第114期):介绍GitLab不同角色对应的权限

文章目录 GitLab 角色及其权限项目级别角色组级别角色 使用场景示例 工作中一直使用Gitlab搭建了公司内网的代码管理工具,但是不同的用户会分配相应的权限,来管理不同用户及角色的权限信息,我们来介绍下角色的信息,方便我们管理公…

C++教程(一):超详细的C++矩阵操作和运算(附实例代码,与python对比)

python教程(一):超详细的numpy矩阵操作和运算(附实例代码) 在之前的章节中,我们详细介绍了python中numpy的矩阵操作。但在自动驾驶开发中,我们一般采用C进行功能开发,因此C矩阵运算…

重学SpringBoot3-集成RocketMQ(二)

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成RocketMQ(二) 1. 基础概念2. 准备工作3. 实现事务消息的生产者4. 事务监听器实现5. 消费者示例6. 发送事务消息7. 测试7.1 模…

【新片场-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

如何用SQL Server和Oracle进行数据同步?

数据同步是大数据应用中非常重要的环节,它可以保证数据的实时性和一致性,为数据分析和决策提供重要依据。常见的数据同步方式包括ETL实时同步和实时ETL工具,其中实时ETL工具又可以分为基于日志追踪和基于触发器两种。 针对不同的数据库系统&…

在grafana上配置显示全部node资源信息概览

在grafana上配置显示全部node资源信息概览,便于巡检 1,注册grafana官网账号:Grafana dashboards | Grafana Labs 2、寻找可以展示所有node资源概览信息的dashboard,并下载支持prometheus数据源的dashboard&#xff…

DevOps 中常常被忽略却至关重要的一个工具

在今天的云原生开发时代,DevOps 已经成为许多企业提高开发和运维效率的标准流程。DevOps 工具链广泛而复杂,涵盖了从规划、开发、测试到部署、监控和运维的多个环节。例如:规划与项目管理工具 GitLab、Jira;版本控制工具 Git&…

c++—多态【万字】【多态的原理】【重写的深入学习】【各种继承关系下的虚表查看】

目录 C—多态1.多态的概念2.多态的定义及实现2.1多态的构成条件2.2虚函数的重写2.2.1虚函数重写的两个例外:2.2.1.1协变2.2.1.2析构函数的重写 2.3 c11的override和final2.3.1final2.3.2override 2.4 重载、重写、重定义的对比 3.抽象类3.1抽象类的概念3.2接口继承和…

搜索树和Map

一.搜索树 1.概念 二叉搜索树又叫二叉排序树,它可以是一颗空树也可以是具有以下性质的二叉树 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左子树也分别为二…

Redis 篇-深入了解使用 Redis 中的 GEO 数据结构实现查询附近店铺、BitMap 实现签到功能、HyperLogLog 实现 UV 流量统计

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 GEO 数据结构的基本用法 1.1 使用 GEO 导入数据 1.2 使用 GEO 实现查找附近店铺功能 2.0 BitMap 基本用法 2.1 使用 BitMap 实现签到功能 2.2 统计连续签到功能 3…

windows server2012 配制nginx安装为服务的时候,直接跳要安装.net框架,用自动的安装,直接失败的解决。

1、上一个已成功在安装过程中的图: 2、之前安装过程中错误的图: 3、离线安装解决: 下载.net framework 3.5,然后解压后,选择指定备用源路径,然后选择.net安装包所在目录: 只要指定上面全路径就…

4G模块点对点传输手把手教程!如何实现远程设备直接通信

使用4G模块进行点对点传输,可以实现远程设备的直接通信,广泛应用于工业控制、远程监控、物联网等领域。本教程将详细讲解如何通过4G模块,构建设备之间的点对点(P2P)传输系统,从配置设备、建立通信通道到实际…

Delphi Web和Web服务开发目前有哪些选择

Delphi Web和Web服务开发目前有哪些选择 Delphi Web和Web服务开发目前有以下几个选择: Delphi MVC Framework(https://github.com/delphimvcframework/delphimvcframework):这是一个开源的Delphi Web框架,基于MVC&am…

【Linux】基本指令及其周边知识

1.准备阶段 在介绍Linux的基本指令之前,我先先向大家介绍一下我的Linux平台,首先我是在阿里云买了个服务器,然后使用Xshell来远程登录Linux,之后有关Linux上的操作都是在这上面进行的。如果你也买了相关的服务器并且设置了相关示…

Parallels Desktop19中文版2024九月最新

Parallels Desktop可以使轻松地在 MAC上运行成千上万款 Windows应用程序,如Excel,会计交易软件等。针对最新版 windows11和macOS Sonoma 进行优化。在 MAC虚拟机中跨多个操作系统开发和测试。包含 Parallels Toolbox – 40 多个适用于 Mac 和 PC 的一键…

ROS1录包偶现一次崩溃问题定位

现象&#xff1a;崩到了mogo_reporter里面 堆栈&#xff1a;crash里面同时存在两个主线程的堆栈 代码 #include "boost/program_options.hpp" #include <signal.h> #include <string> #include <sstream> #include <iostream> #include <…