管理csi-plugin和csi-provisioner组件

CSI存储组件包括csi-plugincsi-provisioner,通过CSI组件可以实现存储卷的动态创建、挂载、卸载等功能。

组件介绍

创建集群时,默认会安装以下CSI存储组件:

组件

说明

部署形式

csi-plugin

实现数据卷的挂载、卸载、格式化等功能。

DaemonSet

csi-provisioner

实现数据卷的动态创建,动态扩容,创建快照等能力。默认支持块存储,NAS, OSS三类存储卷的创建。

Deployment

说明

新建集群将默认安装csi-provisioner托管版。托管版组件由阿里云负责运维,您在集群中无法看到相关Pod。

升级csi-plugincsi-provisioner

您可以在控制台查看csi-plugincsi-provisioner组件版本并升级组件。

重要

如果集群通过csi-compatible-controller组件迁移FlexvolumeCSI,且该流程未完成时,无法自动升级csi-plugincsi-provisioner组件,建议您先完成迁移后再升级组件,或者在迁移过程中手动升级CSI组件。具体操作,请参见升级组件

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,单击组件管理

  3. 单击存储页签,在csi-plugincsi-provisioner组件区域,查看当前版本是否需要升级,并升级组件。

    说明

    如果控制台操作升级失败,请参考组件升级失败处理。

常见问题

组件异常问题

CSI组件启动失败,镜像拉取失败,报错exec /usr/bin/plugin.csi.alibabacloud.com: exec format error

问题现象

csi-plugin组件的Podcsi-plugin Container报错exec /usr/bin/plugin.csi.alibabacloud.com: exec format error

问题原因

csi-plugin默认支持amd64arm64多架构,如果当前Pod所在节点属于amd64arm64架构,则可能是当前节点的镜像拉取未完成所导致,即镜像元数据已存在,但是实际镜像未拉取成功,导致二进制失效。镜像拉取失败的可能原因是由于在拉取镜像过程中强制关机导致,您可以查看当前节点对应ECS实例的操作审计确认是否有关机命令。

解决方案

  • 扩容新节点,然后排水当前节点。

  • 如果不想使用新节点,则需要执行以下操作:

    1. 排水当前节点的应用,然后将当前节点从集群中移除。

    2. 登录该节点,删除节点中所有的Container(如有)。

    3. 删除/var/lib/containerd目录下的所有文件。

    4. 将该节点重新加入集群。

存储组件导致的OOM问题

csi-provisioner组件对应Pod中的Sidecar容器主要用于缓存Pod、PV、PVC等信息,随着集群规模增加,会造成内存OOM。

  • 如果使用的托管版csi-provisioner组件,请提交工单处理。

  • 如果使用的非托管版csi-provisioner组件,当发生OOM时,您需要根据集群规模自行调整Limit大小,具体操作如下:

    1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,单击组件管理

    3. 组件管理页面,找到并选中csi-provisioner组件,单击对应的图标图标,然后选择查看YAML

    4. 根据集群规模修改组件的YAML文件,自行调整Limit大小。

      修改limit大小

csi-pluginPod监控上出现大量流量

问题现象

在集群Pod监控上,csi-pluginPod出现大量流量。

问题原因

csi-plugin负责当前节点上NAS存储卷的挂载。由于使用NAS会产生网络流量,当节点存在NAS挂载点(即存在使用NASPod)时,Pod发起的NAS请求流量就会经过csi-pluginNamespace,从而被集群监控记录,造成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组件前置检查失败

  • 若您的集群没有使用云盘、NASOSS类型的存储卷,或集群为测试环境,请手动更新镜像以升级csi-plugin组件。

    命令示例如下,请参考csi-plugin替换<image url>为要升级的镜像地址。

    kubectl set image -n kube-system daemonset/csi-plugin csi-plugin=<image url>
  • 若您的集群使用了云盘、NASOSS类型存储卷,且包含关键业务数据,请联系我们申请手动升级保障。

csi-plugin组件前置检查通过,但升级失败

由于csi-pluginDaemonset组件,如果当前集群存在NotReady或者其他非Running状态的节点,就会导致升级失败。您需要手动处理故障节点,然后重新升级。

若无法找到具体原因,请联系我们申请手动升级保障。

控制台有csi-plugin组件,但没有csi-provisioner组件

csi-provisioner的历史版本(1.14及之前)采用StatefulSet部署。如果集群中存在StatefulSet类型的csi-provisioner,请执行kubectl delete sts csi-provisioner删除,然后重新安装csi-provisioner组件。

若操作出错,请联系我们申请手动升级保障。

csi-provisioner组件前置检查失败

  • 若您的集群没有使用通过StorageClass创建的云盘、NASOSS类型的动态存储卷,或集群为测试环境,请手动更新镜像以升级csi-provisioner组件。

    命令示例如下,请参考csi-provisioner替换<image url>为要升级的镜像地址。

    kubectl set image -n kube-system deployment/csi-provisioner csi-provisioner=<image url>
  • 若您的集群使用通过StorageClass创建的云盘、NASOSS类型的动态存储卷,且包含关键业务数据,请联系我们申请手动升级保障。

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"

问题原因

  • 现象1原因:csi-provisioner为了保证高可用,它包含主从Pod,并且主从Pod必须在不同的节点上。如果当前集群只有1个节点,会导致该组件升级失败。

  • 现象2原因:csi-provisioner所在节点开启了安全加固模式,该模式禁止了节点上metadata server的访问,导致此报错信息。

解决方案

  • 现象1解决方案:您需要更新csi-provisioner组件。具体操作,请参见管理csi-plugincsi-provisioner组件

  • 现象2解决方案:关闭节点上的安全加固模式,CSI必须要访问到节点的元数据。

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加入钉钉群咨询。

相关文档