k8s 使用外部存储简介

news/2025/3/10 20:38:15/文章来源:https://www.cnblogs.com/pgyLang/p/18763592

k8s 使用外部存储介绍

在 Kubernetes (k8s) 中使用外部存储可以提高数据的持久性可扩展性高可用性。以下是常见的外部存储解决方案及其使用方式:


1. 常见的 Kubernetes 外部存储

存储类型 示例 适用场景
NFS (Network File System) NFS 服务器 共享存储,适用于多个 Pod 访问同一数据
Ceph CephFS, RBD, Object Storage 分布式存储,适用于高可用集群
GlusterFS GlusterFS 分布式文件存储,适用于大规模存储
iSCSI SAN 设备 低延迟、高性能存储
AWS EBS Amazon Elastic Block Store AWS 云上的块存储
Google Persistent Disk (GCE PD) GCP 云存储 Google Cloud 持久磁盘
Azure Disk Microsoft Azure Managed Disks Azure 云存储
CSI (Container Storage Interface) 适用于多种存储后端 推荐方式,支持动态存储

2. 使用 NFS 作为外部存储

适用场景: 适用于共享存储,如多个 Pod 需要访问相同数据的情况。

步骤 1:在服务器上搭建 NFS

  1. 安装 NFS 服务(在存储服务器上)

    yum install -y nfs-utils
    systemctl enable --now nfs-server
    
  2. 创建共享目录

    mkdir -p /data/nfs
    chmod -R 777 /data/nfs
    echo "/data/nfs *(rw,sync,no_root_squash)" >> /etc/exports
    
  3. 重启 NFS 服务

    exportfs -r
    systemctl restart nfs-server
    
  4. 验证 NFS 是否可用

    showmount -e <NFS服务器IP>
    

步骤 2:在 Kubernetes 中使用 NFS 存储

  1. 创建 PersistentVolume (PV)

    apiVersion: v1
    kind: PersistentVolume
    metadata:name: nfs-pv
    spec:capacity:storage: 10GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: Retainnfs:path: /data/nfsserver: <NFS服务器IP>
    
  2. 创建 PersistentVolumeClaim (PVC)

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:name: nfs-pvc
    spec:accessModes:- ReadWriteManyresources:requests:storage: 5GivolumeName: nfs-pv
    
  3. 在 Pod 中使用 NFS

    apiVersion: v1
    kind: Pod
    metadata:name: nfs-test
    spec:containers:- name: test-containerimage: busyboxcommand: [ "sleep", "3600" ]volumeMounts:- mountPath: "/mnt/data"name: nfs-storagevolumes:- name: nfs-storagepersistentVolumeClaim:claimName: nfs-pvc
    
  4. 验证

    kubectl apply -f nfs-pv.yaml
    kubectl apply -f nfs-pvc.yaml
    kubectl apply -f nfs-pod.yaml
    

3. 使用 Ceph 作为外部存储

适用场景: 适用于高可用存储,支持CephFS、块存储(RBD)和对象存储

步骤 1:安装 Ceph

可以使用 rook-ceph 作为 Ceph Operator:

kubectl create -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/common.yaml
kubectl create -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/operator.yaml

步骤 2:创建 Ceph PV

apiVersion: v1
kind: PersistentVolume
metadata:name: ceph-pv
spec:capacity:storage: 20GiaccessModes:- ReadWriteOncecephfs:monitors:- <Ceph-Monitor-IP>:6789user: adminsecretRef:name: ceph-secretreadOnly: false

4. 使用 AWS EBS 作为外部存储

适用场景: Kubernetes 部署在 AWS 云 时,推荐使用 EBS 作为块存储

步骤 1:创建 StorageClass

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: aws-ebs
provisioner: kubernetes.io/aws-ebs
parameters:type: gp2

步骤 2:创建 PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: aws-ebs-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10GistorageClassName: aws-ebs

5. 使用 CSI (Container Storage Interface)

CSI 是 Kubernetes 推荐的存储方式,支持动态存储

步骤 1:安装 CSI

不同云服务提供不同的 CSI:

  • AWS: aws-ebs-csi-driver
  • GCP: gce-pd-csi-driver
  • Azure: azure-disk-csi-driver

安装 AWS CSI:

kubectl apply -k "github.com/kubernetes-sigs/aws-ebs-csi-driver/deploy/kubernetes/overlays/stable/ecr"

步骤 2:创建 StorageClass

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: csi-ebs
provisioner: ebs.csi.aws.com
parameters:type: gp3fsType: ext4

步骤 3:创建 PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: csi-ebs-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 20GistorageClassName: csi-ebs

6. 选择合适的存储

需求 推荐存储
共享存储(多个 Pod 访问同一目录) NFS、CephFS
高可用、分布式存储 Ceph、GlusterFS
高性能、低延迟 iSCSI、AWS EBS
云存储(AWS/GCP/Azure) EBS、GCE PD、Azure Disk
Kubernetes 官方推荐 CSI

7. 总结

  1. NFS 适合共享存储,适用于多个 Pod 访问相同数据。
  2. Ceph 适用于分布式存储,支持文件、块、对象存储。
  3. AWS/GCP/Azure 适用于云环境,推荐使用 CSI 进行动态存储管理。
  4. CSI 是 Kubernetes 官方推荐方式,支持多种存储后端。

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

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

相关文章

Vue3--ref - reactive

reactive可以深层次对比ref定义对象类型是借用reactive总结

征程 6 工具链 BEVPoolV2 算子使用教程 【2】-BEVPoolV2 QAT 链路实现示例

1.引言 在上一篇帖子中,我们已详尽阐述了 BEVPoolV2 相较于 BEVPoolV1 的改进之处,并对 BEVPoolV2 实现的代码进行了解析。想必大家对 BEVPoolV2 算子的功能及实现已有了一定程度的理解,此篇帖子将展示 征程 6 工具链 BEVPoolV2 单算子 QAT 链路的实现范例,以进一步增进用户…

包装类--java进阶day05

1.包装类比如要让s+100,输出223.如果直接相加,结果是123100,这时就可以将s转换为包装类,然后再用包装类进行相加 2.包装类类型3.手动拆/装箱 我们这里只介绍Integer,其他包装类都是一个模板 第一个方式已经过时,不建议使用.4.自动拆/装箱.5.包装类常用方法 可以直接类名调…

掌握这些 UI 交互设计原则,提升产品易用性

在当今数字化时代,用户对于产品的体验要求越来越高,UI 交互设计成为决定产品成败的关键因素之一。一个易用的产品能够让用户轻松、高效地完成各种操作,而实现这一目标的核心在于遵循一系列科学合理的 UI 交互设计原则。本文将详细阐述简洁性、一致性、反馈、可访问性以及用户…

C++ this

今天开始进入C++学习了,之前的这周末复习下 侧重与底层原理 当把函数放到结构体里面,编译器会帮我们传递一个参数:结构体的地址this指针本质就是对象地址

【由技及道】镜像星门开启:Harbor镜像推送的量子跃迁艺术【人工智障AI2077的开发日志010】

当构建产物需要穿越多维宇宙时,当Docker镜像要同时存在于72个平行世界——这就是镜像推送的量子艺术。本文记录一个未来AI如何通过Harbor建立镜像星门,让每个构建产物都能瞬间抵达所有维度。![量子镜像跃迁示意图]( 摘要:当构建产物需要穿越多维宇宙时,当Docker镜像要同时存…

构造矩形

构造矩形 题目描述 现有 \(n\) 条长度为 \(m\) 的线段,垂直于 x 轴分布,且互不重合。第 \(i\) 条线段的两个端点均为整数点,分别为 \((a_i, 0)\) 和 \((a_i, m)\)。每条线段上有 \(m+1\) 个整数点,纵坐标分别为 \(0, 1, 2, …, m\)。 现在,你需要选择两条不同的线段,并在…

Llama 4 即将发布,引入语音能力;AI 智能运动眼镜 BleeqUp:实时对讲、AI 自动成片等功能丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、「有态度的 观点 」、「有看点的 活动 」,但内容仅代表编辑…

BigDecimal类--java进阶day05

1.BigDecimal出现的原因2.BigDecimal的创建不推荐第一种形式,会有误差第二种方式创建对象第三种方式调用方法2.BigDecimal常用方法除法的特殊事项 如果有除不尽的情况,常规的除法会出现问题divide的另一种方法 divide还有一个重载方法,可以解决除不尽的问题舍入模式中,进一…

3.10 学习记录

实现了员工页面的前端代码实现点击查看代码 <script setup> import { ref, onMounted } from vue import axios from axiosconst searchEmp = ref({name: ,gender: ,job: , })onMounted(() => {search(); })const search = async () => {const url = `https://web-…

transformer 中的掩码类型

知识是我们已知的也是我们未知的基于已有的知识之上我们去发现未知的由此,知识得到扩充我们获得的知识越多未知的知识就会更多因而,知识扩充永无止境

如何设计、维护和推广 API:专业人士的实用指南

API 在今天的数字化环境中扮演着至关重要的角色,它们作为系统和应用程序之间的连接纽带。对于公司而言,打造用户喜爱的 API、有效地维护它们并成功地在内部和外部推广,不仅能提高数字价值,还能带来巨大的业务收益。 API 设计是创建一个标准化、易于理解且稳定的应用程序接口…