1. 首页 > Kubernetes教程 > 正文

Kubernetes教程FG061-Kubernetes存储卷(PersistentVolume)配置与实战

内容简介

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

目录大纲

Part01-基础概念与理论知识

1.1 存储卷概述

存储卷(Volume)是Kubernetes中用于持久化数据的机制,它可以:

  • 持久化数据:即使Pod被删除,数据仍然保留
  • 共享数据:多个Pod可以共享同一个存储卷
  • 支持多种存储后端:如NFS、iSCSI、云存储等

1.2 PersistentVolume与PersistentVolumeClaim

PersistentVolume(PV)和PersistentVolumeClaim(PVC)是Kubernetes中用于管理存储的两个核心概念:

  • PersistentVolume(PV)
    • 由集群管理员创建的存储资源
    • 独立于Pod的生命周期
    • 可以被多个PVC申请使用
  • PersistentVolumeClaim(PVC)
    • 由用户创建的存储请求
    • 绑定到一个PV
    • Pod通过PVC使用存储

Part02-生产环境规划与建议

2.1 存储卷类型选择

  • NFS
    • 优点:易于配置,支持共享
    • 缺点:性能相对较低
    • 适用场景:开发测试环境,低I/O要求的应用
  • iSCSI
    • 优点:性能较好,支持块存储
    • 缺点:配置复杂
    • 适用场景:数据库等对I/O要求较高的应用
  • 云存储
    • 优点:管理简单,高可用
    • 缺点:成本较高
    • 适用场景:云环境中的应用
  • 本地存储
      ,风哥提示:。

    • 优点:性能最佳
    • 缺点:不支持Pod迁移
    • 适用场景:对性能要求极高的应用

2.2 存储容量规划

  • 数据量估算:根据应用的数据量和增长趋势估算存储容量
  • 冗余考虑:考虑数据备份和冗余需求
  • 性能需求:根据应用的I/O要求选择合适的存储类型
  • 扩展性:考虑未来存储容量的扩展需求

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

3.1 PersistentVolume配置

配置NFS类型的PersistentVolume,风哥提示:。

创建NFS服务器

# 安装NFS服务器
[root@fgedu-nfs ~]# yum install -y nfs-utils

# 创建共享目录
[root@fgedu-nfs ~]# mkdir -p /Kubernetes/nfs/data

# 配置NFS共享
[root@fgedu-nfs ~]# cat > /etc/exports << EOF /Kubernetes/nfs/data 192.168.1.0/24(rw,sync,no_root_squash) EOF
# 启动NFS服务
[root@fgedu-nfs ~]# systemctl start nfs-server
[root@fgedu-nfs ~]# systemctl enable nfs-server

创建PersistentVolume

# 创建PV配置文件
[root@fgedu-master ~]# cat > pv-nfs.yaml << EOF apiVersion: v1 kind: PersistentVolume metadata: name: pv-nfs labels: type: nfs spec: capacity: storage: 10Gi accessModes: - ReadWriteMany nfs: server: 192.168.1.100 path: /Kubernetes/nfs/data EOF
# 应用PV配置
[root@fgedu-master ~]# kubectl apply -f pv-nfs.yaml

persistentvolume/pv-nfs created

查看PV状态

# 查看PV状态
[root@fgedu-master ~]# kubectl get pv

,学习交流加群风哥微信: itpux-com。
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv-nfs 10Gi RWX Retain Available 1m

3.2 PersistentVolumeClaim配置

创建PersistentVolumeClaim。

创建PVC配置文件

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

persistentvolumeclaim/pvc-nfs created

查看PVC状态

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

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-nfs Bound pv-nfs 10Gi RWX 1m

3.3 存储卷使用

在Pod中使用PVC:

创建使用PVC的Pod

# 创建Pod配置文件
[root@fgedu-master ~]# cat > pod-with-pvc.yaml << EOF apiVersion: v1 kind: Pod metadata: name: nginx-with-pvc labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 volumeMounts: - name: nginx-data mountPath: /usr/share/nginx/html volumes: - name: nginx-data persistentVolumeClaim: claimName: pvc-nfs EOF
# 应用Pod配置
[root@fgedu-master ~]# kubectl apply -f pod-with-pvc.yaml

,学习交流加群风哥QQ113257174。

pod/nginx-with-pvc created

验证存储卷挂载

# 查看Pod状态
[root@fgedu-master ~]# kubectl get pod nginx-with-pvc

NAME READY STATUS RESTARTS AGE
nginx-with-pvc 1/1 Running 0 1m

# 验证存储卷挂载
[root@fgedu-master ~]# kubectl exec -it nginx-with-pvc — df -h

Filesystem Size Used Avail Use% Mounted on
overlay 50G 10G 40G 20% /
tmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
192.168.1.100:/Kubernetes/nfs/data 50G 5G 45G 10% /usr/share/nginx/html
tmpfs 799M 0 799M 0% /run/secrets/kubernetes.io/serviceaccount
tmpfs 3.9G 0 3.9G 0% /proc/acpi
tmpfs 3.9G 0 3.9G 0% /sys/firmware

Part04-生产案例与实战讲解

4.1 企业级存储方案部署

某企业需要部署一个企业级的存储方案,用于支持多个应用的持久化存储需求。。

案例背景

  • 应用数量:10个微服务应用
  • 存储需求:
    • 数据库:需要高性能块存储
    • 文件服务:需要共享存储
    • 日志存储:需要大容量存储
  • 性能要求:
    • 数据库:IOPS > 10000
    • 文件服务:吞吐量 > 1GB/s

部署方案

# 1. 部署iSCSI存储服务器
# 用于数据库等需要高性能块存储的应用
# 安装iSCSI服务
yum install -y targetcli
# 配置iSCSI存储
targetcli
/> cd /backstores/block
/> create db-store /dev/sdb
/> cd /iscsi
/> create iqn.2023-07.com.fgedu:db
/> cd iqn.2023-07.com.fgedu:db/tpg1/luns
/> create /backstores/block/db-store
/> cd ../acls
/> create iqn.2023-07.com.fgedu:client
/> exit
# 启动iSCSI服务
systemctl start target
systemctl enable target
# 2. 部署NFS存储服务器
# 用于文件服务等需要共享存储的应用
# 安装NFS服务
yum install -y nfs-utils
# 创建共享目录
mkdir -p /Kubernetes/nfs/files,更多视频教程www.fgedu.net.cn。
mkdir -p /Kubernetes/nfs/logs
# 配置NFS共享
cat > /etc/exports << EOF /Kubernetes/nfs/files 192.168.1.0/24(rw,sync,no_root_squash) /Kubernetes/nfs/logs 192.168.1.0/24(rw,sync,no_root_squash) EOF # 启动NFS服务 systemctl start nfs-server systemctl enable nfs-server # 3. 创建PersistentVolume # 创建iSCSI PV cat > pv-iscsi.yaml << EOF apiVersion: v1 kind: PersistentVolume metadata: name: pv-iscsi-db labels: type: iscsi spec: capacity: storage: 50Gi accessModes: - ReadWriteOnce iscsi: targetPortal: 192.168.1.101:3260 iqn: iqn.2023-07.com.fgedu:db lun: 0 fsType: ext4 readOnly: false EOF # 创建NFS PV cat > pv-nfs-files.yaml << EOF apiVersion: v1 kind: PersistentVolume metadata: name: pv-nfs-files labels: type: nfs purpose: files spec: capacity: storage: 100Gi accessModes: - ReadWriteMany nfs: server: 192.168.1.100 path: /Kubernetes/nfs/files EOF # 应用PV配置 kubectl apply -f pv-iscsi.yaml kubectl apply -f pv-nfs-files.yaml # 4. 创建PersistentVolumeClaim # 创建数据库PVC cat > pvc-iscsi-db.yaml << EOF apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-iscsi-db namespace: fgedu-production spec: accessModes: - ReadWriteOnce resources: requests: storage: 50Gi selector: matchLabels: type: iscsi EOF # 创建文件服务PVC cat > pvc-nfs-files.yaml << EOF apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-nfs-files namespace: fgedu-production spec: accessModes: - ReadWriteMany resources: requests:,更多学习教程公众号风哥教程itpux_com。 storage: 50Gi selector: matchLabels: type: nfs purpose: files EOF # 应用PVC配置 kubectl apply -f pvc-iscsi-db.yaml kubectl apply -f pvc-nfs-files.yaml

4.2 数据库存储配置实战

某企业需要在Kubernetes中部署MySQL数据库,需要配置持久化存储。。

案例背景

  • 应用:MySQL 8.0
  • 存储需求:100GB,高性能
  • 高可用:需要主从复制

配置方案

# 创建存储类
[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:db lun: 0 fsType: ext4 readOnly: "false" EOF
# 应用存储类配置
[root@fgedu-master ~]# kubectl apply -f storageclass-iscsi.yaml

# 创建MySQL主节点PVC
[root@fgedu-master ~]# cat > pvc-mysql-master.yaml << EOF apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-mysql-master namespace: fgedu-production spec: accessModes: - ReadWriteOnce resources: requests: storage: 100Gi storageClassName: iscsi-storage EOF
# 应用PVC配置
[root@fgedu-master ~]# kubectl apply -f pvc-mysql-master.yaml

# 创建MySQL主节点Deployment
[root@fgedu-master ~]# cat > deployment-mysql-master.yaml << EOF apiVersion: apps/v1 kind: Deployment metadata: name: mysql-master namespace: fgedu-production spec: replicas: 1 selector: matchLabels: app: mysql role: master。 template:,from K8S+DB视频:www.itpux.com。 metadata: labels: app: mysql role: master spec: containers: - name: mysql image: mysql:8.0 env: - name: MYSQL_ROOT_PASSWORD value: "fgedu123" - name: MYSQL_DATABASE value: "fgedudb" - name: MYSQL_USER value: "fgedu" - name: MYSQL_PASSWORD value: "fgedu123" ports: - containerPort: 3306 volumeMounts: - name: mysql-data mountPath: /var/lib/mysql volumes: - name: mysql-data persistentVolumeClaim: claimName: pvc-mysql-master EOF
# 应用Deployment配置
[root@fgedu-master ~]# kubectl apply -f deployment-mysql-master.yaml

Part05-风哥经验总结与分享

5.1 存储卷配置最佳实践

  • 选择合适的存储类型:根据应用的性能要求和访问模式选择合适的存储类型
  • 合理设置存储容量:根据应用的数据量和增长趋势设置合理的存储容量
  • 使用StorageClass:使用StorageClass实现存储的动态 provisioning
  • 设置合适的访问模式
    • ReadWriteOnce(RWO):单个节点读写
    • ReadOnlyMany(ROX):多个节点只读
    • ReadWriteMany(RWX):多个节点读写
  • 配置存储备份:定期备份存储中的数据
  • 监控存储使用情况:监控存储的使用情况,及时扩容
  • 使用标签和注解:使用标签和注解管理存储资源

5.2 常见问题与解决方案

问题 原因 解决方案
PV和PVC绑定失败 存储配置错误 检查存储服务器配置和网络连接
存储卷挂载失败 权限问题或文件系统错误 检查存储权限和文件系统状态
存储性能问题 存储类型选择不当 选择更适合的存储类型
存储容量不足 初始容量规划不足 及时扩容或清理数据
数据丢失 未配置备份策略 配置定期备份策略

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

联系我们

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

微信号:itpux-com

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