kubernetes/pkg/controller
Kubernetes Submit Queue b75d423979 Merge pull request #51066 from vmware/MultiAttachVolumeIssueVsphere
Automatic merge from submit-queue

Allow attach of volumes to multiple nodes for vSphere

This is a fix for issue #50944 which doesn't allow a volume to be attached to a new node after the node is powered off where the volume was previously attached.

Current behaviour:
One of the cluster worker nodes was powered off in vCenter.
Pods running on this node have been rescheduled on different nodes but got stuck in ContainerCreating. It failed to attach the volume on the new node with error "Multi-Attach error for volume pvc-xxx, Volume is already exclusively attached to one node and can't be attached to another" and hence the application running in the pod has no data available because the volume is not attached to the new node. Since the volume is still attached to powered off node, any attempt to attach the volume on the new node failed with error "Multi-Attach error". It's stuck for 6 minutes until attach/detach controller forcefully tried to detach the volume on the powered off node. After the end of 6 minutes when volume is detached on powered off node, the volume is now successfully attached on the new node and application has now the data available.

What is expected to happen:
I would want the attach/detach controller to go ahead with the attach of the volume on new node where the pod got provisioned instead of waiting for the volume to be detached on the powered off node. It is ok to eventually delete the volume on the powered off node after 6 minutes. This way the application downtime is low and pods are up as soon as possible.

The current fix ignore, vSphere volumes/persistent volume to check for multi-attach scenario in attach/detach controller.

@jingxu97 @saad-ali : Can you please take a look at it.

@tusharnt @divyenpatel @rohitjogvmw @luomiao 

```release-note
Allow attach of volumes to multiple nodes for vSphere
```
2017-08-23 14:32:31 -07:00
..
bootstrap Use buildozer to delete licenses() rules except under third_party/ 2017-08-11 09:32:39 -07:00
certificates Use buildozer to delete licenses() rules except under third_party/ 2017-08-11 09:32:39 -07:00
cloud Fix comment to more accurately 2017-08-22 22:08:46 +08:00
cronjob Make metav1.(Micro)?Time functions take pointers 2017-08-17 11:24:28 +02:00
daemon Merge pull request #50146 from gmarek/deepcopyinto 2017-08-19 11:28:15 -07:00
deployment CollisionCount should have type int32 across controllers that use it for collision avoidance 2017-08-18 10:48:12 +08:00
disruption Use buildozer to delete licenses() rules except under third_party/ 2017-08-11 09:32:39 -07:00
endpoint Fix unready endpoints bug introduced in #50934 2017-08-22 13:46:11 -06:00
garbagecollector move retry to client-go 2017-08-14 14:16:26 -07:00
history Use CollisionCount for collision avoidance in StatefulSet controller 2017-08-18 06:49:02 -07:00
job Make metav1.(Micro)?Time functions take pointers 2017-08-17 11:24:28 +02:00
namespace Use buildozer to delete licenses() rules except under third_party/ 2017-08-11 09:32:39 -07:00
node remove useless comments in node_controller.go 2017-08-14 14:16:42 +08:00
podautoscaler Use buildozer to delete licenses() rules except under third_party/ 2017-08-11 09:32:39 -07:00
podgc Make metav1.(Micro)?Time functions take pointers 2017-08-17 11:24:28 +02:00
replicaset Use buildozer to delete licenses() rules except under third_party/ 2017-08-11 09:32:39 -07:00
replication Make metav1.(Micro)?Time functions take pointers 2017-08-17 11:24:28 +02:00
resourcequota Use buildozer to delete licenses() rules except under third_party/ 2017-08-11 09:32:39 -07:00
route Use buildozer to delete licenses() rules except under third_party/ 2017-08-11 09:32:39 -07:00
service fix confusion in service_controller 2017-08-22 20:14:18 +08:00
serviceaccount Add enj as reviewer to OWNERS 2017-08-17 20:42:46 -04:00
statefulset Merge pull request #51062 from alrs/fix-statefulset-test-swallowed-errors 2017-08-22 23:14:05 -07:00
testutil Use buildozer to delete licenses() rules except under third_party/ 2017-08-11 09:32:39 -07:00
ttl Use buildozer to delete licenses() rules except under third_party/ 2017-08-11 09:32:39 -07:00
volume Merge pull request #51066 from vmware/MultiAttachVolumeIssueVsphere 2017-08-23 14:32:31 -07:00
.import-restrictions add import restrictions 2016-10-13 16:10:24 -07:00
BUILD move retry to client-go 2017-08-14 14:16:26 -07:00
client_builder.go Scripted migration from clientset_generated to client-go. 2017-07-17 15:05:37 -07:00
controller_ref_manager_test.go Merge pull request #50353 from zhangxiaoyu-zidif/Delete-redundant-expectError-for-controller-ref-test 2017-08-12 00:00:55 -07:00
controller_ref_manager.go Migrate to GetControllerOf from meta/v1 package 2017-08-06 22:41:58 +10:00
controller_utils_test.go CollisionCount should have type int32 across controllers that use it for collision avoidance 2017-08-18 10:48:12 +08:00
controller_utils.go Merge pull request #50146 from gmarek/deepcopyinto 2017-08-19 11:28:15 -07:00
doc.go Use Go canonical import paths 2016-07-16 13:48:21 -04:00
lookup_cache.go Use fnv.New32a() in hash instead adler32 2017-02-15 14:03:54 +08:00
OWNERS remove some people from OWNERS so they don't get reviews anymore 2017-07-13 10:02:21 -07:00