nfs挂载
如果采用nfs挂载的方式,我们只需要将需要挂载的mysql-data目录指定nfs 的server和server的目的路径 ,如下,挂载到本机的/data/dev/mysql, 采用nfs的形式:
volumes:- name: mysql-datanfs:server: localhostpath: /data/dev/mysql- name: mysql-dev-confconfigMap:name: my.cnf
nfs出现挂载的问题
如果出现挂载的问题,参考我的另一篇文:
[nfs无法挂载问题] mount.nfs: access denied by server while mounting localhost:/data/dev/mysql_ Dream_it_possible!的博客-CSDN博客
pvc挂载
pvc卷是k8s容器存储的另一种形式,全程persitVolumeClaim, 可声明指定容量的pv卷,然后与pvc卷绑定,服务在挂载的时候只需要指定对应的pvc即可。
比如我要声明一个pv和一个pvc,创建mysql-pvc.yaml, pvc通过storageClassName绑定pv
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-01-pvc
spec:accessModes:- ReadWriteOnce # 只能被一个容器访问,如果能被多个容器访问那么设置为ReadWriteManyresources:requests:storage: 3GistorageClassName: standard
---
apiVersion: v1
kind: PersistentVolume
metadata:name: 3g-pv-1
spec:capacity:storage: 3GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: DeletestorageClassName: standardcinder:volumeID: a198bce4-ba0f-4d13-8f0c-55e31212a8c9 # 改路径为映射到本机的 /var/lib/kubelet/plugins/kubernetes.io/cinder/mountsfsType: ext4
可通过storageclass来查看pvc对应的pv是哪个。
status字段为Bound时表示该pvc正在被某个服务所使用,使用我们刚创建的pvc方法很简单,只需要在volums属性里声明persistentVolumeClaim即可。
apiVersion: apps/v1
kind: Deployment
metadata:name: mysql-01labels:app: mysql-01
spec:replicas: 1 # pod数量selector:matchLabels:app: mysql-01template:metadata:labels:app: mysql-01spec:containers:- name: mysql-01image: mysql:5.7imagePullPolicy: IfNotPresentresources:limits:memory: "512Mi"cpu: "1500m"ports:- containerPort: 3306env:- name: MYSQL_ROOT_PASSWORDvalue: "123456"volumeMounts:- name: mysql-01-persistent-storagemountPath: /var/lib/mysql- name: mysql-01-confmountPath: /etc/mysqlvolumes:- name: mysql-01-persistent-storagepersistentVolumeClaim:claimName: mysql-01-pvc- name: mysql-01-confconfigMap:name: my.cnf
启动成功后,那么pvc那边会的status状态为显示为bound。
pvc挂载会出现的问题
centos 7 会出现声明的pv里的VolumeID在/var/lib/kubelet/plugins/kubernetes.io/cinder/mounts路径不存在的情况。
如果没有 /kubernetes.io/cinder/mounts目录,那么需要手动创建,然后创建的volumeID为mounts下的目录,该目录需要具备读写权限才行。