安装nfs 略过了
下载外部存储卷的供应器
https://github.com/kubernetes-retired/external-storage/blob/master/nfs/deploy
cat << END> class-claim.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
 name: example-nfs
provisioner: example.com/nfs
mountOptions:
 - vers=4.1
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
 name: nfs
 annotations:
   volume.beta.kubernetes.io/storage-class: "example-nfs"
spec:
 accessModes:
   - ReadWriteMany
 resources:
   requests:
     storage: 10Gi
END
cat << END> rbac.yaml
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: ["create", "update", "patch"]
 - apiGroups: [""]
   resources: ["services", "endpoints"]
   verbs: ["get"]
 - 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
    # replace with namespace where provisioner is deployed
   namespace: default
roleRef:
 kind: ClusterRole
 name: nfs-provisioner-runner
 apiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
 name: leader-locking-nfs-provisioner
rules:
 - apiGroups: [""]
   resources: ["endpoints"]
   verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
 name: leader-locking-nfs-provisioner
subjects:
 - kind: ServiceAccount
   name: nfs-provisioner
   # replace with namespace where provisioner is deployed
   namespace: default
roleRef:
 kind: Role
 name: leader-locking-nfs-provisioner
 apiGroup: rbac.authorization.k8s.io
END
创建
kubectl apply -f class-claim.yaml -f rbac.yaml 

在这里插入图片描述

cat <<END> deployment.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
 name: nfs-provisioner
---
kind: Service
apiVersion: v1
metadata:
 name: nfs-provisioner
 labels:
   app: nfs-provisioner
spec:
 ports:
   - name: nfs
     port: 2049
   - name: nfs-udp
     port: 2049
     protocol: UDP
   - name: nlockmgr
     port: 32803
   - name: nlockmgr-udp
     port: 32803
     protocol: UDP
   - name: mountd
     port: 20048
   - name: mountd-udp
     port: 20048
     protocol: UDP
   - name: rquotad
     port: 875
   - name: rquotad-udp
     port: 875
     protocol: UDP
   - name: rpcbind
     port: 111
   - name: rpcbind-udp
     port: 111
     protocol: UDP
   - name: statd
     port: 662
   - name: statd-udp
     port: 662
     protocol: UDP
 selector:
   app: nfs-provisioner
---
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:
     nodeName: node172 #指定节点调度
     serviceAccount: nfs-provisioner
     containers:
       - name: nfs-provisioner
         #image: quay.io/kubernetes_incubator/nfs-provisioner:latest
         image: registry.cn-shenzhen.aliyuncs.com/jbjb/csi:nfs
         ports:
           - name: nfs
             containerPort: 2049
           - name: nfs-udp
             containerPort: 2049
             protocol: UDP
           - name: nlockmgr
             containerPort: 32803
           - name: nlockmgr-udp
             containerPort: 32803
             protocol: UDP
           - name: mountd
             containerPort: 20048
           - name: mountd-udp
             containerPort: 20048
             protocol: UDP
           - name: rquotad
             containerPort: 875
           - name: rquotad-udp
             containerPort: 875
             protocol: UDP
           - name: rpcbind
             containerPort: 111
           - name: rpcbind-udp
             containerPort: 111
             protocol: UDP
           - name: statd
             containerPort: 662
           - name: statd-udp
             containerPort: 662
             protocol: UDP
         securityContext:
           capabilities:
             add:
               - DAC_READ_SEARCH
               - SYS_RESOURCE
         args:
           - "-provisioner=example.com/nfs"
         env:
           - name: POD_IP
             valueFrom:
               fieldRef:
                 fieldPath: status.podIP
           - name: SERVICE_NAME
             value: nfs-provisioner
           - name: POD_NAMESPACE
             valueFrom:
               fieldRef:
                 fieldPath: metadata.namespace
         imagePullPolicy: "IfNotPresent"
         volumeMounts:
           - name: export-volume
             mountPath: /export
     volumes:
       - name: export-volume
         hostPath:
           path: /srv #本机目录必须存在
END
[root@c169 nfs]# kubectl get pods | grep nfs
nfs-provisioner-759b4dd4db-rj6lq   1/1     Running   0          65m
测试
cat <<END >nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
  #namespace: cephfs
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80
        volumeMounts:
          - mountPath: /usr/share/nginx/html
            name: data
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: nfs
END
[root@c169 nfs]# kubectl get pods -l app=nginx
NAME                            READY   STATUS    RESTARTS   AGE
nginx-deploy-677f9866f8-4zthj   1/1     Running   0          50m
nginx-deploy-677f9866f8-mz7fx   1/1     Running   0          50m
nginx-deploy-677f9866f8-znxnv   1/1     Running   0          50m

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐