nfs 共享存储 删除pod nfs的数据不会丢失
apiVersion: v1
kind: Pod
metadata:
name: nfs-pd1
spec:
containers:
- name: nginx
image: harbor.hiuiu.com/nginx/nginx:1.21.5
imagePullPolicy: Never
volumeMounts:
- mountPath: /usr/share/nginx/html
name: test-volume
ports:
- containerPort: 80
volumes:
- name: test-volume
nfs:
server: 192.168.10.227
path: /root/nfs/rw/www/wolfcode
readOnly: false
pv 持久卷 pvc
静态构建
vim pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0001
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: slow
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: /root/nfs/rw/test-pv
server: 192.168.10.227
vim pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteOnce #和pv的一样
volumeMode: Filesystem
resources:
requests:
storage: 4Gi #小于pv 不能大于pv
storageClassName: slow #和pv一样
0. StorageClass 存在:storageClassName: slow
指定的 StorageClass 必须在您的 Kubernetes 集群中已定义,并且它应该配置为使用 NFS 作为后端存储。
- NFS 服务器和路径:虽然 PVC 本身不直接指定 NFS 服务器的 IP 地址和路径,但是关联的 StorageClass 应该配置有这些信息,或者通过动态卷供应器(如 NFS Provisioner)来自动创建相应的 PersistentVolume。
- 权限和网络:确保 Kubernetes 集群中的节点可以访问 NFS 服务器,并且具有适当的权限来挂载指定的 NFS 路径。
- NFS 客户端支持:确保 Kubernetes 节点上的 NFS 客户端支持您希望使用的 NFS 版本(尽管这通常是通过 StorageClass 或动态卷供应器来管理的)。
- 资源请求:您请求的存储大小为 4Gi,这应该在您的 NFS 服务器上可用,并且符合 StorageClass 的配置。
动态构建
业务量大时 每个pv创建复杂
自动构建pv StorageClass
nfs动态制备案例
nfs-provisioner
StorageClass 配置
RBAC 配置
PVC 处于pending状态
PVC测试配置
-
创建了一个sa账户
apiVersion: v1 kind: ServiceAccount metadata: name: nfs-provisioner
-
对sa授权
kubectl create clusterrolebinding nfs-provisioner-clusterrolebinding --clusterrole=cluster-admin --serviceaccount=default:nfs-provisioner
-
安装配置nfs-server
mkdir -p /data/nfs_pro vim /etc/exports /data/nfs_pro *(rw,sync,no_root_squash) exportfs -arv systemctl restart nfs-kernel-server.service
-
启动一个pod
kind: Deployment apiVersion: apps/v1 metadata: name: nfs-provisioner spec: selector: matchLabels: app: nfs-provisioner replicas: 1 strategy: type: Recreate template: metadata: labels: app: nfs-provisioner spec: serviceAccount: nfs-provisioner containers: - name: nfs-provisioner image: registry.cn-beijing.aliyuncs.com/mydlq/nfs-subdir-external-provisioner:v4.0.0 volumeMounts: - name: nfs-client-root mountPath: /persistentvolumes env: - name: PROVISIONER_NAME value: example.com/nfs - name: NFS_SERVER value: 192.168.10.226 - name: NFS_PATH value: /data/nfs_pro volumes: - name: nfs-client-root nfs: server: 192.168.10.226 path: /data/nfs_pro
-
创建StorageClass,动态pv
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs
provisioner: example.com/nfs
6. 创建PVC,通过storageClass去实现
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: test-claim1
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: nfs
7. 创建pod验证
kind: Pod
apiVersion: v1
metadata:
name: read-pod
spec:
containers:
- name: read-pod
image: harbor.hiuiu.com/nginx/nginx:1.21.5
volumeMounts:
- name: nfs-pvc
mountPath: /usr/share/nginx/html
restartPolicy: "Never"
volumes:
- name: nfs-pvc
persistentVolumeClaim:
claimName: test-claim1