mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-20 02:11:09 +00:00
Fix CSI initialization conflict
CSI is used by both the kubelet and kube-controller-manager. Both components will initialize the csiPlugin with different VolumeHost objects. The csiPlugin will then assign a global variable for the node info manager. It is then possible that the kubelet gets the credentials of the kube-controller-manager and that will cause CSI to fail.
This commit is contained in:
parent
8f9550adbb
commit
d0e4aecf58
@ -256,18 +256,22 @@ func (p *csiPlugin) Init(host volume.VolumeHost) error {
|
||||
}
|
||||
|
||||
// Initializing the label management channels
|
||||
nim = nodeinfomanager.NewNodeInfoManager(host.GetNodeName(), host, migratedPlugins)
|
||||
localNim := nodeinfomanager.NewNodeInfoManager(host.GetNodeName(), host, migratedPlugins)
|
||||
|
||||
// This function prevents Kubelet from posting Ready status until CSINode
|
||||
// is both installed and initialized
|
||||
if err := initializeCSINode(host); err != nil {
|
||||
return errors.New(log("failed to initialize CSINode: %v", err))
|
||||
if err := initializeCSINode(host, localNim); err != nil {
|
||||
return errors.New(log("failed to initialize CSINodeInfo: %v", err))
|
||||
}
|
||||
|
||||
if _, ok := host.(volume.KubeletVolumeHost); ok {
|
||||
nim = localNim
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func initializeCSINode(host volume.VolumeHost) error {
|
||||
func initializeCSINode(host volume.VolumeHost, nim nodeinfomanager.Interface) error {
|
||||
kvh, ok := host.(volume.KubeletVolumeHost)
|
||||
if !ok {
|
||||
klog.V(4).Info("Cast from VolumeHost to KubeletVolumeHost failed. Skipping CSINode initialization, not running on kubelet")
|
||||
|
Loading…
Reference in New Issue
Block a user