背景:
ACK1.16叢集更新到1.18版本時,CSI Block Volume出現一個不相容的問題需要處理;
即:需要将1.16版本的節點(Kubelet)上使用Block Volume的Pod先遷移到1.18版本的節點上,然後再更新1.16版本節點;
什麼是Block Volume:
https://kubernetes.io/zh/docs/concepts/storage/persistent-volumes/#raw-block-volume-support原因:
Kubernetes在1.17版本中對Block Volume的GlobalPath目錄結構做了修改,這樣就導緻在1.16版本挂載的Block Volume在1.18版本上無法識别。
是以需要遵循:在一個版本挂載的Block Volume必須在相同版本上進行解除安裝;問題詳見:
https://v1-17.docs.kubernetes.io/docs/setup/release/notes/#storage https://github.com/kubernetes/kubernetes/pull/74026ACK解決方案:
ACK在1.18 Kubernetes(kubelet)做了相容,即讓1.18版本kubelet在解除安裝block volume時,也認識1.16版本的目錄結構;
但此問題在不同場景的行為有差別,目前對以下場景具有不同的相容性。
-
相容直接更新:
以下場景在更新1.18叢集,可以直接更新:
通過StatefulSet部署的應用挂載了Block Volume,
通過單個Pod部署的應用挂載了Block Volume,
-
不相容直接更新:
以下場景還不相容,您更新時需要遵循社群的Drain方案,進行排水或者先将挂載Block Volume的pod停掉:
單個Block Volume被同一個節點的多個Pod同時挂載的場景;
通過Deployment部署pod,并挂載了Block Volume;
更新注意:
對于不相容的場景,您不要對進群進行更新,除非使用社群排水方案,或者聯系我們一起看一下具體場景并給出更新方案;