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

Merge pull request #67145 from jiayingz/reboot-fix

Automatic merge from submit-queue. 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>. Fail container start if its requested device plugin resource is unknown. With the change, Kubelet device manager now checks whether it has cached option state for the requested device plugin resource to make sure the resource is in ready state when we start the container. **What this PR does / why we need it**: **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/kubernetes/kubernetes/issues/67107 **Special notes for your reviewer**: **Release note**: ```release-note Fail container start if its requested device plugin resource hasn't registered after Kubelet restart. ```
parents 54dbbc41 7b1ae664
...@@ -377,9 +377,7 @@ func (m *ManagerImpl) addEndpointProbeMode(resourceName string, socketPath strin ...@@ -377,9 +377,7 @@ func (m *ManagerImpl) addEndpointProbeMode(resourceName string, socketPath strin
func (m *ManagerImpl) registerEndpoint(resourceName string, options *pluginapi.DevicePluginOptions, e *endpointImpl) { func (m *ManagerImpl) registerEndpoint(resourceName string, options *pluginapi.DevicePluginOptions, e *endpointImpl) {
m.mutex.Lock() m.mutex.Lock()
defer m.mutex.Unlock() defer m.mutex.Unlock()
if options != nil { m.pluginOpts[resourceName] = options
m.pluginOpts[resourceName] = options
}
m.endpoints[resourceName] = e m.endpoints[resourceName] = e
glog.V(2).Infof("Registered endpoint %v", e) glog.V(2).Infof("Registered endpoint %v", e)
} }
...@@ -720,11 +718,8 @@ func (m *ManagerImpl) callPreStartContainerIfNeeded(podUID, contName, resource s ...@@ -720,11 +718,8 @@ func (m *ManagerImpl) callPreStartContainerIfNeeded(podUID, contName, resource s
opts, ok := m.pluginOpts[resource] opts, ok := m.pluginOpts[resource]
if !ok { if !ok {
m.mutex.Unlock() m.mutex.Unlock()
glog.V(4).Infof("Plugin options not found in cache for resource: %s. Skip PreStartContainer", resource) return fmt.Errorf("Plugin options not found in cache for resource: %s", resource)
return nil } else if opts == nil || !opts.PreStartRequired {
}
if !opts.PreStartRequired {
m.mutex.Unlock() m.mutex.Unlock()
glog.V(4).Infof("Plugin options indicate to skip PreStartContainer for resource: %s", resource) glog.V(4).Infof("Plugin options indicate to skip PreStartContainer for resource: %s", resource)
return nil return nil
......
...@@ -670,6 +670,8 @@ func TestPodContainerDeviceAllocation(t *testing.T) { ...@@ -670,6 +670,8 @@ func TestPodContainerDeviceAllocation(t *testing.T) {
defer os.RemoveAll(tmpDir) defer os.RemoveAll(tmpDir)
nodeInfo := getTestNodeInfo(v1.ResourceList{}) nodeInfo := getTestNodeInfo(v1.ResourceList{})
pluginOpts := make(map[string]*pluginapi.DevicePluginOptions) pluginOpts := make(map[string]*pluginapi.DevicePluginOptions)
pluginOpts[res1.resourceName] = nil
pluginOpts[res2.resourceName] = nil
testManager, err := getTestManager(tmpDir, podsStub.getActivePods, testResources, pluginOpts) testManager, err := getTestManager(tmpDir, podsStub.getActivePods, testResources, pluginOpts)
as.Nil(err) as.Nil(err)
...@@ -766,6 +768,8 @@ func TestInitContainerDeviceAllocation(t *testing.T) { ...@@ -766,6 +768,8 @@ func TestInitContainerDeviceAllocation(t *testing.T) {
as.Nil(err) as.Nil(err)
defer os.RemoveAll(tmpDir) defer os.RemoveAll(tmpDir)
pluginOpts := make(map[string]*pluginapi.DevicePluginOptions) pluginOpts := make(map[string]*pluginapi.DevicePluginOptions)
pluginOpts[res1.resourceName] = nil
pluginOpts[res2.resourceName] = nil
testManager, err := getTestManager(tmpDir, podsStub.getActivePods, testResources, pluginOpts) testManager, err := getTestManager(tmpDir, podsStub.getActivePods, testResources, pluginOpts)
as.Nil(err) as.Nil(err)
......
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