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