一、安装配置NFS
注意修改IP exportfs #检查配置是否生效 mkdir /data/nfs-volume/ -p yum -y install nfs-utils rpcbind cat > /etc/exports <<'eof' /data/nfs-volume 10.4.7.0/24(rw,no_root_squash) eof systemctl enable rpcbind systemctl enable nfs-server systemctl start rpcbind systemctl start nfs-server exportfs -r exportfs
二、客户端验证
客户端安装nfs-utifs才不会挂载失败,手动挂载验证没问题,再操作动态供应
yum install -y nfs-utils systemctl start nfs-utils systemctl enable nfs-utils rpcinfo -p showmount -e 10.4.7.11 mkdir /root/nfsmount mount -t nfs 10.4.7.11:/data/nfs-volume /root/nfsmount
三 、设置动态供应
3.1 准备目录
mkdir /data/yaml/nfs/ -p
3.2 创建provisioner
value: storage.pri/nfs #名字虽然可以随便起,以后引用要一致 这个镜像中volume的mountPath默认为/persistentvolumes,不能修改,否则运行时会报错
cat > /data/yaml/nfs/provisioner-nfs.yaml <<'eof' apiVersion: v1 kind: ServiceAccount metadata: name: nfs-provisioner --- kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: nfs-provisioner-runner rules: - apiGroups: [""] resources: ["persistentvolumes"] verbs: ["get", "list", "watch", "create", "delete"] - apiGroups: [""] resources: ["persistentvolumeclaims"] verbs: ["get", "list", "watch", "update"] - apiGroups: ["storage.k8s.io"] resources: ["storageclasses"] verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["events"] verbs: ["watch", "create", "update", "patch"] - apiGroups: [""] resources: ["services", "endpoints"] verbs: ["get","create","list", "watch","update"] - apiGroups: ["extensions"] resources: ["podsecuritypolicies"] resourceNames: ["nfs-provisioner"] verbs: ["use"] --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: run-nfs-provisioner subjects: - kind: ServiceAccount name: nfs-provisioner namespace: default roleRef: kind: ClusterRole name: nfs-provisioner-runner apiGroup: rbac.authorization.k8s.io --- #vi nfs-deployment.yaml;创建nfs-client的授权 kind: Deployment apiVersion: apps/v1 metadata: name: nfs-client-provisioner spec: replicas: 1 strategy: type: Recreate selector: matchLabels: app: nfs-client-provisioner template: metadata: labels: app: nfs-client-provisioner spec: serviceAccount: nfs-provisioner containers: - name: nfs-client-provisioner image: lizhenliang/nfs-client-provisioner volumeMounts: - name: nfs-client-root mountPath: /persistentvolumes env: - name: PROVISIONER_NAME value: storage.pri/nfs - name: NFS_SERVER value: 10.4.7.11 - name: NFS_PATH value: /data/nfs-volume volumes: - name: nfs-client-root nfs: server: 10.4.7.11 path: /data/nfs-volume eof
3.3 创建storageclass
cat > /data/yaml/nfs/storageclass-nfs.yaml <<eof apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: storage-nfs provisioner: storage.pri/nfs reclaimPolicy: Delete eof
3.4 改变默认sc
kubectl apply -f /data/yaml/nfs/ kubectl patch storageclass storage-nfs -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' kubectl get sc kubectl get po -o wide
四、验证动态供应
4.1 创建pvc
storageClassName: storage-nfs #这个class一定注意要和sc的名字一样
cat > /data/yaml/nfs/pvc-nfs.yaml <<eof apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-nfs spec: storageClassName: storage-nfs accessModes: - ReadWriteMany resources: requests: storage: 1Gi eof kubectl apply -f /data/yaml/nfs/pvc-nfs.yaml kubectl get pvc
4.2 使用pvc
... spec: containers: - name: nginx image: nginx:alpine imagePullPolicy: IfNotPresent ports: - containerPort: 80 name: web volumeMounts: #挂载容器中的目录到pvc nfs中的目录 - name: www mountPath: /usr/share/nginx/html volumes: - name: www persistentVolumeClaim: #指定pvc claimName: pvc-nfs ...