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的配置、以…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...
