Kubernetes示例yaml:3. service-statefulset.yaml
service-statefulset.yaml 示例
apiVersion: apps/v1
kind: statefulset
metadata:......
spec:......volumeMounts:- name: pvcmountPath: /var/lib/arangodb3VolumeClaimTemplates:- metadata:name: pvcspec:accessModes: [ "ReadWriteOnce" ]storangeClassName: hw-block-classresources:requests:storange: 8Gi---
apiVersion: v1
kind: Service
metadata:...
spec:...
解释
-
volumeMounts:定义了 StatefulSet 中 Pod 的 Volume 挂载信息。name: pvc:指定了要挂载的 VolumeClaimTemplates 的名称为pvc,这需要与下面定义的 VolumeClaimTemplates 的名称相匹配。mountPath: /var/lib/arangodb3:指定了将 Volume 挂载到容器内部的/var/lib/arangodb3路径下,使得容器可以访问该路径下的持久化存储。
-
volumeClaimTemplates:定义了 StatefulSet 中使用的 PersistentVolumeClaim (PVC) 模板。metadata.name: pvc:指定了 PVC 模板的名称为pvc,这个名称将被上面的volumeMounts中使用。spec.accessModes: [ "ReadWriteOnce" ]:指定了 PVC 的访问模式为ReadWriteOnce,表示该卷可以被单个节点挂载为读写模式。spec.storageClassName: hw-block-class:指定了 PVC 的存储类名称为hw-block-class,用于动态分配存储资源。spec.resources.requests.storage: 8Gi:指定了 PVC 请求的存储容量为 8GiB。
综合起来,这段配置的作用是:
- 在 Pod 中创建一个名为
pvc的 PersistentVolumeClaim (PVC),请求至少 8GB 的存储空间,使用存储类hw-block-class,并且可以在单个节点上以读写模式挂载。 - 将名为
pvc的 Volume(实际映射到 PVC)挂载到容器内部的/var/lib/arangodb3路径下,让容器可以访问该持久化存储空间,例如存储 ArangoDB 数据或配置等。
问题
问题1
spec.storageClassName: hw-block-class:指定 PVC 的存储类名称为hw-block-class,用于匹配集群中已定义的存储类,从而提供不同的存储选项。这个从哪儿来的
存储类(StorageClass)是 Kubernetes 中用于动态管理持久化存储的对象。存储类定义了动态分配的存储属性,例如存储类型、复制策略、IOPS 等。通过定义存储类,集群管理员可以为不同的应用程序提供不同的存储选项,并根据需求自动分配存储资源。
在上述配置中,spec.storageClassName: hw-block-class 这一行指定了 PersistentVolumeClaim (PVC) 使用的存储类名称为 hw-block-class。这意味着该 PVC 请求的存储空间会使用集群中预先定义的名为 hw-block-class 的存储类来分配对应的存储资源。存储类定义了存储的类型和其他属性,例如是云存储还是本地存储、存储的容量、访问模式等。
在 Kubernetes 集群中,存储类通常由集群管理员预先定义,并且根据不同的存储需求创建不同的存储类。例如,对于不同的应用程序可能需要不同类型的存储,比如高性能存储、低成本存储、备份存储等。通过指定存储类,开发人员可以方便地为他们的应用程序请求适合的存储资源,而不需要关心底层的存储细节。
因此,spec.storageClassName: hw-block-class 这一行是根据集群管理员预先定义的存储类来指定 PVC 的存储属性,以满足应用程序对存储资源的需求。
问题2
spec.accessModes: [ "ReadWriteOnce" ]:指定 PVC 的访问模式为ReadWriteOnce,表示该卷可以被单个节点挂载为读写模式。其他访问模式还包括ReadOnlyMany和ReadWriteMany,分别用于多节点只读和多节点读写。分别有什么意义和作用呢?
- ReadWriteOnce (RWO):
- 该访问模式表示卷可以被单个节点挂载为读写模式。
- 单个 Pod 可以挂载该卷,并且可以同时对该卷进行读取和写入操作。
- 适用于需要单个节点独占性能或需要写入操作的场景。
- ReadOnlyMany (ROX):
- 该访问模式表示卷可以被多个节点挂载为只读模式。
- 多个 Pod 可以同时挂载该卷,但只能对该卷进行读取操作,无法进行写入操作。
- 适用于多个 Pod 需要共享只读数据的场景,例如静态文件或配置文件等。
- ReadWriteMany (RWX):
- 该访问模式表示卷可以被多个节点挂载为读写模式。
- 多个 Pod 可以同时挂载该卷,并且可以对该卷进行读取和写入操作。
- 适用于需要多个 Pod 共享读写数据的场景,例如数据库或共享文件系统等。
在您的配置中,使用了 spec.accessModes: [ "ReadWriteOnce" ],表示该 PVC 请求的存储卷可以被单个节点挂载为读写模式。这通常用于需要单个 Pod 对存储进行读写操作的场景。如果需要多个 Pod 共享只读数据或共享读写数据,可以根据实际需求选择其他的访问模式,如 ReadOnlyMany 或 ReadWriteMany。
问题3
没用deploment而是用了statefulset,有什么意义呢?
- 稳定的网络标识符:
- StatefulSet 为每个 Pod 分配一个稳定的网络标识符,通常以序号的形式命名,例如
pod-0,pod-1等。 - 这些标识符对于有状态的应用程序(如数据库)非常重要,因为它们确保了每个 Pod 都有唯一的标识符,并且可以持久化地存储和管理数据。
- StatefulSet 为每个 Pod 分配一个稳定的网络标识符,通常以序号的形式命名,例如
- 有序部署和扩展:
- StatefulSet 支持有序部署和扩展。即使在有多个副本的情况下,StatefulSet 也会确保 Pod 的创建、启动和关闭都是有序的。
- 这对于依赖特定顺序启动或关闭的应用程序非常重要,例如数据库集群中的主节点和从节点顺序启动。
- 稳定的持久化存储:
- StatefulSet 结合 PersistentVolumeClaim (PVC) 可以提供稳定的持久化存储,每个 Pod 都可以访问其自己的持久化存储卷。
- 这对于需要持久化存储的有状态应用程序(如数据库、消息队列)非常关键,确保数据不会丢失或被随意清理。
- 有状态应用程序支持:
- StatefulSet 更适合部署有状态应用程序,例如数据库、缓存系统等,这些应用程序需要稳定的网络标识符和持久化存储。
总的来说,如果您的应用程序是有状态的,并且需要稳定的网络标识符、有序部署和扩展以及持久化存储,那么使用 StatefulSet 是更合适的选择。而 Deployment 则更适用于无状态应用程序或可以快速水平扩展的应用程序。
问题4
PVC 需要在外部创建是吗?
是的,PersistentVolumeClaim (PVC) 需要在 Kubernetes 集群外部先创建好,然后在 Pod 或 StatefulSet 的配置中引用该 PVC。下面是一些创建 PVC 的步骤:
- 定义 PersistentVolumeClaim:
在 Kubernetes 集群外部(通常是通过kubectl或YAML文件),定义要创建的 PersistentVolumeClaim。在 PVC 的定义中通常包括存储类、访问模式、请求的存储容量等信息。 - 创建 PersistentVolumeClaim:
使用kubectl apply命令或其他管理工具,在 Kubernetes 集群中创建上述定义的 PersistentVolumeClaim。Kubernetes 将根据 PVC 的定义请求集群中可用的持久化存储资源。 - 在 Pod 或 StatefulSet 中引用 PVC:
在 Pod 或 StatefulSet 的配置文件中,通过volumeClaimTemplates或volumeMounts等字段引用上述创建的 PersistentVolumeClaim。这样,Pod 或 StatefulSet 就可以访问到该 PVC 提供的持久化存储空间。
总的来说,PersistentVolumeClaim (PVC) 是对持久化存储的一种请求,它需要依赖集群中已经存在的持久化存储资源(如存储卷)来提供实际的存储空间。因此,在创建 PVC 之前,您需要确保集群中已经存在适合的存储资源或存储类,并按照需要进行配置和管理。
创建存储类(StorageClass)通常有几种方式,取决于您的 Kubernetes 环境和存储后端支持的特性。下面是几种常见的创建存储类的方式示例:
- 静态创建存储类
静态创建存储类是通过直接创建存储类的 YAML 文件或使用 kubectl 命令手动创建存储类的方式。
示例 YAML 文件(hw-block-class.yaml):
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:name: hw-block-class
provisioner: your-provisioner-name
parameters:type: blockzone: us-west1-a
使用 kubectl 创建:kubectl apply -f hw-block-class.yaml
- 动态创建存储类
动态创建存储类是通过集群中已经安装的存储控制器动态创建存储类的方式。您需要确保已经安装了支持动态存储的存储插件,如csi-hostpath、rook、ceph等。
示例 YAML 文件(dynamic-hw-block-class.yaml):
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:name: dynamic-hw-block-class
provisioner: your-dynamic-provisioner-name
parameters:type: blockzone: us-west1-a
使用 kubectl 创建:kubectl apply -f dynamic-hw-block-class.yaml
注意事项:
provisioner 字段指定了存储后端的名称,例如 CSI 驱动、FlexVolume 驱动或云服务提供商的存储插件名称。
parameters 字段中的配置取决于您的存储后端,例如存储类型、区域、性能选项等。
在实际操作中,请根据您的环境和存储后端的要求调整上述示例中的字段和数值。创建存储类后,您就可以在 PersistentVolumeClaim (PVC) 的定义中引用该存储类,以请求动态分配的持久化存储资源。
相关文章:
Kubernetes示例yaml:3. service-statefulset.yaml
service-statefulset.yaml 示例 apiVersion: apps/v1 kind: statefulset metadata:...... spec:......volumeMounts:- name: pvcmountPath: /var/lib/arangodb3VolumeClaimTemplates:- metadata:name: pvcspec:accessModes: [ "ReadWriteOnce" ]storangeClassName: …...
Windows平台cmake编译QT源码库,使用VScode开发QT
不愿意安装庞大的QT开发IDE,可以编译QT源码库。 下载源码可以用国内镜像,如清华大学的:Index of /qt/archive/qt/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 我用的是 6.5.3,进去之后,不要下载整个源…...
腾讯云轻量8核16G18M服务器多少钱一年?
腾讯云轻量8核16G18M服务器多少钱一年?优惠价格4224元15个月,买一年送3个月。配置为轻量应用服务器、16核32G28M、28M带宽、6000GB月流量、上海/广州/北京、380GB SSD云硬盘。 腾讯云服务器有两个活动,一个是官方的主会场入口,还…...
二分练习题——123
123 二分等差数列求和前缀和数组 题目分析 连续一段的和我们想到了前缀和,但是这里的l和r的范围为1e12,明显不能用O(n)的时间复杂度去求前缀和。那么我们开始观察序列的特点,可以按照等差数列对序列进行分块。如上图,在求前10个…...
淘宝详情数据采集(商品上货,数据分析,属性详情,价格监控),海量数据值得get
淘宝详情数据采集涉及多个环节,包括商品上货、数据分析、属性详情以及价格监控等。在采集这些数据时,尤其是面对海量数据时,需要采取有效的方法和技术来确保数据的准确性和完整性。以下是一些关于淘宝详情数据采集的建议: 请求示…...
Django之Web应用架构模式
一、Web应用架构模式 在开发Web应用中,有两种模式 1.1、前后端不分离 在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示。前端与后端的耦合度很高 1.2、前后端分离 在前后端分离的应用模式中,后端仅返…...
GPT提示词分享 —— 口播脚本
可用于撰写视频、直播、播客、分镜头和其他口语内容的脚本。 提示词👇 请以人的口吻,采用缩略语、成语、过渡短语、感叹词、悬垂修饰语和口语化语言,避免重复短语和不自然的句子结构,撰写一篇关于 [主题] 的文章。 GPT3.5&#…...
笔记本作为其他主机显示屏(HDMI采集器)
前言: 我打算打笔记本作为显示屏来用,连上工控机,这不是贼方便吗 操作: 一、必需品 HDMI采集器一个 可以去绿联买一个,便宜的就行,我的大概就长这样 win10下载 PotPlayer 软件 下载链接:h…...
02.percona Toolkit工具pt-archiver命令实践
1.命令作用 Percona Toolkit有的32个命令,可以分为7大类 工具类别 工具命令 工具作用 备注 开发类 pt-duplicate-key-checker 列出并删除重复的索引和外键 pt-online-schema-change 在线修改表结构 pt-query-advisor 分析查询语句,并给出建议&#x…...
【天狼启航者】研究计划
“造车”,预计在4月中旬展开(嵌入式蓝桥杯比赛结束后),这里先计划一下,不断更新。 基本要求: 使用STM32F407系列芯片,使用FreeRTOS系统。 驱动程序必须要有强大的可移植性、模块化、低耦合、简…...
面试题 之 webpack
1.说说你对webpack理解?解决什么问题? Webpack 是实现前端项目的模块化,用于现代 JavaScript 应用程序的静态模块打包工具,被webpack 直接引用的资源打包进 bunde.js的资源,当webpack 处理应用程序时,它会在内部构建一…...
【机器学习之旅】概念启程、步骤前行、分类掌握与实践落地
🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…...
外星人m18R2国行中文版原厂预装23H2原装Win11系统恢复带F12恢复重置
戴尔外星人m18R2国行中文版原厂预装23H2系统恢复安装 远程恢复安装:https://pan.baidu.com/s/166gtt2okmMmuPUL1Fo3Gpg?pwdm64f 提取码:m64f 1.自带原厂预装系统各驱动,主题,Logo,Office带所有Alienware主题壁纸、Alienware软件驱动 2.带…...
libVLC 视频抓图
Windows操作系统提供了多种便捷的截图方式,常见的有以下几种: 全屏截图:通过按下PrtSc键(Print Screen),可以截取整个屏幕的内容。截取的图像会保存在剪贴板中,可以通过CtrlV粘贴到图片编辑工具…...
Docker搭建LNMP环境实战(06):Docker及Docker-compose常用命令
Docker搭建LNMP环境实战(06):Docker及Docker-compose常用命令 此处列举了docker及docker-compose的常用命令,一方面可以做个了解,另一方面可以在需要的时候进行查阅。不一定要强行记忆,用多了就熟悉了。 1、…...
ClickHouse10-ClickHouse中Kafka表引擎
Kafka表引擎也是一种常见的表引擎,在很多大数据量的场景下,会从源通过Kafka将数据输送到ClickHouse,Kafka作为输送的方式,ClickHouse作为存储引擎与查询引擎,大数据量的数据可以得到快速的、高压缩的存储。 Kafka大家…...
Encoding类
Encoding System.Text.Encoding 是 C# 中用于处理字符编码和字符串与字节之间转换的类。它提供了各种静态方法和属性,**用于在不同字符编码之间进行转换,**以及将字符串转换为字节数组或反之。 在处理多语言文本、文件、网络通信以及其他字符数据的场景…...
标定系列——预备知识-OpenCV中实现Rodrigues变换的函数(二)
标定系列——预备知识-OpenCV中实现Rodrigues变换的函数(二) 说明记录 说明 简单介绍罗德里格斯变换以及OpenCV中的实现函数 记录...
2014年认证杯SPSSPRO杯数学建模C题(第一阶段)土地储备方案的风险评估全过程文档及程序
2014年认证杯SPSSPRO杯数学建模 C题 土地储备方案的风险评估 原题再现: 土地储备,是指市、县人民政府国土资源管理部门为实现调控土地市场、促进土地资源合理利用目标,依法取得土地,进行前期开发、储存以备供应土地的行为。土地…...
我的编程之路:从非计算机专业到Java开发工程师的成长之路 | 学习路线 | Java | 零基础 | 学习资源 | 自学
小伙伴们好,我是「 行走的程序喵」,感谢您阅读本文,欢迎三连~ 😻 【Java基础】专栏,Java基础知识全面详解:👉点击直达 🐱 【Mybatis框架】专栏,入门到基于XML的配置、以…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...
