阿里云NAS存储部署简介

news2024/11/15 21:38:41

近期在阿里云上部署OCP需要用到NAS,其中遇到NAS无法扩容的问题,在此简单笔记。

1、部署NAS

参照github.com\kubernetes-sigs\alibaba-cloud-csi-driver\docs\nas.md部署说明,需要执行以下步骤:

Step 1: Create RBAC resource

# kubectl create -f ./deploy/rbac.yaml

Step 2: Create CSI Plugin

# kubectl create -f ./deploy/nas/nas-plugin.yaml

Step 3: Create CSI Plugin

# 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,发现是有扩容方法的。

func (cs *controllerServer) ControllerExpandVolume(ctx context.Context, req *csi.ControllerExpandVolumeRequest,
) (*csi.ControllerExpandVolumeResponse, error) {
	log.Infof("ControllerExpandVolume: starting to expand nas volume with %v", req)
	volSizeBytes := int64(req.GetCapacityRange().GetRequiredBytes())
	pvObj, err := getPvObj(req.VolumeId)
	if err != nil {
		return nil, fmt.Errorf("ControllerExpandVolume: nas volume(%s) expand error: %s", req.VolumeId, err.Error())
	}
	if _, ok := pvObj.Spec.CSI.VolumeAttributes["volumeCapacity"]; ok {
		err = setNasVolumeCapacityWithID(pvObj, cs.crdClient, volSizeBytes)
		if err != nil {
			log.Errorf("ControllerExpandVolume: nas volume(%s) expand error: %s", req.VolumeId, err.Error())
			return nil, fmt.Errorf("ControllerExpandVolume: nas volume(%s) expand error: %s", req.VolumeId, err.Error())
		}
		log.Infof("ControllerExpandVolume: Successful expand nas quota volume(%s) to size %d", req.VolumeId, volSizeBytes)
	} else if mountType, ok := pvObj.Spec.CSI.VolumeAttributes["mountType"]; ok && mountType == "losetup" {
		log.Infof("ControllerExpandVolume: Successful expand nas losetup volume(%s) to size %d", req.VolumeId, volSizeBytes)
	} else {
		return nil, fmt.Errorf("ControllerExpandVolume: nas volume(%s) not support expand", req.VolumeId)
	}
	return &csi.ControllerExpandVolumeResponse{CapacityBytes: volSizeBytes, NodeExpansionRequired: true}, nil
}
检查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

才发现想要调用ControllerExpandVolume接口是需要额外部署插件的,只是。。。(为何要隐藏的如此之深,一个NAS的扩容放到ACK的目录下),于是按图索骥,找到最新的镜像地址。

 接下来呢,还需要找到部署的yaml,同样藏在ACK下面,alibaba-cloud-csi-driver\deploy\ack\csi-provisioner.yaml中间有一段。

        - name: external-nas-resizer
          image: registry.cn-hangzhou.aliyuncs.com/acs/csi-resizer:v1.1.0-7b30758-aliyun
          args:
            - "--v=5"
            - "--csi-address=\$(ADDRESS)"
            - "--leader-election"
          env:
            - name: ADDRESS
              value: /var/lib/kubelet/csi-provisioner/nasplugin.csi.alibabacloud.com/csi.sock
          imagePullPolicy: "Always"
          volumeMounts:
            - name: nas-provisioner-dir
              mountPath: /var/lib/kubelet/csi-provisioner/nasplugin.csi.alibabacloud.com

更新了deployment中的yaml后部署会得到三个container,external-nas-provisioner、
external-nas-resizer、csi-provisioner。

至此,差不多是可以实现NAS扩容了,但也不是没有问题了,因为更新PVC后会发现并不是立即就能扩容成功,二是会看到一个message:

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:

// phase2: restart Pod, expand filesystem;
# kubectl delete pod dynamic-create-6d5dc9bb7d-lvhgz
pod "dynamic-create-6d5dc9bb7d-lvhgz" deleted

# kubectl get pvc
NAME           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS           AGE
pvc-disk-new   Bound    pvc-8db30f1a-ad23-11e9-ae51-00163e105050   30Gi       RWO            alicloud-disk-expand   6m13s
# kubectl exec -ti dynamic-create-6d5dc9bb7d-5gzq2 df | grep data
/dev/vdd        30832548    45036  30771128   1% /data

意思是只有这个PVC被挂载到pod,且重启pod才会生效扩容操作。

至此,关于阿里云上部署NAS搞定了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/56017.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

四、伊森商城 前端基础-Vue MVVM思想Vue安装单向绑定 p21

目录 一、MVVM 思想 二、Vue 简介 2.1、安装 2.1.1、初始化vue项目 -y默认确定 2.1.2、安装上vue的2.6.11版本 三、Vue的单向绑定 一、MVVM 思想 M:即 Model,模型,包括数据和一些基本操作 V:即 View,视图&#xf…

【Docker】常用命令总结

Docker是基于Go语言实现的云开源项目。Docker的主要目标是**“Build,Ship and Run Any App,Anywhere”**。也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运…

容器开发运维人员的 Linux 操作机配置优化建议

"工欲善其事必先利其器", 作为一个PAAS平台架构师, 容器相关技术(docker, k8s等)是必不可少的. 本文简单介绍下我自己的Linux操作机配置. 提升工作效率, 提高使用体验. :heart::heart::heart: :exclamation: 注意: 本文以CentOS 7.6 为例, RHEL7.6 操作类似. Ubuntu系…

为什么简历上不要轻易写“精通分布式”,一线大厂为什么面试必问分布式?

为什么要学习分布式? 作为一名后端 Java 程序员,我们在找工作写简历的时候除了高并发经验。一般情况下都还会写上自己熟悉/了解/掌握/精通分布式系统,所以高并发和分布式大多是成对出现的。 在某直聘网站上搜到的 Java 岗位 这么多金的一个知…

Shiro-SpringBoot (二)

在上一节中实现了在SpringBoot中使用Shiro做权限控制,但是针对上一节留下的不足点,在这里进行一下优化和改造,主要有一下几点: 支持AJAX请求支持FreeMarker模板URL拦截提取到yml配置文件 (一) 支持AJAX请求 如果是AJAX请求URL接口&#xff0…

软件外包公司真的去不得吗?

各位小伙伴们!好!啊!最近全国大部分地区都降温了,大家记得做好保暖,不要生病。 无论是应届毕业生,还是准备跳槽的测试人,都有面对“软件外包”公司的可能。有些人说进入外包公司就相当于给履历…

电子招标采购商城系统:优化传统采购业务,提速企业数字化升级

后疫情时代,电子元器件供应链发生了巨大的变化,缺货已经影响了大多数企业,电子元器件采购人员每天被“缺货”“涨价”的字眼包围着,对电子元器件企业的发展带来了极大的限制。当前,借助数字化技术对电子元器件采购管理…

[附源码]计算机毕业设计在线票务系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

云服务器和本地服务器的优缺点分析

服务器是企业IT基础设施的命脉,可用于存放文件、应用程序、网站、员工远程访问等等。当然,选择时有许多不同类型的服务器和许多需要考虑的因素。目前比较流行的两种服务器类型是本地服务器和基于云的服务器。 本地服务器 本地服务器放置在公司的办公室中…

VS2022开发Arduino(90%转载10%原创)

先上转载链接 VS2022开发Arduino(提供Visual.Micro.Processing.Sketch.dll)_hb2cpc的博客-CSDN博客_vs开发arduino Visual Studio 2022开发Arduino详述_liht_1634的博客-CSDN博客_visualstudio arduino 其中破解部分编译出错,此处为原创&am…

RabbitMQ面试篇

文章目录1 你们为什么选择了RabbitMQ而不是其它的MQ?2 RabbitMQ如何确保消息的不丢失?3 RabbitMQ如何避免消息堆积?4 RabbitMQ如何保证消息的有序性?5 如何防止MQ消息被重复消费?6 如何保证RabbitMQ的高可用&#xff1…

计算机体系结构:分支目标缓冲(BTB)例题

题目内容 按照下表计算分支转移总的延迟,根据下面的假设,计算分支目标缓冲的性能。 (1)对于BTB中的指令,预测准确率90%。 (2)缓冲区命令率90%。 (3)不在BTB中分支转移成功的比例为60%。 题目分析 总共有四种情况: ①在BTB中且预…

DSP篇--C6678功能调试系列之网络调试

目录 网络调试 1、GE工程的研究与功能扩充 网络调试 网口测试,使用的是TI官方提供的GE网络测试例程。 主要注意的事项是:时钟的设置、相关设备的MAC地址和IP的设置、中断的设置。确定板子的port和phy。 GbE Switch Subsystem Initialization Procedure…

[附源码]Python计算机毕业设计Django计算机相关专业考研资料管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

bash调试方法总结

在看nginx源码实现时发现有些代码是根据不同的本地环境动态生成的,看了一下大致生成流程,基本上都是通过shell脚本调用shell脚本实现的。看到了shell脚本,就想到如何调试shell脚本,shell脚本在实际工作中运用的挺多的,…

几何向量:向量到平面投影和LookAt

在研究所保密开发完后回来隔离两波,已经接近四五个月没碰外网电脑了,可以说是活成了原始人。 因为某些开发细节原因,需要实现向量投影和LookAt功能,记录一下。 首先实现向量到平面投影,如下: …

第二证券|鲍威尔发声:释放重磅信号,美股大涨!中概股狂涨

大家早上好!昨夜今晨又有许多大事产生:美联储主席鲍威尔证明,12月开端或许放缓加息;微软涨逾1100亿美元,美股进入技能型牛市;小鹏轿车昨日暴升近50%,中概股11月涨逾40%;法、德不满美…

java计算机毕业设计ssm企业日常事务管理系统sl5xl(附源码、数据库)

java计算机毕业设计ssm企业日常事务管理系统sl5xl(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#…

全栈性能测试教程之性能测试相关知识(二) Jmeter的应用

性能测试相关知识(二) Jmeter的应 1、性能测试的方法 1.1验收负载测试: 在QA的环境模拟生产运行的业务压力和使用场景组合,测试系统的性能是否满足生产环境的性能诉求。 1.2负载测试 在被测系统上持续不断的增加压力&#xff…

易点易动RFID固定资产管理系统助力企业年终固定资产大盘点

固定资产作为资产构成的重要组成部分,也是企业完成生产经营的物质保障,对企业的发展起着重要的作用。越来越多的企业者开始重视企业内部的固定资产管理,从而会定期对固定资产进行盘点,以保证固定资产账实一致、账账相符。每逢年底…