好的,我来以NFS为例详细演示如何为Nginx和MongoDB创建完整的存储解决方案。
环境准备
假设NFS服务器信息:
- NFS服务器IP:
192.168.1.100 - 共享路径:
/data/nfs
1. 创建NFS StorageClass
首先创建通用的NFS StorageClass:
1 | # nfs-storageclass.yaml |
应用配置:
1 | kubectl apply -f nfs-storageclass.yaml |
2. 部署NFS Provisioner
我们需要先部署NFS客户端provisioner:
1 | # nfs-provisioner-china-fixed.yaml |
应用配置:
1 | kubectl apply -f nfs-provisioner-china-fixed.yaml |
3. 为Nginx创建PVC和Deployment
Nginx需要存储HTML文件,使用ReadWriteMany访问模式:
1 | # nginx-pvc.yaml |
1 | # nginx-deployment.yaml |
4. 为MongoDB创建PVC和Deployment
MongoDB需要存储数据库文件,使用ReadWriteOnce访问模式:
1 | # mongodb-pvc.yaml |
1 | # mongodb-deployment.yaml |
5. 部署所有资源
1 | # 创建Nginx相关资源 |
6. 验证部署
1 | # 检查所有资源状态 |
预期输出:
1 | NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE |
7. 测试应用
测试Nginx:
1 | # 获取Nginx服务的外部IP |
测试MongoDB:
1 | # 连接到MongoDB Pod |
目录结构说明
在NFS服务器上,会自动创建如下目录结构:
1 | /data/nfs/ |
关键点总结
- StorageClass:定义了NFS存储的供应方式
- PVC:应用声明需要的存储大小和访问模式
- PV:由provisioner自动创建的实际存储资源
- 访问模式:
- Nginx:
ReadWriteMany(多个Pod共享) - MongoDB:
ReadWriteOnce(单个Pod独占)
- Nginx:
这种架构确保了:
- 数据持久性:Pod重启不会丢失数据
- 数据隔离:每个应用有独立的存储空间
- 自动化:PV自动创建和绑定
- 可扩展性:易于添加更多应用