Linux下K8S存储配置指南
Kubernetes(K8S)的存储配置需根据场景选择合适的存储类型(如NFS、Ceph、HostPath等),其中NFS是最常用的网络存储方案,适用于多节点共享存储;Ceph提供高性能块存储,适合生产环境;HostPath仅用于单节点测试。以下是详细配置步骤:
一、NFS存储配置(最常用)
NFS(Network File System)通过TCP/IP网络共享目录,支持多节点同时读写,适合需要共享数据的场景(如Web服务器、数据库备份)。
1. 安装并配置NFS服务器
在Linux主机(如CentOS)上安装NFS服务,创建共享目录并设置权限:
# 安装NFS软件包
sudo yum install -y nfs-utils # CentOS/RHEL
# sudo apt-get install -y nfs-kernel-server # Ubuntu/Debian
# 创建共享目录并设置权限(允许所有用户读写)
sudo mkdir -p /mnt/nfs
sudo chown -R nobody:nogroup /mnt/nfs
sudo chmod 777 /mnt/nfs
# 配置NFS共享(允许所有IP访问,可根据需求限制)
echo "/mnt/nfs *(rw,sync,no_subtree_check)" | sudo tee /etc/exports
# 启动NFS服务并设置开机自启
sudo systemctl start nfs-server
sudo systemctl enable nfs-server
# 配置防火墙(允许NFS相关服务)
sudo firewall-cmd --permanent --add-service=nfs --add-service=mountd --add-service=rpc-bind
sudo firewall-cmd --reload
验证NFS共享是否生效:
showmount -e localhost # 查看本机共享目录
若输出/mnt/nfs,说明NFS服务配置成功。
2. 在K8S中创建PersistentVolume(PV)和PersistentVolumeClaim(PVC)
PV是K8S中的存储资源,PVC是对PV的申请,两者绑定后供Pod使用。
PV配置(nfs-pv.yaml):
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv # PV名称
spec:
capacity:
storage: 5Gi # 存储容量
accessModes:
- ReadWriteMany # 多节点读写(NFS常用模式)
nfs:
path: /mnt/nfs # NFS共享目录
server: # 替换为实际IP
persistentVolumeReclaimPolicy: Retain # 删除PVC后保留PV数据
PVC配置(nfs-pvc.yaml):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc # PVC名称
spec:
accessModes:
- ReadWriteMany # 必须与PV的accessModes一致
resources:
requests:
storage: 5Gi # 申请的存储容量(不超过PV容量)
应用配置:
kubectl apply -f nfs-pv.yaml -f nfs-pvc.yaml
验证PV和PVC状态:
kubectl get pv # 查看PV状态(应为“Bound”)
kubectl get pvc # 查看PVC状态(应为“Bound”)
3. 在Pod中使用PVC
通过PVC将NFS存储挂载到Pod的容器中:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod # Pod名称
spec:
containers:
- name: nginx
image: nginx:latest # 使用Nginx镜像
volumeMounts:
- mountPath: "/usr/share/nginx/html" # 容器内挂载路径(Nginx默认网页目录)
name: nfs-volume # 卷名称(与下方volumes.name一致)
volumes:
- name: nfs-volume
persistentVolumeClaim:
claimName: nfs-pvc # 引用上方PVC名称
应用Pod配置:
kubectl apply -f nginx-pod.yaml
验证挂载是否成功:
kubectl exec -it nginx-pod -- ls /usr/share/nginx/html # 查看容器内挂载目录
若能看到NFS共享目录中的文件(如index.html),说明配置成功。
二、Ceph存储配置(生产级高性能)
Ceph是分布式存储系统,提供块存储(RBD)、对象存储(RGW)和文件存储(CephFS),适合需要高可用、高性能的生产环境。
1. 部署Ceph集群
使用Rook(K8S原生存储编排工具)快速部署Ceph集群:
# 添加Rook Helm仓库
helm repo add rook-release https://charts.rook.io/release
helm repo update
# 安装Rook Ceph Operator(在rook-ceph命名空间)
helm install rook-ceph rook-release/rook-ceph --namespace rook-ceph
等待Operator启动完成(可通过kubectl get pods -n rook-ceph查看Pod状态)。
2. 创建Ceph存储类(StorageClass)
存储类用于动态分配Ceph存储,以下是块存储(RBD)的配置示例:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rook-ceph-block # 存储类名称
provisioner: rook-ceph.rbd.csi.ceph.com # Ceph RBD CSI驱动
parameters:
clusterID: rook-ceph # Ceph集群ID(与Operator配置一致)
pool: replicapool # Ceph存储池(需提前创建)
imageFormat: "2" # Ceph镜像格式(2为最新版)
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
reclaimPolicy: Delete # 删除PVC后自动删除PV
应用存储类配置:
kubectl apply -f ceph-storageclass.yaml
3. 使用Ceph存储类创建PVC和Pod
通过存储类动态分配存储,无需手动创建PV:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ceph-pvc
spec:
accessModes:
- ReadWriteOnce # 单节点读写(Ceph RBD常用模式)
storageClassName: rook-ceph-block # 引用上方存储类
resources:
requests:
storage: 10Gi # 申请的存储容量
应用PVC配置:
kubectl apply -f ceph-pvc.yaml
创建使用Ceph存储的Pod:
apiVersion: v1
kind: Pod
metadata:
name: ceph-pod
spec:
containers:
- name: ceph-container
image: busybox
command: ["sleep", "3600"]
volumeMounts:
- mountPath: "/mnt/ceph"
name: ceph-volume
volumes:
- name: ceph-volume
persistentVolumeClaim:
claimName: ceph-pvc
应用Pod配置:
kubectl apply -f ceph-pod.yaml
验证挂载是否成功:
kubectl exec -it ceph-pod -- df -h /mnt/ceph # 查看容器内挂载的Ceph存储
三、HostPath存储(单节点测试用)
HostPath将Linux主机的目录挂载到Pod中,仅适用于单节点测试(如开发环境),不支持多节点共享。
1. 创建HostPath目录
在K8S节点上创建共享目录:
sudo mkdir -p /data/hostpath
sudo chmod 777 /data/hostpath
2. 创建PV和PVC
PV配置(hostpath-pv.yaml):
apiVersion: v1
kind: PersistentVolume
metadata:
name: hostpath-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /data/hostpath # 主机目录
type: DirectoryOrCreate # 若目录不存在则创建
PVC配置(hostpath-pvc.yaml):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: hostpath-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
应用配置:
kubectl apply -f hostpath-pv.yaml -f hostpath-pvc.yaml
3. 在Pod中使用PVC
apiVersion: v1
kind: Pod
metadata:
name: hostpath-pod
spec:
containers:
- name: hostpath-container
image: nginx
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: hostpath-volume
volumes:
- name: hostpath-volume
persistentVolumeClaim:
claimName: hostpath-pvc
应用Pod配置:
kubectl apply -f hostpath-pod.yaml
验证挂载是否成功:
kubectl exec -it hostpath-pod -- ls /usr/share/nginx/html # 查看容器内挂载目录
若能看到主机/data/hostpath目录中的文件,说明配置成功。
注意事项
- NFS:需确保所有K8S节点都能访问NFS服务器,且防火墙开放相关端口(2049、111等)。
- Ceph:部署前需规划好存储池、PG数(Placement Group)等参数,确保存储性能。
- HostPath:仅用于测试,生产环境不建议使用,因其无法保证数据持久性和多节点共享。
以上配置覆盖了K8S在Linux环境下的常见存储需求,可根据实际场景选择合适的方案。
以上就是关于“Linux下K8S存储如何配置”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm