<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>PVC挂载失败 on Zero Day Notes</title>
        <link>https://blog.5772447.xyz/tags/pvc%E6%8C%82%E8%BD%BD%E5%A4%B1%E8%B4%A5/</link>
        <description>Recent content in PVC挂载失败 on Zero Day Notes</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <lastBuildDate>Fri, 16 Oct 2020 07:00:00 +0800</lastBuildDate><atom:link href="https://blog.5772447.xyz/tags/pvc%E6%8C%82%E8%BD%BD%E5%A4%B1%E8%B4%A5/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>疏通PVC挂载：一次CSI插件超时导致业务Pod起不来的排查</title>
            <link>https://blog.5772447.xyz/posts/fa6beef6/</link>
            <pubDate>Fri, 16 Oct 2020 07:00:00 +0800</pubDate>
            <guid>https://blog.5772447.xyz/posts/fa6beef6/</guid>
            <description>&lt;h2 id=&#34;问题背景&#34;&gt;&lt;a href=&#34;#%e9%97%ae%e9%a2%98%e8%83%8c%e6%99%af&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;问题背景&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;业务上云后，有状态组件几乎都会落到 &lt;strong&gt;PVC + CSI&lt;/strong&gt;：数据库、消息中间件、自研有状态服务依赖块存储或文件存储，由集群里的 CSI Controller / Node 插件完成 CreateVolume、ControllerPublish、NodeStage、NodePublish 四段链路。平时滚动发布、扩副本都“无感”，真正第一次踩坑往往是：&lt;strong&gt;节点有 CPU/内存、镜像能拉、Quota 也够，Pod 就是卡在 Pending 或 ContainerCreating&lt;/strong&gt;，描述里只有一句含糊的 &lt;code&gt;FailedMount&lt;/code&gt; / &lt;code&gt;AttachVolume.Attach failed&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;我们线上是一套基于开源 CSI 的企业存储（iSCSI + multipath），集群规模中等，日常 Pod 创建成功率很高。本篇复盘一次“存储侧磁盘已建好，K8s 侧却长期挂不上去”的故障：表象像调度/配额问题，根因落在 &lt;strong&gt;CSI 插件超时阈值偏紧 + 个别节点 multipathd/iSCSI 会话僵死&lt;/strong&gt;，属于容器运维里典型、但纯“查应用日志”永远绕不开的存储数据面问题。&lt;/p&gt;&#xA;&lt;h2 id=&#34;故障现象&#34;&gt;&lt;a href=&#34;#%e6%95%85%e9%9a%9c%e7%8e%b0%e8%b1%a1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;故障现象&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;周三 09:10 起，订单中台晚高峰前的一次灰度发布把新版本有状态服务扩到 3 副本。两分钟内：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;新 Pod 大量卡在 &lt;code&gt;ContainerCreating&lt;/code&gt;&lt;/strong&gt;，&lt;code&gt;kubectl get pod&lt;/code&gt; 里 READY 一直 &lt;code&gt;0/1&lt;/code&gt;，AGE 从几十秒滚到十几分钟还不 Ready。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;kubectl describe pod&lt;/code&gt;&lt;/strong&gt; 反复出现：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;Warning  FailedAttachVolume  ... AttachVolume.Attach failed for volume &amp;quot;pvc-xxxx&amp;quot; : rpc error: code = DeadlineExceeded desc = context deadline exceeded&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;或 &lt;code&gt;FailedMount ... MountVolume.MountDevice failed ... timeout waiting for volume to be attached&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;同命名空间无状态 Deployment 正常&lt;/strong&gt;；&lt;code&gt;kubectl top node&lt;/code&gt; 显示 CPU/内存充裕；&lt;code&gt;ResourceQuota&lt;/code&gt;、镜像拉取、NetworkPolicy 均无异常（也排除了近期写过的配额耗尽、ImagePull、NP 全隔离类故障）。&lt;/li&gt;&#xA;&lt;li&gt;存储控制台侧：对应 LUN/卷&lt;strong&gt;已创建成功&lt;/strong&gt;，说明问题不在“没盘”，而在“盘到节点”的 Attach/Mount 链路。&lt;/li&gt;&#xA;&lt;li&gt;约 1/3 新副本会“碰巧”挂在某几台历史上运维过的老节点上，&lt;strong&gt;固定在那几台上必挂；调度到新节点偶发成功&lt;/strong&gt;——这给了“节点本地存储通道有问题”的强线索。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;业务侧表现是发布窗口超时、灰度入口 502/超时上升；值班最初误判为“调度器坏了 / CNI 又炸了”，浪费了将近二十分钟。&lt;/p&gt;&#xA;&lt;h2 id=&#34;排查过程&#34;&gt;&lt;a href=&#34;#%e6%8e%92%e6%9f%a5%e8%bf%87%e7%a8%8b&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;排查过程&#xD;&#xA;&lt;/h2&gt;&lt;h3 id=&#34;1-先把故障落点钉在-volume-生命周期&#34;&gt;&lt;a href=&#34;#1-%e5%85%88%e6%8a%8a%e6%95%85%e9%9a%9c%e8%90%bd%e7%82%b9%e9%92%89%e5%9c%a8-volume-%e7%94%9f%e5%91%bd%e5%91%a8%e6%9c%9f&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;1. 先把故障落点钉在 Volume 生命周期&#xD;&#xA;&lt;/h3&gt;&lt;p&gt;对卡死的 Pod：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl describe pod order-sts-2 -n order | sed -n &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/Events/,$p&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl get pvc -n order&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl get volumeattachment&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;关键观察：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;PVC 状态多数是 &lt;strong&gt;Bound&lt;/strong&gt;（StorageClass 已 provisione 成功），不是 Pending。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;VolumeAttachment&lt;/code&gt; 对象长时间 &lt;code&gt;ATTACHED=false&lt;/code&gt;，或 &lt;code&gt;ATTACHED=true&lt;/code&gt; 但 Pod 仍 FailedMount——说明 &lt;strong&gt;Controller 侧 Attach 与 Node 侧 Mount 可能卡在不同阶段&lt;/strong&gt;。&lt;/li&gt;&#xA;&lt;li&gt;Events 时间戳间隔接近 CSI 默认/我们配置的超时（约 15s～2min 一跳），符合 &lt;strong&gt;gRPC DeadlineExceeded&lt;/strong&gt; 特征，而不是立即拒绝。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这一步把排查从“调度/配额/镜像”收敛到 &lt;strong&gt;CSI 四段式链路&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h3 id=&#34;2-看-csi-controller-与-node-插件日志不要只看业务容器&#34;&gt;&lt;a href=&#34;#2-%e7%9c%8b-csi-controller-%e4%b8%8e-node-%e6%8f%92%e4%bb%b6%e6%97%a5%e5%bf%97%e4%b8%8d%e8%a6%81%e5%8f%aa%e7%9c%8b%e4%b8%9a%e5%8a%a1%e5%ae%b9%e5%99%a8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;2. 看 CSI Controller 与 Node 插件日志，不要只看业务容器&#xD;&#xA;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl -n kube-system logs deploy/csi-controller --tail&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl -n kube-system logs ds/csi-node -c node-driver --tail&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt; --prefix&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;日志里能对上三组关键信息：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;ControllerPublishVolume&lt;/code&gt; 对部分 volumeID &lt;strong&gt;反复重试&lt;/strong&gt;，伴随 &lt;code&gt;context deadline exceeded&lt;/code&gt;；&lt;/li&gt;&#xA;&lt;li&gt;成功 Attach 的 volume，在问题节点上 &lt;code&gt;NodeStageVolume&lt;/code&gt; 卡在 &lt;code&gt;waiting for device to appear under /dev/disk/by-path/...&lt;/code&gt;；&lt;/li&gt;&#xA;&lt;li&gt;健康节点同一 volume 类操作通常在数秒内完成。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;同时核对 CSI sidecar：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl -n kube-system get pod -l app&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;csi-controller -o wide&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl -n kube-system get csidriver&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;Controller 副本本身 Running，排除“插件全挂”。更像是 &lt;strong&gt;后端存储/节点通道慢，把默认超时打穿&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h3 id=&#34;3-对比必挂节点与正常节点的数据面&#34;&gt;&lt;a href=&#34;#3-%e5%af%b9%e6%af%94%e5%bf%85%e6%8c%82%e8%8a%82%e7%82%b9%e4%b8%8e%e6%ad%a3%e5%b8%b8%e8%8a%82%e7%82%b9%e7%9a%84%e6%95%b0%e6%8d%ae%e9%9d%a2&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;3. 对比“必挂节点”与“正常节点”的数据面&#xD;&#xA;&lt;/h3&gt;&lt;p&gt;登录两台对照节点：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;4&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;5&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;6&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# iSCSI / multipath 状态&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;iscsiadm -m session&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;multipath -ll&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl status multipathd iscsid&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dmesg -T | tail -100&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ls -l /dev/disk/by-path/ | head&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;问题节点特征非常扎眼：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;iscsiadm -m session&lt;/code&gt; 有会话，但部分 session 处于 &lt;strong&gt;reconnecting / free&lt;/strong&gt; 抖动；&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;multipath -ll&lt;/code&gt; 出现 &lt;strong&gt;paths down&lt;/strong&gt; 或 map 不完整，对应 LUN 的 dm 设备迟迟不出现；&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;dmesg&lt;/code&gt; 有 &lt;code&gt;connection timed out&lt;/code&gt;、&lt;code&gt;scsi host reset&lt;/code&gt;、偶发 &lt;code&gt;blocked for more than 120 seconds&lt;/code&gt;；&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;multipathd&lt;/code&gt; 内存与 fd 略高，日志刷 &lt;code&gt;path checker failed&lt;/code&gt;。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;正常节点同存储、同网段则会话稳定、map 齐全。存储交换机侧无整网级告警，但问题节点上联端口错误计数略高——&lt;strong&gt;单节点存储网络半瞎&lt;/strong&gt;比“整个 SAN 挂了”更符合离散失败画像。&lt;/p&gt;&#xA;&lt;h3 id=&#34;4-核对超时与并发插件太老实也会放大故障&#34;&gt;&lt;a href=&#34;#4-%e6%a0%b8%e5%af%b9%e8%b6%85%e6%97%b6%e4%b8%8e%e5%b9%b6%e5%8f%91%e6%8f%92%e4%bb%b6%e5%a4%aa%e8%80%81%e5%ae%9e%e4%b9%9f%e4%bc%9a%e6%94%be%e5%a4%a7%e6%95%85%e9%9a%9c&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;4. 核对超时与并发：插件“太老实”也会放大故障&#xD;&#xA;&lt;/h3&gt;&lt;p&gt;翻 CSI 部署参数与 sidecar 参数，发现历史变更里为了“失败快、别堵队列”，把：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;timeout&lt;/code&gt; / &lt;code&gt;--timeout&lt;/code&gt;（外部 attacher / provisioner）&lt;/li&gt;&#xA;&lt;li&gt;以及 driver 内 &lt;code&gt;attachTimeout&lt;/code&gt; 类配置&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;压得偏紧。存储正常时问题不大；&lt;strong&gt;节点 multipath 抖动时，一次登录+扫盘本身就可能超过阈值&lt;/strong&gt;，于是：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;调用方 DeadlineExceeded → 重试；&lt;/li&gt;&#xA;&lt;li&gt;存储侧可能已有半成品会话；&lt;/li&gt;&#xA;&lt;li&gt;重试并发顶高，控制器工作队列变长；&lt;/li&gt;&#xA;&lt;li&gt;更多 Pod 进入 FailedAttach/FailedMount 循环。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;这与业务高峰叠加，形成“越重试越堵”的正反馈。&lt;/p&gt;&#xA;&lt;h3 id=&#34;5-用最小实验验证因果&#34;&gt;&lt;a href=&#34;#5-%e7%94%a8%e6%9c%80%e5%b0%8f%e5%ae%9e%e9%aa%8c%e9%aa%8c%e8%af%81%e5%9b%a0%e6%9e%9c&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;5. 用最小实验验证因果&#xD;&#xA;&lt;/h3&gt;&lt;ol&gt;&#xA;&lt;li&gt;将一个 Pending Pod &lt;strong&gt;打污点容忍/节点选择器&lt;/strong&gt;，强制调度到健康节点：数分钟内 Mount 成功、容器起来。&lt;/li&gt;&#xA;&lt;li&gt;在问题节点上手动 &lt;code&gt;multipath -r&lt;/code&gt; + 重启 &lt;code&gt;multipathd&lt;/code&gt; 后再放回调度：同一 PVC 可完成 NodeStage。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;只调大超时、不修节点&lt;/strong&gt;：失败率下降但仍有长尾——说明超时是放大器，不是唯一根因。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;结论成型：&lt;strong&gt;主因是问题节点 iSCSI/multipath 数据面僵死；次因是 CSI 超时与重试策略过激，把单点抖动放大成发布窗口级事故。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;解决方案&#34;&gt;&lt;a href=&#34;#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;解决方案&#xD;&#xA;&lt;/h2&gt;&lt;h3 id=&#34;紧急止血发布窗口内&#34;&gt;&lt;a href=&#34;#%e7%b4%a7%e6%80%a5%e6%ad%a2%e8%a1%80%e5%8f%91%e5%b8%83%e7%aa%97%e5%8f%a3%e5%86%85&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;紧急止血（发布窗口内）&#xD;&#xA;&lt;/h3&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;给有状态工作负载临时避开坏节点&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;给问题节点加 taint：&lt;code&gt;storage.kubernetes.io/unschedulable=true:NoSchedule&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;或在 STS/Deployment 上用 &lt;code&gt;nodeAffinity&lt;/code&gt; 先躲开故障机架/故障节点池。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;清理卡住的 VolumeAttachment（慎用，先确认存储侧无双挂）&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;对长期 &lt;code&gt;ATTACHED=false&lt;/code&gt; 且确认无业务在用的 attachment，按厂商手册做 force detach / 删除后重建，避免对象卡死阻塞队列。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;节点侧快速恢复存储通道&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;4&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;5&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl restart iscsid multipathd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;multipath -r&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;iscsiadm -m session -R&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 确认 by-path / dm 设备出现后再删掉失败 Pod 让控制器重试&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl delete pod order-sts-2 -n order --force --grace-period&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;临时放宽 CSI 超时&lt;/strong&gt;（只作止血，回写变更单）：将 attacher/provisioner 与 driver 超时调到能覆盖“慢扫盘”的上限，并限制并发 attach，防止打爆存储控制面。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;按上述处理后，灰度副本在 10 分钟内全部 Ready，入口错误率回落。&lt;/p&gt;&#xA;&lt;h3 id=&#34;根治动作&#34;&gt;&lt;a href=&#34;#%e6%a0%b9%e6%b2%bb%e5%8a%a8%e4%bd%9c&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;根治动作&#xD;&#xA;&lt;/h3&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;节点镜像与巡检&lt;/strong&gt;：装机模板固化 &lt;code&gt;iscsid&lt;/code&gt;/&lt;code&gt;multipathd&lt;/code&gt; 开启、合理的 path checker、启动顺序；巡检脚本定期抓 &lt;code&gt;multipath -ll&lt;/code&gt; 异常与 session 重连次数。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;CSI 超时与重试策略分层&lt;/strong&gt;：慢 IO 场景给够 deadline；失败区分 &lt;strong&gt;可重试（超时/暂不可用）&lt;/strong&gt; 与 &lt;strong&gt;不可重试（参数错误/权限）&lt;/strong&gt;，避免无脑密集重试。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;发布门禁&lt;/strong&gt;：有状态服务发布前自动检查目标节点池的存储健康（session、multipath、CSI node plugin Ready），不健康节点先 taint 再发版。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;可观测性&lt;/strong&gt;：给 CSI Controller/Node 日志做 &lt;code&gt;DeadlineExceeded&lt;/code&gt; / &lt;code&gt;FailedMount&lt;/code&gt; 聚合告警，并对 &lt;code&gt;VolumeAttachment&lt;/code&gt; 长时间未 ATTACHED 做对象级告警，别等业务 Pod 红了才知道。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;网络侧&lt;/strong&gt;：问题节点上联错包排查（光模块、线缆、交换机口），存储 VLAN QoS/隔离复核，避免“计算网正常、存储网亚健康”。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;根因分析&#34;&gt;&lt;a href=&#34;#%e6%a0%b9%e5%9b%a0%e5%88%86%e6%9e%90&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;根因分析&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;本故障是 &lt;strong&gt;数据面僵死 × 控制面超时策略&lt;/strong&gt; 的叠加：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;层次&lt;/th&gt;&#xA;          &lt;th&gt;问题&lt;/th&gt;&#xA;          &lt;th&gt;作用&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;节点存储栈&lt;/td&gt;&#xA;          &lt;td&gt;iSCSI session / multipath path 异常，设备节点迟迟不出现&lt;/td&gt;&#xA;          &lt;td&gt;直接导致 NodeStage/NodePublish 失败&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;CSI 插件&lt;/td&gt;&#xA;          &lt;td&gt;Attach/Mount 超时偏紧、重试密集&lt;/td&gt;&#xA;          &lt;td&gt;把偶发慢变成队列堆积与大面积 DeadlineExceeded&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;发布与调度&lt;/td&gt;&#xA;          &lt;td&gt;新副本摊到坏节点，无存储健康门禁&lt;/td&gt;&#xA;          &lt;td&gt;把节点级问题放大成版本发布失败&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;观测&lt;/td&gt;&#xA;          &lt;td&gt;只盯应用/节点 CPU，不盯 VolumeAttachment 与 CSI 日志&lt;/td&gt;&#xA;          &lt;td&gt;延长误判时间，浪费黄金止血窗口&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;存储控制台“卷已创建”只能证明 &lt;strong&gt;Provision 成功&lt;/strong&gt;，不能证明 &lt;strong&gt;Attach/Mount 成功&lt;/strong&gt;；K8s 有状态故障排查必须按 CSI 生命周期逐段取证。&lt;/p&gt;&#xA;&lt;h2 id=&#34;预防措施&#34;&gt;&lt;a href=&#34;#%e9%a2%84%e9%98%b2%e6%8e%aa%e6%96%bd&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;预防措施&#xD;&#xA;&lt;/h2&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;装机与基线&lt;/strong&gt;：计算节点若跑有状态负载，存储多路径与 iSCSI/FC 客户端纳入基线，开 conf 变更审计。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;发布 Checklist&lt;/strong&gt;：有状态发版前检查 CSI driver Ready、问题 &lt;code&gt;VolumeAttachment&lt;/code&gt; 清零、目标节点 multipath 健康。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;容量与超时联调&lt;/strong&gt;：存储厂商 RTO 指标 vs CSI timeout 对齐压测；故意注入 path down，验证退避而非风暴重试。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;节点池隔离&lt;/strong&gt;：数据库类 STS 与批处理/高干扰负载分池，降低“邻居作业打爆存储会话”的概率。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;演练&lt;/strong&gt;：每季度做一次“拔存储链路/杀 multipathd”演练，验证 taint、驱逐、服务降级与回切文档是否可执行。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;告警分层&lt;/strong&gt;：应用延迟 / FailedMount 次数 / VolumeAttachment 年龄 / multipath failed path 四层告警，避免只看业务红灯。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;&lt;a href=&#34;#%e6%80%bb%e7%bb%93&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;总结&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;这次故障的教训很直接：&lt;strong&gt;Pod 起不来，不一定是调度、镜像或配额；有 PVC 时优先看 VolumeAttachment 和 CSI 四段链路。&lt;/strong&gt; 表面是 &lt;code&gt;DeadlineExceeded&lt;/code&gt;，底下往往是某台节点的 iSCSI/multipath 半死不活；超时参数过紧只会让重试帮倒忙。&lt;/p&gt;&#xA;&lt;p&gt;排查顺序建议固化为：PVC Bound 了吗 → VolumeAttachment ATTACHED 了吗 → 卡在 Controller 还是 Node → 对照健康节点看 session/multipath/dmesg → 再决定 taint 止血还是调超时/修链路。有状态发布要把“存储数据面健康”写进门禁，而不是默认“节点 NotReady 才算有问题”。疏通 PVC 挂载，本质上是把 CSI 从“黑盒重试”变成“可观测、可熔断、可演练”的常规运维对象。&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
