组件介绍
创建集群时,默认会安装以下CSI存储组件:
说明 新建集群将默认安装csi-provisioner托管版。托管版组件由阿里云负责运维,您在集群中无法看到相关Pod。
升级csi-plugin和csi-provisioner
您可以在控制台查看csi-plugin和csi-provisioner组件版本并升级组件。
重要 如果集群通过csi-compatible-controller组件迁移Flexvolume至CSI,且该流程未完成时,无法自动升级csi-plugin和csi-provisioner组件,建议您先完成迁移后再升级组件,或者在迁移过程中手动升级CSI组件。具体操作,请参见升级组件。
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,单击组件管理。
单击存储页签,在csi-plugin及csi-provisioner组件区域,查看当前版本是否需要升级,并升级组件。
常见问题
组件异常问题
CSI组件启动失败,镜像拉取失败,报错exec /usr/bin/plugin.csi.alibabacloud.com: exec format error
问题现象
csi-plugin组件的Pod内csi-plugin Container报错exec /usr/bin/plugin.csi.alibabacloud.com: exec format error
。
问题原因
csi-plugin默认支持amd64和arm64多架构,如果当前Pod所在节点属于amd64或arm64架构,则可能是当前节点的镜像拉取未完成所导致,即镜像元数据已存在,但是实际镜像未拉取成功,导致二进制失效。镜像拉取失败的可能原因是由于在拉取镜像过程中强制关机导致,您可以查看当前节点对应ECS实例的操作审计确认是否有关机命令。
解决方案
扩容新节点,然后排水当前节点。
如果不想使用新节点,则需要执行以下操作:
排水当前节点的应用,然后将当前节点从集群中移除。
登录该节点,删除节点中所有的Container(如有)。
删除/var/lib/containerd
目录下的所有文件。
将该节点重新加入集群。
存储组件导致的OOM问题
csi-provisioner组件对应Pod中的Sidecar容器主要用于缓存Pod、PV、PVC等信息,随着集群规模增加,会造成内存OOM。
csi-plugin的Pod监控上出现大量流量
问题现象
在集群Pod监控上,csi-plugin的Pod出现大量流量。
问题原因
csi-plugin负责当前节点上NAS存储卷的挂载。由于使用NAS会产生网络流量,当节点存在NAS挂载点(即存在使用NAS的Pod)时,Pod发起的NAS请求流量就会经过csi-plugin的Namespace,从而被集群监控记录,造成csi-plugin出现大量网络流量。
解决方案
此种情况无需解决,可以忽略。流量只是被记录,并不会翻倍,也不会额外占用网络带宽。
csi-provisioner组件日志出现failed to renew lease xxx timed out waiting for the condition
报错
问题现象
通过kubectl logs csi-provisioner-xxxx -n kube-system
命令查看CSI日志,发现failed to renew lease xxx timed out waiting for the condition
报错。
问题原因
csi-provisioner是高可用多副本组件,多Pod组件之间需通过Kubernetes Lease选主,选主过程中需要访问API Server来获取指定的Lease,获取到Lease的组件就称为Leader,为集群提供服务。当前报错由于csi-provisioner访问集群内的API Server失败导致。
解决方案
请排查集群网络和API server状态是否正常。如无法解决,请提交工单处理。
组件升级失败
csi-plugin组件前置检查失败
若您的集群没有使用云盘、NAS或OSS类型的存储卷,或集群为测试环境,请手动更新镜像以升级csi-plugin组件。
命令示例如下,请参考csi-plugin替换<image url>
为要升级的镜像地址。
kubectl set image -n kube-system daemonset/csi-plugin csi-plugin=<image url>
csi-plugin组件前置检查通过,但升级失败
由于csi-plugin是Daemonset组件,如果当前集群存在NotReady或者其他非Running状态的节点,就会导致升级失败。您需要手动处理故障节点,然后重新升级。
若无法找到具体原因,请联系我们申请手动升级保障。
控制台有csi-plugin组件,但没有csi-provisioner组件
csi-provisioner的历史版本(1.14及之前)采用StatefulSet部署。如果集群中存在StatefulSet类型的csi-provisioner,请执行kubectl delete sts csi-provisioner
删除,然后重新安装csi-provisioner组件。
若操作出错,请联系我们申请手动升级保障。
csi-provisioner组件前置检查失败
若您的集群没有使用通过StorageClass创建的云盘、NAS或OSS类型的动态存储卷,或集群为测试环境,请手动更新镜像以升级csi-provisioner组件。
命令示例如下,请参考csi-provisioner替换<image url>
为要升级的镜像地址。
kubectl set image -n kube-system deployment/csi-provisioner csi-provisioner=<image url>
若您的集群使用通过StorageClass创建的云盘、NAS或OSS类型的动态存储卷,且包含关键业务数据,请联系我们申请手动升级保障。
csi-provisioner组件前置检查通过,但是升级失败
集群节点数量不符合要求导致csi-provisioner组件升级失败
问题现象
现象1:csi-provisioner组件前置检查失败,报错集群节点数量不符合要求。
现象2:csi-provisioner组件前置检查成功,升级成功,但是csi-provisioner组件对应Pod进入CrashLoopBackOff状态,查看日志可看到类似下方403 Forbidden
的日志。
time="2023-08-05T13:54:00+08:00" level=info msg="Use node id : <?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n <head>\n <title>403 - Forbidden</title>\n </head>\n <body>\n <h1>403 - Forbidden</h1>\n </body>\n</html>\n"
问题原因
解决方案
StorageClass属性变更导致csi-provisioner组件升级失败
问题现象
csi-provisioner组件前置检查失败,报错StorageClass属性不符合预期。
问题原因
默认StorageClass的属性被变更过,您删除重建过同名的StorageClass。StorageClass属性都是不可变的,否则会导致该组件升级失败。
解决方案
您需要删除集群中默认的StorageClass,包括alicloud-disk-essd、alicloud-disk-available、alicloud-disk-efficiency、alicloud-disk-ssd、alicloud-disk-topology,删除过程不会对现有应用造成任何影响。删除后,请尝试重新安装csi-provisioner组件。安装后,系统会自动重新创建StorageClass,无需您额外处理。
重要 如果您需要自定义的StorageClass,请创建新的StorageClass名称使用,请勿修改默认的StorageClass。
联系我们
若您需要申请手动升级保障,请您使用钉钉搜索钉钉群号35532895
加入钉钉群咨询。