经过K8S使用NAS卷,请区分如下场景:html
静态存储卷:node
动态存储卷:nginx
首先确认当前的挂载是否配置了noresvport参数,参考NAS团队提供的方式;web
例如当前的pv以下面yaml:api
apiVersion: v1 kind: PersistentVolume metadata: name: pv-nas spec: accessModes: - ReadWriteOnce capacity: storage: 2Gi mountOptions: - vers=3 nfs: path: /default server: 2564f49129-ggu23.cn-shenzhen.nas.aliyuncs.com persistentVolumeReclaimPolicy: Retain
编辑PV:tcp
kubectl edit pv pv-nas
更新mountOptions:
mountOptions: - vers=4.0 - noresvport
或者:flex
mountOptions: - vers=3 - nolock,tcp,noresvport
重启使用这个pv的pod;ui
须要注意:阿里云
因为一个节点上,若是已经有某个挂载点挂载在一个目录下了,其余的挂载(相同挂载点)即便配置了noresvport参数,仍是会follow之前的挂载参数。即noresvport不生效;解决方法:
方法1:修改pv参数后,把全部使用这个挂载点的pod掉离这个节点,而后再调回来。
方法2:使用新的挂载点建立新的pv使用(一个nas文件系统能够有2个挂载点);code
示例方法1:
集群中有2个worker节点,部署一个deploy包含3个Pod; # kubectl get node | grep -v master NAME STATUS ROLES AGE VERSION cn-shenzhen.i-wz9c9m0m4oldr6mt89rd Ready <none> 55d v1.12.6-aliyun.1 cn-shenzhen.i-wz9gvy73m4qyk03xzg1y Ready <none> 60d v1.12.6-aliyun.1 # kubectl get pod NAME READY STATUS RESTARTS AGE nas-static-784496fbb9-cqr97 1/1 Running 0 63m nas-static-784496fbb9-gljbq 1/1 Running 0 63m nas-static-784496fbb9-ngzkq 1/1 Running 0 63m 编辑pv,添加- nolock,tcp,noresvport Options; 编辑deploy,把这个deploy的pod都调度到节点:cn-shenzhen.i-wz9c9m0m4oldr6mt89rd上; > 在deploy中添加 nodeName: cn-shenzhen.i-wz9c9m0m4oldr6mt89rd > 若是您的集群节点较多,能够给一批节点添加label,而后经过nodeSelector把pod调度到这写节点; > 参考:https://kubernetes.io/zh/docs/tasks/configure-pod-container/assign-pods-nodes/ 注意:若是您用的时候statefulset的应用,须要把updateStrategy.type配置为RollingUpdate; 而后再把pod调度到其余节点:cn-shenzhen.i-wz9gvy73m4qyk03xzg1y 到节点cn-shenzhen.i-wz9gvy73m4qyk03xzg1y 上验证noresport,已经生效。 2564f49129-ggu23.cn-shenzhen.nas.aliyuncs.com:/default on /var/lib/kubelet/pods/aa79e380-9bdb-11e9-a545-00163e0eff42/volumes/kubernetes.io~nfs/pv-nas type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.0.11,mountvers=3,mountport=4002,mountproto=tcp,local_lock=all,addr=192.168.0.11) 最后,因为当前使用nas的pod是有nodeName标签的,能够编辑deploy,把nodeName(nodeSelector)去掉。
首先确认当前的挂载是否配置了noresvport参数,参考NAS团队提供的方式;
例如当前的pv以下面yaml:
apiVersion: v1 kind: PersistentVolume metadata: name: pv-nas spec: capacity: storage: 5Gi storageClassName: nas accessModes: - ReadWriteMany flexVolume: driver: "alicloud/nas" options: server: "0cd8b4a576-uih75.cn-hangzhou.nas.aliyuncs.com" path: "/k8s" vers: "3"
重启使用这个pv的pod(升级flexvolume版本到最新);
须要注意:
因为一个节点上,若是已经有某个挂载点挂载在一个目录下了,其余的挂载(相同挂载点)即便配置了noresvport参数,仍是会follow之前的挂载参数。即noresvport不生效;解决方法:
方法1:修改pv参数后,把全部使用这个挂载点的pod掉离这个节点,而后再调回来。
方法2:使用新的挂载点建立新的pv使用(一个nas文件系统能够有2个挂载点);
参考示例方法1
不支持添加noresvport 参数,请使用pv、pvc方式;
apiVersion: v1 kind: Pod metadata: name: "flexvolume-nas-example" spec: containers: - name: "nginx" image: "nginx" volumeMounts: - name: "nas1" mountPath: "/data" volumes: - name: "nas1" nfs: path: / server: 0cd8b4a576-grs79.cn-hangzhou.nas.aliyuncs.com
apiVersion: v1 kind: Pod metadata: name: "flexvolume-nas-example" spec: containers: - name: "nginx" image: "nginx" volumeMounts: - name: "nas1" mountPath: "/data" volumes: - name: "nas1" flexVolume: driver: "alicloud/nas" options: server: "0cd8b4a576-grs79.cn-hangzhou.nas.aliyuncs.com" path: "/k8s" vers: "3"
重启使用这个pv的pod(升级flexvolume版本到最新);
须要注意:
因为一个节点上,若是已经有某个挂载点挂载在一个目录下了,其余的挂载(相同挂载点)即便配置了noresvport参数,仍是会follow之前的挂载参数。即noresvport不生效;解决方法:
方法1:修改pv参数后,把全部使用这个挂载点的pod掉离这个节点,而后再调回来。方法2:使用新的挂载点建立新的pv使用(一个nas文件系统能够有2个挂载点);
参考示例方法1
参考上面ACK集群中使用nfs驱动的解决方案;
自建集群和ACK同下面方式;
对于使用下面storageclass建立的pv,若是没有添加noresvport参数,其生成的pv也没有添加noresvport:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-nas mountOptions: - vers=3 provisioner: alicloud/nas reclaimPolicy: Retain
处理动态卷分为两个部分:
这样后续生成的pv会默认添加noresvport参数;编辑stroageclass:
# kubectl edit sc alicloud-nas mountOptions: - nolock,tcp,noresvport - vers=3
# kubectl get pv pvc-b56f185a-9be4-11e9-a545-00163e0eff42 2Gi RWO Retain Bound default/html-web-0 alicloud-nas 5h14m pvc-bc6b1f8d-9be4-11e9-a545-00163e0eff42 2Gi RWO Retain Bound default/html-web-1 alicloud-nas 5h14m pvc-bf949736-9be4-11e9-a545-00163e0eff42 2Gi RWO Retain Bound default/html-web-2 alicloud-nas 5h14m
同方法:使用PV、PVC方式(nfs驱动)
在pv中添加noresvport,
调度pod到其余节点;
本文为云栖社区原创内容,未经容许不得转载。