Kubernetes与Ubuntu存储集成方法
HostPath存储将数据保存在Ubuntu节点的本地文件系统中,配置步骤简单,但无法跨节点共享,不推荐生产环境使用。
/mnt/data)。apiVersion: v1
kind: PersistentVolume
metadata:
name: ubuntu-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
persistentVolumeReclaimPolicy: Retain
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ubuntu-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: hostpath
volumeMounts将PVC挂载到容器内的指定路径(如/usr/share/nginx/html)。NFS通过网络共享存储,支持多Pod同时读写,适合需要共享数据的场景(如WordPress、Jenkins)。
nfs-kernel-server,配置共享目录(如/path/to/shared/folder),并重启服务。sudo apt update
sudo apt install nfs-kernel-server
echo "/path/to/shared/folder *(rw,sync,no_subtree_check)" | sudo tee -a /etc/exports
sudo systemctl restart nfs-kernel-server
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
nfs:
server: <ubuntu-nfs-server-ip>
path: "/path/to/shared/folder"
storageClassName关联PV。apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
/usr/share/nginx/html)。apiVersion: v1
kind: Pod
metadata:
name: nfs-pod
spec:
containers:
- name: nfs-container
image: nginx
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: nfs-volume
volumes:
- name: nfs-volume
persistentVolumeClaim:
claimName: nfs-pvc
动态存储通过StorageClass自动创建PV,无需手动预先定义,提升存储管理效率。
nfs-common,用于访问NFS服务器。sudo apt update
sudo apt install nfs-common
provisioner(如kubernetes.io/nfs)及NFS服务器参数(server、path)。apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-storage
provisioner: kubernetes.io/nfs
parameters:
server: <ubuntu-nfs-server-ip>
path: "/path/to/nfs/share"
storageClassName指定动态存储类,Kubernetes会自动创建PV。apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: dynamic-nfs-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: nfs-storage
resources:
requests:
storage: 2Gi
apiVersion: v1
kind: Pod
metadata:
name: dynamic-nfs-pod
spec:
containers:
- name: dynamic-nfs-container
image: nginx
volumeMounts:
- mountPath: "/data"
name: dynamic-nfs-volume
volumes:
- name: dynamic-nfs-volume
persistentVolumeClaim:
claimName: dynamic-nfs-pvc
Rook-Ceph是Kubernetes原生的分布式存储解决方案,提供高性能、高可用的块存储、对象存储及文件存储,适合大规模生产环境。
kubectl apply -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/operator.yaml
kubectl apply -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/cluster.yaml
rook-ceph-block),支持动态创建Ceph RBD卷。apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rook-ceph-block
provisioner: rook-ceph.rbd.csi.ceph.com
parameters:
clusterID: <rook-cluster-id>
pool: replicapool
imageFeatures: layering
csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner
csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph
csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node
csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
storageClassName关联Rook存储类,Pod可直接挂载分布式存储卷。S3对象存储适合存储大规模非结构化数据(如图片、视频、日志),Kubernetes可通过CSI驱动集成S3。
git clone https://github.com/kubernetes-incubator/external-storage.git
cd external-storage/s3
kubectl create -f deploy/kubernetes-s3-csi-driver.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: s3-storage
provisioner: s3.csi.k8s.io
parameters:
type: s3
bucket: <s3-bucket-name>
prefix: ""
region: <s3-region>
secretKey: <s3-access-key>
accessKey: <s3-secret-key>
/data)。apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: s3-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: s3-storage
resources:
requests:
storage: 5Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: s3-app
spec:
replicas: 1
selector:
matchLabels:
app: s3-app
template:
metadata:
labels:
app: s3-app
spec:
containers:
- name: s3-container
image: busybox
command: ["sleep", "3600"]
volumeMounts:
- mountPath: "/data"
name: s3-storage
volumes:
- name: s3-storage
persistentVolumeClaim:
claimName: s3-pvc