k8s 使用外部存储简介
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
-
安装 NFS 服务(在存储服务器上)
yum install -y nfs-utils systemctl enable --now nfs-server -
创建共享目录
mkdir -p /data/nfs chmod -R 777 /data/nfs echo "/data/nfs *(rw,sync,no_root_squash)" >> /etc/exports -
重启 NFS 服务
exportfs -r systemctl restart nfs-server -
验证 NFS 是否可用
showmount -e <NFS服务器IP>
步骤 2:在 Kubernetes 中使用 NFS 存储
-
创建 PersistentVolume (PV)
apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain nfs: path: /data/nfs server: <NFS服务器IP> -
创建 PersistentVolumeClaim (PVC)
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi volumeName: nfs-pv -
在 Pod 中使用 NFS
apiVersion: v1 kind: Pod metadata: name: nfs-test spec: containers: - name: test-container image: busybox command: [ "sleep", "3600" ] volumeMounts: - mountPath: "/mnt/data" name: nfs-storage volumes: - name: nfs-storage persistentVolumeClaim: claimName: nfs-pvc -
验证
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: 20Gi
accessModes:
- ReadWriteOnce
cephfs:
monitors:
- <Ceph-Monitor-IP>:6789
user: admin
secretRef:
name: ceph-secret
readOnly: 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:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: 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: gp3
fsType: ext4
步骤 3:创建 PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-ebs-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: csi-ebs
6. 选择合适的存储
| 需求 | 推荐存储 |
|---|---|
| 共享存储(多个 Pod 访问同一目录) | NFS、CephFS |
| 高可用、分布式存储 | Ceph、GlusterFS |
| 高性能、低延迟 | iSCSI、AWS EBS |
| 云存储(AWS/GCP/Azure) | EBS、GCE PD、Azure Disk |
| Kubernetes 官方推荐 | CSI |
7. 总结
- NFS 适合共享存储,适用于多个 Pod 访问相同数据。
- Ceph 适用于分布式存储,支持文件、块、对象存储。
- AWS/GCP/Azure 适用于云环境,推荐使用 CSI 进行动态存储管理。
- CSI 是 Kubernetes 官方推荐方式,支持多种存储后端。

浙公网安备 33010602011771号