注意修改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纔不會掛載失敗,手動掛載驗證沒問題,再操做動態供應html
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
mkdir /data/yaml/nfs/ -p
nginx
value: storage.pri/nfs #名字雖然能夠隨便起,之後引用要一致
這個鏡像中volume的mountPath默認爲/persistentvolumes,不能修改,不然運行時會報錯web
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
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
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
storageClassName: storage-nfs #這個class必定注意要和sc的名字同樣api
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
... 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 ...