准备
首先确保nfs服务端搭建成功。由于资源限制,我们的nfs服务器和k8s集群不在同一局域网内,所以k8s中pv使用公网ip连接nfs,且nfs服务器的带宽为10M。
创建nfs pv
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-nfs
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
nfs:
path: /mysql-data
server: 39.105.232.177
创建pvc
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mysql-pvc
namespace: laravel
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
查看pv和pvc的状态
pv属于bound状态
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
mysql-nfs 10Gi RWO Recycle Bound laravel/mysql-pvc 16d
pvc也属于bound状态
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mysql-pvc Bound mysql-nfs 10Gi RWO 16d
如果没有使用storageclass,pv和pvc通过相同的storage存储大小和accessModes访问策略俩个元素来实现自动绑定。可以看到图中pv和pvc已经自动绑定。
创建mysql的deployment
使用的 harbor.maigengduo.com/laravel/mysql5.7镜像是基于docker官方的mysql:5.7镜像build的,mysql的data目录为/var/lib/mysql。
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: mysql
namespace: laravel