如果项目需要使用文件系统,需要宿主主机的一个目录映射到容器,可以考虑使用PVC。
-
PV(PersistentVolume)
- 创建PV的定义文件
apiVersion: v1 kind: PersistentVolume metadata:name: pvc-b5f39ddf-b86a-4a65-9fc3-b9f59d65920eannotations:pv.kubernetes.io/provisioned-by: nfs.csi.k8s.iovolume.kubernetes.io/provisioner-deletion-secret-name: ''volume.kubernetes.io/provisioner-deletion-secret-namespace: ''finalizers:- external-provisioner.volume.kubernetes.io/finalizer- kubernetes.io/pv-protection spec:capacity:storage: 10Gicsi:driver: nfs.csi.k8s.iovolumeHandle: 192.168.10.100volumeAttributes:csi.storage.k8s.io/pv/name: pvc-b5f39ddf-b86a-4a65-9fc3-b9f59d65920eserver: 192.168.10.100share: /data/nfs/scstorage.kubernetes.io/csiProvisionerIdentity: 1740995712643-6298-nfs.csi.k8s.iosubdir: pvc-b5f39ddf-b86a-4a65-9fc3-b9f59d65920eaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: DeletestorageClassName: nfs-csimountOptions:- nfsvers=4.1volumeMode: Filesystem
- 执行创建:kubectl apply -f pv.yaml
- 查看PV:kubectl get pv
-
PVC(PersistentVolumeClaim)
- 创建PVC的定义文件
apiVersion: v1 kind: PersistentVolumeClaim metadata:name: s1-pvcnamespace: sample1annotations:kubesphere.io/creator: adminpv.kubernetes.io/bind-completed: 'yes'pv.kubernetes.io/bound-by-controller: 'yes'volume.beta.kubernetes.io/storage-provisioner: nfs.csi.k8s.iovolume.kubernetes.io/storage-provisioner: nfs.csi.k8s.iofinalizers:- kubernetes.io/pvc-protection spec:accessModes:- ReadWriteManyresources:requests:storage: 10GivolumeName: pvc-b5f39ddf-b86a-4a65-9fc3-b9f59d65920estorageClassName: nfs-csivolumeMode: Filesystem
- 执行创建:kubectl apply -f pvc.yaml
- 查看PVC:kubectl get pvc -n sample1
-
在Pod中挂载 PVC
- 修改Pod的定义文件
kind: Deployment apiVersion: apps/v1 metadata:name: sample-servicenamespace: sample1 spec:replicas: 1selector:matchLabels:app: sample-servicetemplate:metadata:labels:app: sample-servicespec:volumes:- name: s1-volumepersistentVolumeClaim:claimName: s1-pvccontainers:- name: sample-serviceimage: 'swr.cn-east-3.myhuaweicloud.com/develop/sample-service:latest'ports:- containerPort: 18080protocol: TCPresources: {}volumeMounts:- name: s1-volumemountPath: /service/fileterminationMessagePath: /dev/termination-logterminationMessagePolicy: FileimagePullPolicy: AlwaysrestartPolicy: AlwaysterminationGracePeriodSeconds: 30dnsPolicy: ClusterFirstsecurityContext: {}imagePullSecrets:- name: imagesecretschedulerName: default-schedulerstrategy:type: RollingUpdaterollingUpdate:maxUnavailable: 25%maxSurge: 25%revisionHistoryLimit: 10progressDeadlineSeconds: 600
- Pod重启后可以验证:在宿主机器的/data/nfs/sc/pvc-b5f39ddf-b86a-4a65-9fc3-b9f59d65920e目录下面新建一个目录,可以在Pod中的/service/file目录下看到一样的目录结构,表示挂载成功。