Trident: Kubernetes 版本更新后,Trident CSI Node 插件未注册

创建于 2020-11-25  ·  4评论  ·  资料来源: NetApp/trident

描述错误

Kubernetes 版本从 v1.18.9 更新到 v1.19.4 后,一个节点上的 Trident CSI 节点插件 ( csi.trident.netapp.io ) 现在已取消注册。 此节点上的 Pod 不能再挂载和卸载 Trident 卷。

错误信息

我们在 kubelet 日志中看到以下消息。

由于注册套接字 ( /var/lib/kubelet/plugins_registry/csi.trident.netapp.io-reg.sock ) 已被删除, csi.trident.netapp.io未注册。

I1119 05:47:54.246972 6550 plugin_watcher.go:212] 从所需的状态缓存中删除套接字路径 /var/lib/kubelet/plugins_registry/csi.trident.netapp.io-reg.sock
I1119 05:47:53.162305 6550 reconciler.go:139] operationExecutor.UnregisterPlugin 在“/var/lib/kubelet/plugins_registry/csi.trident.netapp.io-reg.sock”处为插件启动(插件详细信息:&{/var /lib/kubelet/plugins_registry/csi.trident.netapp.io-reg.sock 2020-11-04 05:08:19.553684094 +0000 UTC m=+38.893901704 0x704c200 csi.trident.netapp.io})
I1119 05:47:53.163390 6550 csi_plugin.go:177] kubernetes.io/csi:registrationHandler.DeRegisterPlugin 插件请求 csi.trident.netapp.io

pod 无法卸载卷,因为找不到csi.trident.netapp.io

E1119 09:02:52.819122 6550 nestedpendingoperations.go:301] 操作“{v olumeName:kubernetes.io/csi/csi.trident.netapp.io ^pvc-75a6fd7f-7aee-45e8-a5fa-d4500272528e podName:ad18a7d1-4090 -4e0c-9e71-cba46dfc3657 nodeName:}" 失败。 在 2020-11-19 09:04:54.819071328 +0000 UTC m=+1310234.159288938 (durationBeforeRetry 2m2s) 之前不允许重试。 错误:“UnmountVolume.TearDown 卷“数据”失败(唯一名称:“kubernetes.io/csi/csi.trident.netapp.io^pvc-75a6fd7f-7aee-45e8-a5fa-d4500272528e”)pod“ad18a7d1-4090-4e0c -9e71-cba46dfc3657”(UID:“ad18a7d1-4090-4e0c-9e71-cba46dfc3657”):kubernetes.io/csi:mounter.SetUpAt 无法获取 CSI 客户端:驱动程序名称 csi.trident.netapp.io 未在列表中找到注册 CSI 驱动程序"

两个 trident-csi 同时运行

我们发现该节点上的两个trident-csi (Node Plugin)Pod 同时运行了很短的时间,并且旧的driver-registrar在新的 Pod 启动后停止了。

driver-registrar在收到 SIGTERM ( node_register.go#L113-L116 ) 时删除注册套接字 ( /var/lib/kubelet/plugins_registry/csi.trident.netapp.io-reg.sock )。 移除套接字会导致 kubelet 注销 Trident 插件。 我相信这是问题的原因。

image

更新后重新创建了 DaemonSet

Trident-csi(节点插件)pod 由 DaemonSet 管理。 通常,每个节点上只运行一个 pod。 但是 Kubernetes 更新后, trident-csi Daemonset 被trident-operator重新创建。 删除 DaemonSet 允许两个 pod(旧的和新的)同时运行。

我们在trident-operator日志上确认了这一点。

在这里, trident-csi Daemonset 被删除了。

time="2020-11-19T05:47:45Z" level=debug msg="Deleted Kubernetes DaemonSet." DaemonSet=trident-csi 命名空间=trident

然后很快创建了trident-csi守护程序集。

time="2020-11-19T05:47:45Z" level=debug msg="创建对象。" kind=DaemonSet 名称=trident-csi 命名空间=trident

Kubernetes 更新后, shouldUpdate标志设置为 true ( controller.go#L1110 )。 似乎shouldUpdate标志会导致trident-csi守护程序集被删除( installer.go#L1489-L1494 )。

环境

  • Trident 版本:带有 trident-operator 的 20.10.0
  • 使用的 Trident 安装标志: silenceAutosupport: true (Trident Operator)
  • 容器运行时:Docker 19.03.13
  • Kubernetes 版本:v1.19.4
  • Kubernetes 编排器:Kubernetes
  • Kubernetes 启用的功能门:
  • 操作系统:Ubuntu 18.04
  • NetApp 后端类型:ONTAP AFF 9.1P14
  • 其他:

重现

更新 Kubernetes 版本可能会重现此问题。 由于更新 Kubernetes 需要很长时间并且并不总是发生,我们通过不同的演示确认了以下导致此问题的行为。

两个 trident-csi 导致 kubelet 注销 Trident 插件

  1. 确认 Trident CSI 驱动程序已在节点上注册。
$ kubectl describe csinodes.storage.k8s.io <NODE_NAME>
...
Spec:
  Drivers:
    csi.trident.netapp.io:
      Node ID:        <NODE_NAME>
      Topology Keys:  [topology.kubernetes.io/zone]
  1. 复制trident-csi DaemonSet 以在每个节点上运行两个 trident-csi pod。
$ kubectl get ds -n trident trident-csi -o json | jq '.metadata.name|="trident-csi-2"' | kubectl apply -f -
  1. 等待它们运行,然后删除复制的trident-csi-2 DaemonSet。
$ kubectl delete ds -n trident trident-csi-2
  1. 确认 Trident CSI 驱动程序已在节点的 Drivers 部分中消失。 (这需要一些时间)
$ kubectl describe csinodes.storage.k8s.io <NODE_NAME>
Spec:

重新创建 DaemonSet 允许两个 pod(旧的和新的)同时运行

  1. 删除trident-csi DaemonSet。 DaemonSet 将很快由 trident-operator 重新创建。
$ kubectl delete ds -n trident trident-csi
  1. 您将在每个节点上看到两个trident-csi pod。
$ kubectl get pods -n trident -o wide

预期行为
Pod 可以在 Kubernetes 版本更新后挂载和卸载 Trident 卷。

附加上下文
没有任何

bug tracked

最有用的评论

我们将在 Trident v21.01 版本中包含此修复程序。

所有4条评论

你好@tksm

感谢您提供此问题的详细信息并仔细研究根本原因,您的分析非常有帮助。 daemonset pod 终止和重新创建之间的窗口至关重要,后者仅应仅在前者完成时发生。 因此,运营商应确保在创建 daemonset 之前,将属于先前 daemonset 的 pod 全部删除,然后再创建一个新的 daemonset。

出于好奇,您介意我询问升级期间遇到此问题的集群数量吗?

谢谢!

嗨,@ntap-arorar

感谢您的确认。 我认为您的想法将解决此问题。

到目前为止,我们只在一个集群上遇到了这个问题,因为我们只升级了几个集群作为测试。

我们将在 Trident v21.01 版本中包含此修复程序。

此问题已通过提交820579d 修复

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

uberspot picture uberspot  ·  3评论

kaparora picture kaparora  ·  5评论

r0ss3 picture r0ss3  ·  6评论

khankth picture khankth  ·  4评论

gnarl picture gnarl  ·  5评论