Unverified Commit 8475a921 authored by Kubernetes Submit Queue's avatar Kubernetes Submit Queue Committed by GitHub

Merge pull request #56726 from vmware/issue_390

Automatic merge from submit-queue (batch tested with PRs 56639, 56746, 56715, 56673, 56726). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Fix issue #390 **What this PR does / why we need it**: When VM node is removed from vSphere Inventory, the corresponding Kubernetes node is unregistered and removed from registeredNodes cache in nodemanager. However, it is not removed from the other node info cache in nodemanager. The fix is to update the other cache accordingly. **Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: Fixes https://github.com/vmware/kubernetes/issues/390 **Special notes for your reviewer**: Internally review PR here: https://github.com/vmware/kubernetes/pull/402 **Release note**: ``` NONE ``` Testing Done: 1. Removed the node VM from vSphere inventory. 2. Create storageclass and pvc to provision volume dynamically
parents 6541b1ae ecdb47a4
...@@ -18,13 +18,14 @@ package vsphere ...@@ -18,13 +18,14 @@ package vsphere
import ( import (
"fmt" "fmt"
"strings"
"sync"
"github.com/golang/glog" "github.com/golang/glog"
"golang.org/x/net/context" "golang.org/x/net/context"
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
k8stypes "k8s.io/apimachinery/pkg/types" k8stypes "k8s.io/apimachinery/pkg/types"
"k8s.io/kubernetes/pkg/cloudprovider/providers/vsphere/vclib" "k8s.io/kubernetes/pkg/cloudprovider/providers/vsphere/vclib"
"strings"
"sync"
) )
// Stores info about the kubernetes node // Stores info about the kubernetes node
...@@ -241,6 +242,10 @@ func (nm *NodeManager) removeNode(node *v1.Node) { ...@@ -241,6 +242,10 @@ func (nm *NodeManager) removeNode(node *v1.Node) {
nm.registeredNodesLock.Lock() nm.registeredNodesLock.Lock()
delete(nm.registeredNodes, node.ObjectMeta.Name) delete(nm.registeredNodes, node.ObjectMeta.Name)
nm.registeredNodesLock.Unlock() nm.registeredNodesLock.Unlock()
nm.nodeInfoLock.Lock()
delete(nm.nodeInfoMap, node.ObjectMeta.Name)
nm.nodeInfoLock.Unlock()
} }
// GetNodeInfo returns a NodeInfo which datacenter, vm and vc server ip address. // GetNodeInfo returns a NodeInfo which datacenter, vm and vc server ip address.
......
...@@ -32,12 +32,13 @@ import ( ...@@ -32,12 +32,13 @@ import (
"fmt" "fmt"
"path/filepath"
"github.com/vmware/govmomi/vim25/mo" "github.com/vmware/govmomi/vim25/mo"
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
k8stypes "k8s.io/apimachinery/pkg/types" k8stypes "k8s.io/apimachinery/pkg/types"
"k8s.io/kubernetes/pkg/cloudprovider/providers/vsphere/vclib" "k8s.io/kubernetes/pkg/cloudprovider/providers/vsphere/vclib"
"k8s.io/kubernetes/pkg/cloudprovider/providers/vsphere/vclib/diskmanagers" "k8s.io/kubernetes/pkg/cloudprovider/providers/vsphere/vclib/diskmanagers"
"path/filepath"
) )
const ( const (
...@@ -199,13 +200,18 @@ func getSharedDatastoresInK8SCluster(ctx context.Context, dc *vclib.Datacenter, ...@@ -199,13 +200,18 @@ func getSharedDatastoresInK8SCluster(ctx context.Context, dc *vclib.Datacenter,
return nil, fmt.Errorf(msg) return nil, fmt.Errorf(msg)
} }
var sharedDatastores []*vclib.DatastoreInfo var sharedDatastores []*vclib.DatastoreInfo
for index, nodeVmDetail := range nodeVmDetails { for _, nodeVmDetail := range nodeVmDetails {
glog.V(9).Infof("Getting accessible datastores for node %s", nodeVmDetail.NodeName) glog.V(9).Infof("Getting accessible datastores for node %s", nodeVmDetail.NodeName)
accessibleDatastores, err := getAccessibleDatastores(ctx, &nodeVmDetail, nodeManager) accessibleDatastores, err := getAccessibleDatastores(ctx, &nodeVmDetail, nodeManager)
if err != nil { if err != nil {
if err == vclib.ErrNoVMFound {
glog.V(9).Infof("Got NoVMFound error for node %s", nodeVmDetail.NodeName)
continue
}
return nil, err return nil, err
} }
if index == 0 {
if len(sharedDatastores) == 0 {
sharedDatastores = accessibleDatastores sharedDatastores = accessibleDatastores
} else { } else {
sharedDatastores = intersect(sharedDatastores, accessibleDatastores) sharedDatastores = intersect(sharedDatastores, accessibleDatastores)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment