1. 首页 > Kubernetes教程 > 正文

Kubernetes教程FG062-Kubernetes存储类(StorageClass)配置与实战

内容简介

本篇文章主要介绍Kubernetes中存储类(StorageClass)的配置与使用方法。风哥教程参考Kubernetes官方文档存储相关内容,结合生产环境实际操作场景,详细讲解StorageClass的配置方法、动态存储供应以及最佳实践。

目录大纲

Part01-基础概念与理论知识

1.1 存储类概述

存储类(StorageClass)是Kubernetes中用于定义存储类型的资源,它可以:

  • 定义存储类型:指定存储的类型、性能和特性
  • 动态创建存储:根据PVC的需求自动创建PV
  • 管理存储生命周期:控制存储的创建、使用和删除

1.2 动态存储供应

动态存储供应是指根据PVC的需求自动创建PV的过程,它的优点包括,风哥提示:。

  • 自动化:无需手动创建PV
  • 灵活性:根据实际需求创建存储
  • 标准化:通过StorageClass统一管理存储配置

Part02-生产环境规划与建议

2.1 存储类设计原则

,风哥提示:。
  • 分层设计:根据性能和成本创建多个存储类
  • 标准化命名:使用清晰、一致的命名规则
  • 默认存储类:设置一个默认存储类,方便用户使用
  • 参数优化:根据存储后端的特性优化参数配置

2.2 存储类类型选择

  • 高性能存储类
    • 适用场景:数据库、缓存等对性能要求高的应用
    • 存储后端:SSD、NVMe等
    • 特点:高IOPS、低延迟
  • 标准存储类
    • 适用场景:一般应用、中间件等
    • 存储后端:SAS、混合存储等
    • 特点:平衡性能和成本
  • 大容量存储类
    • 适用场景:日志、备份等大容量存储需求
    • 存储后端:SATA、对象存储等
    • 特点:大容量、低成本

Part03-生产环境项目实施方案

3.1 StorageClass配置

配置基于NFS的StorageClass:

安装NFS Provisioner

# 添加Helm仓库
[root@fgedu-master ~]# helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

# 部署NFS Provisioner
[root@fgedu-master ~]# helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
–namespace monitoring \
–set nfs.server=192.168.1.100 \
–set nfs.path=/Kubernetes/nfs/data \
–set storageClass.name=nfs-storage \
–set storageClass.defaultClass=true

NAME: nfs-subdir-external-provisioner
LAST DEPLOYED: 2023-07-01 12:00:00.000000000 +0000 UTC
NAMESPACE: monitoring
STATUS: deployed
REVISION: 1

查看StorageClass

# 查看StorageClass,学习交流加群风哥微信: itpux-com。
[root@fgedu-master ~]# kubectl get storageclass

NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGEnfs-storage cluster.local/nfs-subdir-external-provisioner Delete Immediate true 1m

3.2 动态存储供应配置

配置基于iSCSI的StorageClass。

创建iSCSI StorageClass

# 创建iSCSI StorageClass配置文件
[root@fgedu-master ~]# cat > storageclass-iscsi.yaml << EOF apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: iscsi-storage provisioner: kubernetes.io/iscsi parameters: targetPortal: 192.168.1.101:3260 iqn: iqn.2023-07.com.fgedu:iscsi lun: 0 fsType: ext4 readOnly: "false" reclaimPolicy: Delete allowVolumeExpansion: true volumeBindingMode: Immediate EOF
# 应用StorageClass配置
[root@fgedu-master ~]# kubectl apply -f storageclass-iscsi.yaml

storageclass.storage.k8s.io/iscsi-storage created

3.3 StorageClass使用

使用StorageClass创建PVC。

创建使用默认StorageClass的PVC

# 创建PVC配置文件
[root@fgedu-master ~]# cat > pvc-default.yaml << EOF apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-default namespace: default spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi EOF
# 应用PVC配置
[root@fgedu-master ~]# kubectl apply -f pvc-default.yaml

,学习交流加群风哥QQ113257174。
persistentvolumeclaim/pvc-default created

创建使用指定StorageClass的PVC

# 创建PVC配置文件[root@fgedu-master ~]# cat > pvc-iscsi.yaml << EOF apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-iscsi namespace: default spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: iscsi-storage EOF
# 应用PVC配置
[root@fgedu-master ~]# kubectl apply -f pvc-iscsi.yaml

persistentvolumeclaim/pvc-iscsi created

查看PVC状态

# 查看PVC状态
[root@fgedu-master ~]# kubectl get pvc

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-default Bound pvc-12345678-1234-1234-1234-1234567890ab 5Gi RWX nfs-storage 1m
pvc-iscsi Bound pvc-87654321-4321-4321-4321-ba0987654321 10Gi RWO iscsi-storage 1m

Part04-生产案例与实战讲解

4.1 企业级存储类部署

某企业需要部署企业级的存储类方案,支持多种存储类型和应用场景。

案例背景

  • 应用场景:
    • 数据库:需要高性能存储
    • 文件服务:需要共享存储
    • 日志存储:需要大容量存储
  • 存储后端:
    • 高性能存储:NVMe SSD
    • 标准存储:SAS HDD
    • 大容量存储:SATA HDD

部署方案

,更多视频教程www.fgedu.net.cn。

# 1. 部署不同类型的存储类
# 高性能存储类
cat > storageclass-high-performance.yaml << EOF apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: high-performance provisioner: kubernetes.io/iscsi parameters: targetPortal: 192.168.1.101:3260 iqn: iqn.2023-07.com.fgedu:high-performance lun: 0 fsType: ext4 readOnly: "false" reclaimPolicy: Delete allowVolumeExpansion: true volumeBindingMode: Immediate EOF # 标准存储类 cat > storageclass-standard.yaml << EOF apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: standard provisioner: kubernetes.io/iscsi parameters: targetPortal: 192.168.1.102:3260 iqn: iqn.2023-07.com.fgedu:standard lun: 0 fsType: ext4 readOnly: "false" reclaimPolicy: Delete allowVolumeExpansion: true volumeBindingMode: Immediate EOF # 大容量存储类 cat > storageclass-bulk.yaml << EOF apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: bulk provisioner: cluster.local/nfs-subdir-external-provisioner parameters: pathPattern: {.PVC.namespace}/{.PVC.name} onDelete: delete reclaimPolicy: Delete allowVolumeExpansion: true volumeBindingMode: Immediate EOF # 应用存储类配置 kubectl apply -f storageclass-high-performance.yaml kubectl apply -f storageclass-standard.yaml kubectl apply -f storageclass-bulk.yaml # 2. 设置默认存储类 kubectl patch storageclass standard -p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' # 3. 为不同应用创建PVC # 数据库PVC cat > pvc-database.yaml << EOF apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-database namespace: fgedu-production spec: accessModes: - ReadWriteOnce,更多学习教程公众号风哥教程itpux_com。 resources: requests: storage: 100Gi storageClassName: high-performance EOF # 文件服务PVC cat > pvc-file-service.yaml << EOF apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-file-service namespace: fgedu-production spec: accessModes: - ReadWriteMany resources: requests: storage: 50Gi storageClassName: standard EOF # 日志存储PVC cat > pvc-logs.yaml << EOF apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-logs namespace: fgedu-production spec: accessModes: - ReadWriteMany resources: requests: storage: 200Gi storageClassName: bulk EOF # 应用PVC配置 kubectl apply -f pvc-database.yaml kubectl apply -f pvc-file-service.yaml kubectl apply -f pvc-logs.yaml

4.2 多存储类型管理实战

某企业需要在Kubernetes集群中管理多种存储类型,满足不同应用的需求。。

案例背景

  • 集群规模:50个节点
  • 应用数量:20个微服务
  • 存储需求:
    • 10个应用需要高性能存储
    • 5个应用需要标准存储
    • 5个应用需要大容量存储

管理方案

# 1. 监控存储使用情况
[root@fgedu-master ~]# kubectl get pvc –all-namespaces

NAMESPACE NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
fgedu-production pvc-database Bound pvc-12345678-1234-1234-1234-1234567890ab 100Gi RWO high-performance 1d。
fgedu-production pvc-file-service Bound pvc-87654321-4321-4321-4321-ba0987654321 50Gi RWX standard 1d,from K8S+DB视频:www.itpux.com。
fgedu-production pvc-logs Bound pvc-abcdef12-3456-7890-abcd-ef1234567890 200Gi RWX bulk 1d

# 2. 扩展现有的PVC
[root@fgedu-master ~]# kubectl patch pvc pvc-database -n fgedu-production -p ‘{“spec”:{“resources”:{“requests”:{“storage”:”200Gi”}}}}’

persistentvolumeclaim/pvc-database patched

# 3. 清理不需要的PVC
[root@fgedu-master ~]# kubectl delete pvc pvc-old -n fgedu-production

Part05-风哥经验总结与分享

5.1 存储类配置最佳实践

  • 合理规划存储类:根据应用需求创建不同级别的存储类
  • 设置默认存储类:方便用户使用,减少配置复杂度
  • 启用卷扩展:设置allowVolumeExpansion为true,支持PVC扩容
  • 选择合适的绑定模式
    • Immediate:立即绑定
    • WaitForFirstConsumer:等待第一个Pod调度后绑定
  • 配置合适的回收策略
    • Delete:删除PVC时自动删除PV
    • Retain:保留PV,需要手动清理
    • Recycle:回收PV(已废弃)
  • 监控存储使用:定期监控存储使用情况,及时扩容
  • 备份存储数据:无论使用哪种存储类,都应定期备份数据

5.2 常见问题与解决方案

问题 原因 解决方案
StorageClass创建失败 配置错误 检查StorageClass配置
PVC创建后一直处于Pending状态 存储后端不可用 检查存储服务器状态
PVC扩容失败 存储类不支持扩容 设置allowVolumeExpansion为true
存储性能问题 存储类选择不当 选择更适合的存储类
存储容量不足 初始容量规划不足 及时扩容或清理数据

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息