博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
K8S环境中NAS卷添加noresvport方法
阅读量:2400 次
发布时间:2019-05-10

本文共 5139 字,大约阅读时间需要 17 分钟。

通过K8S使用NAS卷,请区分以下场景:

静态存储卷:

   使用阿里云ACK,PV、PVC方式,nfs驱动;
   使用阿里云ACK,PV、PVC方式,Flexvolume驱动;
   使用阿里云ACK,Volume方式,nfs驱动;
   使用阿里云ACK,Volume方式,Flexvolume驱动;
   自建K8S,PV、PVC方式,nfs驱动;
   自建K8S,Volume方式,nfs驱动;

动态存储卷:

   使用阿里云ACK
   使用自建K8S

静态卷-使用阿里云Kubernetes(ACK)时

1. 使用PV、PVC方式(nfs驱动)

首先确认当前的挂载是否配置了noresvport参数,参考NAS团队提供的方式;

例如当前的pv如下面yaml:

apiVersion: v1kind: PersistentVolumemetadata:  name: pv-nasspec:  accessModes:  - ReadWriteOnce  capacity:    storage: 2Gi  mountOptions:  - vers=3  nfs:    path: /default    server: 2564f49129-ggu23.cn-shenzhen.nas.aliyuncs.com  persistentVolumeReclaimPolicy: Retain

编辑PV:

kubectl edit pv pv-nas

更新mountOptions:

mountOptions:  - vers=4.0  - noresvport

或者:

mountOptions:  - vers=3  - nolock,tcp,noresvport

重启使用这个pv的pod;

需要注意:

由于一个节点上,如果已经有某个挂载点挂载在一个目录下了,其他的挂载(相同挂载点)即使配置了noresvport参数,还是会follow以前的挂载参数。即noresvport不生效;

解决方法:

方法1:修改pv参数后,把所有使用这个挂载点的pod掉离这个节点,然后再调回来。
方法2:使用新的挂载点创建新的pv使用(一个nas文件系统可以有2个挂载点);

示例方法1:

集群中有2个worker节点,部署一个deploy包含3个Pod;# kubectl get node | grep -v masterNAME                                 STATUS   ROLES    AGE   VERSIONcn-shenzhen.i-wz9c9m0m4oldr6mt89rd   Ready    
55d v1.12.6-aliyun.1cn-shenzhen.i-wz9gvy73m4qyk03xzg1y Ready
60d v1.12.6-aliyun.1# kubectl get podNAME READY STATUS RESTARTS AGEnas-static-784496fbb9-cqr97 1/1 Running 0 63mnas-static-784496fbb9-gljbq 1/1 Running 0 63mnas-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)去掉。

2. 使用PV、PVC方式(Flexvolume驱动)

首先确认当前的挂载是否配置了noresvport参数,参考NAS团队提供的方式;

例如当前的pv如下面yaml:

apiVersion: v1kind: PersistentVolumemetadata:  name: pv-nasspec:  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

3. 使用Volume方式挂载(nfs驱动)

不支持添加noresvport 参数,请使用pv、pvc方式;

apiVersion: v1kind: Podmetadata:  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

4. 使用Volume方式挂载(flexvolume驱动)

apiVersion: v1kind: Podmetadata:  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,自建K8S

参考上面ACK集群中使用nfs驱动的解决方案;

动态存储卷:

自建集群和ACK同下面方式;

对于使用下面storageclass创建的pv,如果没有添加noresvport参数,其生成的pv也没有添加noresvport:

apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:  name: alicloud-nasmountOptions:- vers=3provisioner: alicloud/nasreclaimPolicy: Retain

处理动态卷分为两个部分:

1. 更新storageclass:

这样后续生成的pv会默认添加noresvport参数;编辑stroageclass:

# kubectl edit sc alicloud-nasmountOptions:- nolock,tcp,noresvport- vers=3

2. 更新存量pv的挂载

# kubectl get pvpvc-b56f185a-9be4-11e9-a545-00163e0eff42   2Gi        RWO            Retain           Bound    default/html-web-0                                 alicloud-nas                   5h14mpvc-bc6b1f8d-9be4-11e9-a545-00163e0eff42   2Gi        RWO            Retain           Bound    default/html-web-1                                 alicloud-nas                   5h14mpvc-bf949736-9be4-11e9-a545-00163e0eff42   2Gi        RWO            Retain           Bound    default/html-web-2                                 alicloud-nas                   5h14m

同方法:使用PV、PVC方式(nfs驱动)

在pv中添加noresvport,
调度pod到其他节点;

本文为云栖社区原创内容,未经允许不得转载。

转载于:https://my.oschina.net/u/1464083/blog/3068862

你可能感兴趣的文章
成功经理人与自我管理能力(转载)
查看>>
ERP系统应用与管理咨询(转载)
查看>>
精益思想—人、过程和技术的集成(zt)
查看>>
超市食品名称中英文对照(zt)
查看>>
第六章 预测与决策
查看>>
14大管理方法工具(zt)
查看>>
职业生涯规划与管理实操(zt)
查看>>
国贸、货代常用词汇(zt)
查看>>
人力资源术语英汉对照(zt)
查看>>
传说中的100句英语可以帮你背7000单词(zt)
查看>>
网管IT服务管理五个心得 (zt)
查看>>
循序渐进学SAP系列(一):--SAP该如何入门
查看>>
PMP考试经验谈(转载)
查看>>
緣分是找到包容你的人(转载)
查看>>
关注人力资源管理的十大变化(转)
查看>>
知识管理与业务流程重组(转载)
查看>>
世界经典广告词欣赏
查看>>
35岁前应该做好的十件事
查看>>
创业从小做起的十条忠告(转)
查看>>
妙语连珠94句
查看>>