k8s存储介绍(六)StorangeClass

一、Kubernetes 存储类(StorageClass)详解

1. 什么是 StorageClass?

在 Kubernetes 中,StorageClass(存储类)是一种用于动态创建 PersistentVolume(PV)的资源对象。它允许管理员根据不同的存储需求创建不同的存储策略,用户只需要声明 PersistentVolumeClaim(PVC)并指定 StorageClass,Kubernetes 就能自动分配相应的存储。

2. 为什么需要 StorageClass?

在没有 StorageClass 的情况下,管理员需要手动创建 PersistentVolume,并与 PersistentVolumeClaim 进行匹配。这种方式适用于静态存储,但在大规模集群或云环境下,动态创建存储更加灵活。因此,StorageClass 解决了以下问题:

  • 自动化存储分配:无需手动创建 PV,而是由 Kubernetes 负责创建和管理。

  • 支持不同的存储后端:适用于 AWS EBS、Google Persistent Disk、Azure Disk、NFS、Ceph 等多种存储方案。

  • 提供不同的存储策略:支持不同的存储性能(高 IOPS、低延迟)、快照、备份等需求。

3. StorageClass 的关键字段

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: fast-storage
provisioner: kubernetes.io/aws-ebs
parameters:type: gp2
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
主要字段解析:
  • provisioner:指定存储供应商,例如 AWS EBS(kubernetes.io/aws-ebs)、Google Cloud Persistent Disk(kubernetes.io/gce-pd)等。

  • parameters:存储类的参数,例如磁盘类型、性能级别等。

  • reclaimPolicy(回收策略):定义存储释放后的行为。

    • Delete(删除):删除 PV 和底层存储。

    • Retain(保留):数据仍然保留,需要手动清理。

    • Recycle(回收):(已废弃)清理数据后重新使用。

  • volumeBindingMode(卷绑定模式):

    • Immediate(立即绑定):PVC 创建时立即绑定。

    • WaitForFirstConsumer(等待首个消费者):只有 Pod 使用 PVC 时才会绑定 PV,适用于多可用区调度。

  • allowVolumeExpansion(允许扩容):是否允许存储动态扩展。

4. 常见存储供应商

存储后端Provisioner适用场景
AWS EBSkubernetes.io/aws-ebsAWS 云环境,块存储
GCE PDkubernetes.io/gce-pdGCP 云存储
Azure Diskkubernetes.io/azure-diskAzure 云存储
NFSkubernetes.io/nfs共享存储
Cephceph.com/rbd分布式存储

5. PVC 使用 StorageClass 示例

创建 PVC 时使用 StorageClass
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: example-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10GistorageClassName: fast-storage
Pod 挂载 PVC 示例
apiVersion: v1
kind: Pod
metadata:name: example-pod
spec:containers:- name: app-containerimage: nginxvolumeMounts:- mountPath: "/usr/share/nginx/html"name: storagevolumes:- name: storagepersistentVolumeClaim:claimName: example-pvc

6. StorageClass 的应用场景

  1. 自动化存储管理:减少手动创建 PV 的复杂性,适用于云环境。

  2. 多种存储策略:支持不同的存储性能需求,如 SSD、高吞吐磁盘等。

  3. 多可用区支持:结合 WaitForFirstConsumer 模式,提高存储调度灵活性。

  4. 动态扩展存储:支持 PVC 扩容,提高存储弹性。

7. 总结

  • StorageClass 允许 Kubernetes 动态创建 PV,简化存储管理。

  • 适用于云存储、分布式存储和本地存储等多种场景。

  • 通过 reclaimPolicyvolumeBindingModeallowVolumeExpansion 提供灵活的存储策略。

  • 在 CI/CD、数据库存储、日志存储等场景下广泛应用。

二、在 Kubernetes 中使用 NFS 作为存储类(StorageClass)

1. 部署 NFS 服务器与客户端

在 Kubernetes 集群的某个节点上安装 NFS 服务器。(但是在每个节点都要安装NFS客户端)

安装 NFS 服务器(以 Ubuntu 为例)
sudo apt update && sudo apt install -y nfs-kernel-server
sudo mkdir -p /mnt/nfs-share
sudo chmod 777 /mnt/nfs-share
sudo echo "/mnt/nfs-share *(rw,sync,no_root_squash,no_subtree_check)" | sudo tee -a /etc/exports
sudo exportfs -rav
sudo systemctl restart nfs-kernel-server

安装 NFS 客户端

sudo apt update && sudo apt install -y nfs-common

2. 创建 NFS StorageClass

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs-storage
provisioner: nfs-provisioner
parameters:archiveOnDelete: "false"

3. 部署 NFS Provisioner(Dynamic Provisioning)

apiVersion: apps/v1
kind: Deployment
metadata:name: nfs-provisioner
spec:replicas: 1selector:matchLabels:app: nfs-provisionertemplate:metadata:labels:app: nfs-provisionerspec:containers:- name: nfs-provisionerimage: quay.io/external_storage/nfs-client-provisioner:latestvolumeMounts:- mountPath: /persistentvolumesname: nfs-volumeenv:- name: NFS_SERVERvalue: "<NFS服务器IP>"- name: NFS_PATHvalue: "/mnt/nfs-share"volumes:- name: nfs-volumenfs:server: "<NFS服务器IP>"path: "/mnt/nfs-share"

4. 创建 PersistentVolumeClaim (PVC)

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nfs-pvc
spec:accessModes:- ReadWriteManyresources:requests:storage: 5GistorageClassName: nfs-storage

5. 在 Pod 中挂载 PVC

apiVersion: v1
kind: Pod
metadata:name: nfs-pod
spec:containers:- name: app-containerimage: nginxvolumeMounts:- mountPath: "/usr/share/nginx/html"name: nfs-storagevolumes:- name: nfs-storagepersistentVolumeClaim:claimName: nfs-pvc

6. 验证 NFS 挂载是否成功

kubectl apply -f nfs-storageclass.yaml
kubectl apply -f nfs-provisioner.yaml
kubectl apply -f nfs-pvc.yaml
kubectl apply -f nfs-pod.yaml
kubectl get pods
kubectl exec -it nfs-pod -- df -h

如果成功,Pod 内 /usr/share/nginx/html 目录将会挂载到 NFS 服务器的 /mnt/nfs-share,多个 Pod 可以共享此存储。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++:allocator类(动态数组续)

1.为什么需要 allocator&#xff1f; 在 C 中&#xff0c;动态内存管理通常通过 new 和 delete 完成&#xff1a; int* p new int; // 分配内存 构造对象 delete p; // 析构对象 释放内存 但 new 和 delete 有两个问题&#xff1a; 耦合性&#xff1a;将内…

北斗导航 | 中国北斗卫星导航系统的发展历程——“三步走”战略:背景,信号频点,调制方式,短报文,等

中国北斗卫星导航系统的发展历程按照“三步走”战略逐步推进,从区域服务到全球覆盖,形成了北斗一号、北斗二号、北斗三号三代系统的迭代升级,展现了中国航天科技的自主创新与突破。以下是各阶段的核心内容与发展特点综述:一、北斗一号:中国卫星导航的奠基(1994-2003年) …

Headless Chrome 优化:减少内存占用与提速技巧

在当今数据驱动的时代&#xff0c;爬虫技术在各行各业扮演着重要角色。传统的爬虫方法往往因为界面渲染和资源消耗过高而无法满足大规模数据采集的需求。本文将深度剖析 Headless Chrome 的优化方案&#xff0c;重点探讨如何利用代理 IP、Cookie 和 User-Agent 设置实现内存占用…

英伟达GB300新宠:新型LPDDR5X SOCAMM内存

随着人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&#xff09;和高性能计算&#xff08;HPC&#xff09;应用的快速发展&#xff0c;对于高效能、大容量且低延迟内存的需求日益增长。NVIDIA在其GB系列GPU中引入了不同的内存模块设计&#xff0c;以满足这些严格…

静态网页应用开发环境搭建实战教程

1. 前言 静态网页开发是前端工程师的基础技能之一&#xff0c;无论是个人博客、企业官网还是简单的Web应用&#xff0c;都离不开HTML、CSS和JavaScript。搭建一个高效的开发环境&#xff0c;能够极大提升开发效率&#xff0c;减少重复工作&#xff0c;并优化调试体验。 本教程…

Python每日一题(9)

Python每日一题 2025.3.29 一、题目二、分析三、源代码四、deepseek答案五、源代码与ai分析 一、题目 question["""企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%,利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部…

游戏引擎学习第187天

看起来观众解决了上次的bug 昨天遇到了一个相对困难的bug&#xff0c;可以说它相当棘手。刚开始的时候&#xff0c;没有立刻想到什么合适的解决办法&#xff0c;所以今天得从头开始&#xff0c;逐步验证之前的假设&#xff0c;收集足够的信息&#xff0c;逐一排查可能的原因&a…

【入门初级篇】布局类组件的使用(1)

【入门初级篇】布局类组件的使用&#xff08;1&#xff09; 视频要点 &#xff08;1&#xff09;章节大纲介绍 &#xff08;2&#xff09;布局类组件类型介绍&#xff1a;行布局、列布局、标题 &#xff08;3&#xff09;实操演示&#xff1a;列表统计查询布局模型 点击访问my…

对内核fork进程中写时复制的理解记录

前言 文章写于学习Redis时对aof后台重写中写时复制的疑问 一、感到不理解的歧义 在部分技术文档中&#xff08;以小林的文章为例&#xff09;&#xff0c;对写时复制后的内存权限存在如歧义&#xff1a; ! 二、正确技术表述 根据Linux内核实现&#xff08;5.15版本&#x…

Ditto-Talkinghead:阿里巴巴数字人技术新突破 [特殊字符]️

Ditto-Talkinghead&#xff1a;阿里巴巴数字人技术新突破 &#x1f5e3;️ 阿里巴巴推出了一项新的数字人技术&#xff0c;名为 Ditto-Talkinghead。这项技术主要用于生成由音频驱动的说话头&#xff0c;也就是我们常说的“数字人”。不过&#xff0c;现有的基于扩散模型的同类…

.NET开发基础知识1-10

1. 依赖注入&#xff08;Dependency Injection&#xff09; 技术知识&#xff1a;依赖注入是一种设计模式&#xff0c;它允许将对象的依赖关系从对象本身中分离出来&#xff0c;通过构造函数、属性或方法参数等方式注入到对象中。这样可以提高代码的可测试性、可维护性和可扩展…

每日一题 MySQL基础知识----(三)

数据库常用基础知识&#xff1a;代码讲解和实验 1.创建数据库student 02&#xff0c;创建一个名为student02的数据库 CREATE DATABASE student02; 2.在student02中创建一张 students表&#xff0c;并且具有学生的编号id&#xff0c;姓名name&#xff0c;年龄age&#xff0c;生…

MySQL多表查询实验

1.数据准备 -- 以下语句用于创建 students 表&#xff0c;该表存储学生的基本信息 -- 定义表名为 students CREATE TABLE students (-- 定义学生的唯一标识符&#xff0c;类型为整数&#xff0c;作为主键&#xff0c;且支持自动递增student_id INT PRIMARY KEY AUTO_INCREMENT…

windows第二十章 单文档应用程序

文章目录 单文档定义新建一个单文档应用程序单文档应用程序组成&#xff1a;APP应用程序类框架类&#xff08;窗口类&#xff09;视图类&#xff08;窗口类&#xff0c;属于框架的子窗口&#xff09;文档类&#xff08;对数据进行保存读取操作&#xff09; 直接用向导创建单文档…

C++ 初阶总复习 (16~30)

C 初阶总复习 &#xff08;16~30&#xff09; 目的16. 2009. volatile关键字的作用17. 2010.什么是多态 简单介绍下C的多态18. 2011. 什么是虚函数 介绍下C中虚函数的原理19. 2012 构造函数可以是虚函数嘛20. 2013.析构函数一定要是虚函数嘛&#xff1f;21. 2015. 什么是C中的虚…

第一天 Linux驱动程序简介

目录 一、驱动的作用 二、裸机驱动 VS linux驱动 1、裸机驱动 2、linux驱动 三、linux驱动位于哪里&#xff1f; 四、应用编程 VS 内核编程 1、共同点 2、不同点 五、linux驱动分类 1、字符设备 2、块设备 3、网络设备 六、Linux驱动学习难点与误区 1、学习难点 …

PaddleX产线集成功能的使用整理

一、环境搭建 1.1 安装paddle-gpu 需要根据安装机器的cuda的版本&#xff0c;选择合适的版本进行安装 #安装paddle-gpu 官网链接 https://www.paddlepaddle.org.cn/install/quick?docurl/documentation/docs/zh/install/pip/linux-pip.html python -m pip install paddle…

docker-compese 启动mysql8.0.36与phpmyadmin,并使用web连接数据库

1、找一个文件夹&#xff0c;比如 E:\zqy\file\mysql&#xff0c;cd到这个目录下创建文件docker-compose.yml 2、将下面的代码块复制到docker-compose.yml文件中 version: 3.3 services:mysql:image: mysql:8.0.36container_name: mysqlrestart: alwaysports:- 3306:3306netw…

解决 Gradle 构建错误:Could not get unknown property ‘withoutJclOverSlf4J’

解决 Gradle 构建错误&#xff1a;Could not get unknown property ‘withoutJclOverSlf4J’ 在构建 Spring 源码或其他基于 Gradle 的项目时&#xff0c;可能会遇到如下错误&#xff1a; Could not get unknown property withoutJclOverSlf4J for object of type org.gradle…

mcp 接freecad画齿轮

from mcp.server.fastmcp import FastMCP import freecad.gears.commands import os from freecad import app from freecad import part mcp FastMCP("Demo")mcp.tool() def create_gear(num_teeth20,height10,double_helix True):"""创建一个渐开线…