阿里云NAS存储部署简介

打印 上一主题 下一主题

主题 1485|帖子 1485|积分 4455

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
近期在阿里云上部署OCP需要用到NAS,其中遇到NAS无法扩容的题目,在此简单条记。
1、部署NAS
参照github.com\kubernetes-sigs\alibaba-cloud-csi-driver\docs\nas.md部署说明,需要执行以下步调:
Step 1: Create RBAC resource

  1. # kubectl create -f ./deploy/rbac.yaml
复制代码
Step 2: Create CSI Plugin

  1. # kubectl create -f ./deploy/nas/nas-plugin.yaml
复制代码
Step 3: Create CSI Plugin

  1. # kubectl create -f ./deploy/nas/nas-provisioner.yaml
复制代码
执行完以上步调,会在kube-system下面部署一个daemonset csi-plugin和一个deployment csi-provisioner。
这时还缺少SC,在github.com\kubernetes-sigs\alibaba-cloud-csi-driver\examples\nas\dynamic目次可以找到所需的SC文件,按需修改直接部署即可。
到此,通过创建PVC实现NAS申请已能够实现。
2 NAS扩容
在修改PVC进行扩容时却发现提示不支持,题目重要有两点,但阿里云官方文档当前未见详细说明。
(1)SC缺少allowVolumeExpansion: true字段,会提示“only dynamically provisioned pvc can be resized”,SC中加上即可。
(2)SC加上允许扩容后,PVC是可以被更新了,但等了很久发现实际容量并未被更新。排查如下:
检查源码github.com\kubernetes-sigs\alibaba-cloud-csi-driver\pkg\nas\controllerserver.go,发现是有扩容方法的。
  1. func (cs *controllerServer) ControllerExpandVolume(ctx context.Context, req *csi.ControllerExpandVolumeRequest,
  2. ) (*csi.ControllerExpandVolumeResponse, error) {
  3.         log.Infof("ControllerExpandVolume: starting to expand nas volume with %v", req)
  4.         volSizeBytes := int64(req.GetCapacityRange().GetRequiredBytes())
  5.         pvObj, err := getPvObj(req.VolumeId)
  6.         if err != nil {
  7.                 return nil, fmt.Errorf("ControllerExpandVolume: nas volume(%s) expand error: %s", req.VolumeId, err.Error())
  8.         }
  9.         if _, ok := pvObj.Spec.CSI.VolumeAttributes["volumeCapacity"]; ok {
  10.                 err = setNasVolumeCapacityWithID(pvObj, cs.crdClient, volSizeBytes)
  11.                 if err != nil {
  12.                         log.Errorf("ControllerExpandVolume: nas volume(%s) expand error: %s", req.VolumeId, err.Error())
  13.                         return nil, fmt.Errorf("ControllerExpandVolume: nas volume(%s) expand error: %s", req.VolumeId, err.Error())
  14.                 }
  15.                 log.Infof("ControllerExpandVolume: Successful expand nas quota volume(%s) to size %d", req.VolumeId, volSizeBytes)
  16.         } else if mountType, ok := pvObj.Spec.CSI.VolumeAttributes["mountType"]; ok && mountType == "losetup" {
  17.                 log.Infof("ControllerExpandVolume: Successful expand nas losetup volume(%s) to size %d", req.VolumeId, volSizeBytes)
  18.         } else {
  19.                 return nil, fmt.Errorf("ControllerExpandVolume: nas volume(%s) not support expand", req.VolumeId)
  20.         }
  21.         return &csi.ControllerExpandVolumeResponse{CapacityBytes: volSizeBytes, NodeExpansionRequired: true}, nil
  22. }
复制代码
  1. 检查Deployment日志,发现扩容逻辑未被触发(找不到任何日志)。
复制代码
后来在alibaba-cloud-csi-driver\deploy\ack\upgrade\upgrade.md找到以下内容:
插件说明:

CSI-Plugin、CSI-Provisioner两个插件的阿里云发布镜像都是:acs/csi-plugin:{version},部署模板中的其他镜像说明如下:
   acs/csi-node-driver-registrar:负责csi-plugin插件注册的sidecar容器;Refer
  acs/csi-provisioner:数据卷动态创建的sidecar,负责调用CreateVolume等接口;Refer
  acs/csi-attacher:数据卷挂载的sidecar,负责调用ControllerPublishVolume接口;Refer
  acs/csi-resizer:数据卷扩容的sidecar,负责调用ControllerExpandVolume接口;Refer
  acs/csi-snapshotter:数据卷快照sidecar,负责创建volumeSnapshotContent对象;Refer
  acs/snapshot-controller:数据卷快照sidecar,负责调用CreateSnapshot接口;Refer
  1. 才发现想要调用ControllerExpandVolume接口是需要额外部署插件的,只是。。。(为何要隐藏的如此之深,一个NAS的扩容放到ACK的目录下),于是按图索骥,找到最新的镜像地址。
复制代码

 接下来呢,还需要找到部署的yaml,同样藏在ACK下面,alibaba-cloud-csi-driver\deploy\ack\csi-provisioner.yaml中间有一段。
  1.         - name: external-nas-resizer
  2.           image: registry.cn-hangzhou.aliyuncs.com/acs/csi-resizer:v1.1.0-7b30758-aliyun
  3.           args:
  4.             - "--v=5"
  5.             - "--csi-address=\$(ADDRESS)"
  6.             - "--leader-election"
  7.           env:
  8.             - name: ADDRESS
  9.               value: /var/lib/kubelet/csi-provisioner/nasplugin.csi.alibabacloud.com/csi.sock
  10.           imagePullPolicy: "Always"
  11.           volumeMounts:
  12.             - name: nas-provisioner-dir
  13.               mountPath: /var/lib/kubelet/csi-provisioner/nasplugin.csi.alibabacloud.com
复制代码
更新了deployment中的yaml后部署会得到三个container,external-nas-provisioner、
external-nas-resizer、csi-provisioner。
至此,差不多是可以实现NAS扩容了,但也不是没有题目了,由于更新PVC后会发现并不是立即就能扩容乐成,二是会看到一个message:
  1. waiting for user to (re-)start a pod to finish file system resize of volume on mode
复制代码
关于这一点,在文档里也能找到踪迹alibaba-cloud-csi-driver\docs\disk-resizer.md
4. Expand FileSystem with restart pod:

  1. // phase2: restart Pod, expand filesystem;
  2. # kubectl delete pod dynamic-create-6d5dc9bb7d-lvhgz
  3. pod "dynamic-create-6d5dc9bb7d-lvhgz" deleted
  4. # kubectl get pvc
  5. NAME           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS           AGE
  6. pvc-disk-new   Bound    pvc-8db30f1a-ad23-11e9-ae51-00163e105050   30Gi       RWO            alicloud-disk-expand   6m13s
  7. # kubectl exec -ti dynamic-create-6d5dc9bb7d-5gzq2 df | grep data
  8. /dev/vdd        30832548    45036  30771128   1% /data
复制代码
意思是只有这个PVC被挂载到pod,且重启pod才会见效扩容操纵。
至此,关于阿里云上部署NAS搞定了。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦见你的名字

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表