Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
44258647
Commit
44258647
authored
May 25, 2017
by
Shyam Jeedigunta
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Migrate kubelet configmap management logic to an interface
parent
91cef78f
Hide whitespace changes
Inline
Side-by-side
Showing
28 changed files
with
270 additions
and
50 deletions
+270
-50
attach_detach_controller.go
...ontroller/volume/attachdetach/attach_detach_controller.go
+6
-0
volume_host.go
pkg/controller/volume/persistentvolume/volume_host.go
+6
-0
BUILD
pkg/kubelet/BUILD
+3
-0
BUILD
pkg/kubelet/configmap/BUILD
+35
-0
configmap_manager.go
pkg/kubelet/configmap/configmap_manager.go
+61
-0
fake_manager.go
pkg/kubelet/configmap/fake_manager.go
+40
-0
kubelet.go
pkg/kubelet/kubelet.go
+10
-4
kubelet_pods.go
pkg/kubelet/kubelet_pods.go
+2
-2
kubelet_test.go
pkg/kubelet/kubelet_test.go
+5
-2
BUILD
pkg/kubelet/pod/BUILD
+2
-0
pod_manager.go
pkg/kubelet/pod/pod_manager.go
+14
-3
pod_manager_test.go
pkg/kubelet/pod/pod_manager_test.go
+3
-1
common_test.go
pkg/kubelet/prober/common_test.go
+1
-1
worker_test.go
pkg/kubelet/prober/worker_test.go
+1
-1
runonce_test.go
pkg/kubelet/runonce_test.go
+4
-2
BUILD
pkg/kubelet/status/BUILD
+1
-0
status_manager_test.go
pkg/kubelet/status/status_manager_test.go
+2
-1
volume_host.go
pkg/kubelet/volume_host.go
+14
-6
BUILD
pkg/kubelet/volumemanager/BUILD
+1
-0
BUILD
pkg/kubelet/volumemanager/populator/BUILD
+1
-0
desired_state_of_world_populator_test.go
...anager/populator/desired_state_of_world_populator_test.go
+3
-1
volume_manager_test.go
pkg/kubelet/volumemanager/volume_manager_test.go
+3
-2
configmap.go
pkg/volume/configmap/configmap.go
+31
-15
plugins.go
pkg/volume/plugins.go
+3
-0
projected.go
pkg/volume/projected/projected.go
+9
-7
projected_test.go
pkg/volume/projected/projected_test.go
+2
-1
secret.go
pkg/volume/secret/secret.go
+1
-1
testing.go
pkg/volume/testing/testing.go
+6
-0
No files found.
pkg/controller/volume/attachdetach/attach_detach_controller.go
View file @
44258647
...
...
@@ -552,6 +552,12 @@ func (adc *attachDetachController) GetSecretFunc() func(namespace, name string)
}
}
func
(
adc
*
attachDetachController
)
GetConfigMapFunc
()
func
(
namespace
,
name
string
)
(
*
v1
.
ConfigMap
,
error
)
{
return
func
(
_
,
_
string
)
(
*
v1
.
ConfigMap
,
error
)
{
return
nil
,
fmt
.
Errorf
(
"GetConfigMap unsupported in attachDetachController"
)
}
}
func
(
adc
*
attachDetachController
)
addNodeToDswp
(
node
*
v1
.
Node
,
nodeName
types
.
NodeName
)
{
if
_
,
exists
:=
node
.
Annotations
[
volumehelper
.
ControllerManagedAttachAnnotation
];
exists
{
keepTerminatedPodVolumes
:=
false
...
...
pkg/controller/volume/persistentvolume/volume_host.go
View file @
44258647
...
...
@@ -87,6 +87,12 @@ func (adc *PersistentVolumeController) GetSecretFunc() func(namespace, name stri
}
}
func
(
adc
*
PersistentVolumeController
)
GetConfigMapFunc
()
func
(
namespace
,
name
string
)
(
*
v1
.
ConfigMap
,
error
)
{
return
func
(
_
,
_
string
)
(
*
v1
.
ConfigMap
,
error
)
{
return
nil
,
fmt
.
Errorf
(
"GetConfigMap unsupported in PersistentVolumeController"
)
}
}
func
(
ctrl
*
PersistentVolumeController
)
GetNodeLabels
()
(
map
[
string
]
string
,
error
)
{
return
nil
,
fmt
.
Errorf
(
"GetNodeLabels() unsupported in PersistentVolumeController"
)
}
pkg/kubelet/BUILD
View file @
44258647
...
...
@@ -57,6 +57,7 @@ go_library(
"//pkg/kubelet/certificate:go_default_library",
"//pkg/kubelet/cm:go_default_library",
"//pkg/kubelet/config:go_default_library",
"//pkg/kubelet/configmap:go_default_library",
"//pkg/kubelet/container:go_default_library",
"//pkg/kubelet/dockershim:go_default_library",
"//pkg/kubelet/dockershim/libdocker:go_default_library",
...
...
@@ -174,6 +175,7 @@ go_test(
"//pkg/kubelet/cadvisor/testing:go_default_library",
"//pkg/kubelet/cm:go_default_library",
"//pkg/kubelet/config:go_default_library",
"//pkg/kubelet/configmap:go_default_library",
"//pkg/kubelet/container:go_default_library",
"//pkg/kubelet/container/testing:go_default_library",
"//pkg/kubelet/eviction:go_default_library",
...
...
@@ -249,6 +251,7 @@ filegroup(
"//pkg/kubelet/client:all-srcs",
"//pkg/kubelet/cm:all-srcs",
"//pkg/kubelet/config:all-srcs",
"//pkg/kubelet/configmap:all-srcs",
"//pkg/kubelet/container:all-srcs",
"//pkg/kubelet/custommetrics:all-srcs",
"//pkg/kubelet/dockershim:all-srcs",
...
...
pkg/kubelet/configmap/BUILD
0 → 100644
View file @
44258647
package(default_visibility = ["//visibility:public"])
licenses(["notice"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"configmap_manager.go",
"fake_manager.go",
],
tags = ["automanaged"],
deps = [
"//pkg/api/v1:go_default_library",
"//pkg/client/clientset_generated/clientset:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
)
pkg/kubelet/configmap/configmap_manager.go
0 → 100644
View file @
44258647
/*
Copyright 2017 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package
configmap
import
(
"time"
"k8s.io/kubernetes/pkg/api/v1"
clientset
"k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
)
type
Manager
interface
{
// Get configmap by configmap namespace and name.
GetConfigMap
(
namespace
,
name
string
)
(
*
v1
.
ConfigMap
,
error
)
// WARNING: Register/UnregisterPod functions should be efficient,
// i.e. should not block on network operations.
// RegisterPod registers all configmaps from a given pod.
RegisterPod
(
pod
*
v1
.
Pod
)
// UnregisterPod unregisters configmaps from a given pod that are not
// used by any other registered pod.
UnregisterPod
(
pod
*
v1
.
Pod
)
}
// simpleConfigMapManager implements ConfigMap Manager interface with
// simple operations to apiserver.
type
simpleConfigMapManager
struct
{
kubeClient
clientset
.
Interface
}
func
NewSimpleConfigMapManager
(
kubeClient
clientset
.
Interface
)
Manager
{
return
&
simpleConfigMapManager
{
kubeClient
:
kubeClient
}
}
func
(
s
*
simpleConfigMapManager
)
GetConfigMap
(
namespace
,
name
string
)
(
*
v1
.
ConfigMap
,
error
)
{
return
s
.
kubeClient
.
Core
()
.
ConfigMaps
(
namespace
)
.
Get
(
name
,
metav1
.
GetOptions
{})
}
func
(
s
*
simpleConfigMapManager
)
RegisterPod
(
pod
*
v1
.
Pod
)
{
}
func
(
s
*
simpleConfigMapManager
)
UnregisterPod
(
pod
*
v1
.
Pod
)
{
}
pkg/kubelet/configmap/fake_manager.go
0 → 100644
View file @
44258647
/*
Copyright 2017 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package
configmap
import
(
"k8s.io/kubernetes/pkg/api/v1"
)
// fakeManager implements Manager interface for testing purposes.
// simple operations to apiserver.
type
fakeManager
struct
{
}
func
NewFakeManager
()
Manager
{
return
&
fakeManager
{}
}
func
(
s
*
fakeManager
)
GetConfigMap
(
namespace
,
name
string
)
(
*
v1
.
ConfigMap
,
error
)
{
return
nil
,
nil
}
func
(
s
*
fakeManager
)
RegisterPod
(
pod
*
v1
.
Pod
)
{
}
func
(
s
*
fakeManager
)
UnregisterPod
(
pod
*
v1
.
Pod
)
{
}
pkg/kubelet/kubelet.go
View file @
44258647
...
...
@@ -68,6 +68,7 @@ import (
"k8s.io/kubernetes/pkg/kubelet/certificate"
"k8s.io/kubernetes/pkg/kubelet/cm"
"k8s.io/kubernetes/pkg/kubelet/config"
"k8s.io/kubernetes/pkg/kubelet/configmap"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
"k8s.io/kubernetes/pkg/kubelet/dockershim"
"k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker"
...
...
@@ -487,9 +488,11 @@ func NewMainKubelet(kubeCfg *componentconfig.KubeletConfiguration, kubeDeps *Kub
secretManager
:=
secret
.
NewCachingSecretManager
(
kubeDeps
.
KubeClient
,
secret
.
GetObjectTTLFromNodeFunc
(
klet
.
GetNode
))
klet
.
secretManager
=
secretManager
configMapManager
:=
configmap
.
NewSimpleConfigMapManager
(
kubeDeps
.
KubeClient
)
klet
.
configMapManager
=
configMapManager
if
klet
.
experimentalHostUserNamespaceDefaulting
{
glog
.
Infof
(
"Experimental host user namespace defaulting is enabled."
)
}
...
...
@@ -518,8 +521,8 @@ func NewMainKubelet(kubeCfg *componentconfig.KubeletConfiguration, kubeDeps *Kub
klet
.
livenessManager
=
proberesults
.
NewManager
()
klet
.
podCache
=
kubecontainer
.
NewCache
()
// podManager is also responsible for keeping secretManager contents up-to-date.
klet
.
podManager
=
kubepod
.
NewBasicPodManager
(
kubepod
.
NewBasicMirrorClient
(
klet
.
kubeClient
),
secretManager
)
// podManager is also responsible for keeping secretManager
and configMapManager
contents up-to-date.
klet
.
podManager
=
kubepod
.
NewBasicPodManager
(
kubepod
.
NewBasicMirrorClient
(
klet
.
kubeClient
),
secretManager
,
configMapManager
)
if
kubeCfg
.
RemoteRuntimeEndpoint
!=
""
{
// kubeCfg.RemoteImageEndpoint is same as kubeCfg.RemoteRuntimeEndpoint if not explicitly specified
...
...
@@ -717,7 +720,7 @@ func NewMainKubelet(kubeCfg *componentconfig.KubeletConfiguration, kubeDeps *Kub
kubeDeps
.
Recorder
)
klet
.
volumePluginMgr
,
err
=
NewInitializedVolumePluginMgr
(
klet
,
secretManager
,
kubeDeps
.
VolumePlugins
)
NewInitializedVolumePluginMgr
(
klet
,
secretManager
,
configMapManager
,
kubeDeps
.
VolumePlugins
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -917,6 +920,9 @@ type Kubelet struct {
// Secret manager.
secretManager
secret
.
Manager
// ConfigMap manager.
configMapManager
configmap
.
Manager
// Cached MachineInfo returned by cadvisor.
machineInfo
*
cadvisorapi
.
MachineInfo
...
...
pkg/kubelet/kubelet_pods.go
View file @
44258647
...
...
@@ -446,7 +446,7 @@ func (kl *Kubelet) makeEnvironmentVariables(pod *v1.Pod, container *v1.Container
return
result
,
fmt
.
Errorf
(
"Couldn't get configMap %v/%v, no kubeClient defined"
,
pod
.
Namespace
,
name
)
}
optional
:=
cm
.
Optional
!=
nil
&&
*
cm
.
Optional
configMap
,
err
=
kl
.
kubeClient
.
Core
()
.
ConfigMaps
(
pod
.
Namespace
)
.
Get
(
name
,
metav1
.
GetOptions
{}
)
configMap
,
err
=
kl
.
configMapManager
.
GetConfigMap
(
pod
.
Namespace
,
name
)
if
err
!=
nil
{
if
errors
.
IsNotFound
(
err
)
&&
optional
{
// ignore error when marked optional
...
...
@@ -554,7 +554,7 @@ func (kl *Kubelet) makeEnvironmentVariables(pod *v1.Pod, container *v1.Container
if
kl
.
kubeClient
==
nil
{
return
result
,
fmt
.
Errorf
(
"Couldn't get configMap %v/%v, no kubeClient defined"
,
pod
.
Namespace
,
name
)
}
configMap
,
err
=
kl
.
kubeClient
.
Core
()
.
ConfigMaps
(
pod
.
Namespace
)
.
Get
(
name
,
metav1
.
GetOptions
{}
)
configMap
,
err
=
kl
.
configMapManager
.
GetConfigMap
(
pod
.
Namespace
,
name
)
if
err
!=
nil
{
if
errors
.
IsNotFound
(
err
)
&&
optional
{
// ignore error when marked optional
...
...
pkg/kubelet/kubelet_test.go
View file @
44258647
...
...
@@ -46,6 +46,7 @@ import (
cadvisortest
"k8s.io/kubernetes/pkg/kubelet/cadvisor/testing"
"k8s.io/kubernetes/pkg/kubelet/cm"
"k8s.io/kubernetes/pkg/kubelet/config"
"k8s.io/kubernetes/pkg/kubelet/configmap"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
containertest
"k8s.io/kubernetes/pkg/kubelet/container/testing"
"k8s.io/kubernetes/pkg/kubelet/eviction"
...
...
@@ -208,7 +209,9 @@ func newTestKubeletWithImageList(
fakeMirrorClient
:=
podtest
.
NewFakeMirrorClient
()
secretManager
:=
secret
.
NewSimpleSecretManager
(
kubelet
.
kubeClient
)
kubelet
.
secretManager
=
secretManager
kubelet
.
podManager
=
kubepod
.
NewBasicPodManager
(
fakeMirrorClient
,
kubelet
.
secretManager
)
configMapManager
:=
configmap
.
NewSimpleConfigMapManager
(
kubelet
.
kubeClient
)
kubelet
.
configMapManager
=
configMapManager
kubelet
.
podManager
=
kubepod
.
NewBasicPodManager
(
fakeMirrorClient
,
kubelet
.
secretManager
,
kubelet
.
configMapManager
)
kubelet
.
statusManager
=
status
.
NewManager
(
fakeKubeClient
,
kubelet
.
podManager
,
&
statustest
.
FakePodDeletionSafetyProvider
{})
diskSpaceManager
,
err
:=
newDiskSpaceManager
(
mockCadvisor
,
DiskSpacePolicy
{})
if
err
!=
nil
{
...
...
@@ -276,7 +279,7 @@ func newTestKubeletWithImageList(
plug
:=
&
volumetest
.
FakeVolumePlugin
{
PluginName
:
"fake"
,
Host
:
nil
}
kubelet
.
volumePluginMgr
,
err
=
NewInitializedVolumePluginMgr
(
kubelet
,
kubelet
.
secretManager
,
[]
volume
.
VolumePlugin
{
plug
})
NewInitializedVolumePluginMgr
(
kubelet
,
kubelet
.
secretManager
,
kubelet
.
configMapManager
,
[]
volume
.
VolumePlugin
{
plug
})
require
.
NoError
(
t
,
err
,
"Failed to initialize VolumePluginMgr"
)
kubelet
.
mounter
=
&
mount
.
FakeMounter
{}
...
...
pkg/kubelet/pod/BUILD
View file @
44258647
...
...
@@ -18,6 +18,7 @@ go_library(
deps = [
"//pkg/api/v1:go_default_library",
"//pkg/client/clientset_generated/clientset:go_default_library",
"//pkg/kubelet/configmap:go_default_library",
"//pkg/kubelet/container:go_default_library",
"//pkg/kubelet/secret:go_default_library",
"//pkg/kubelet/types:go_default_library",
...
...
@@ -38,6 +39,7 @@ go_test(
tags = ["automanaged"],
deps = [
"//pkg/api/v1:go_default_library",
"//pkg/kubelet/configmap:go_default_library",
"//pkg/kubelet/container:go_default_library",
"//pkg/kubelet/pod/testing:go_default_library",
"//pkg/kubelet/secret:go_default_library",
...
...
pkg/kubelet/pod/pod_manager.go
View file @
44258647
...
...
@@ -21,6 +21,7 @@ import (
"k8s.io/apimachinery/pkg/types"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/kubelet/configmap"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
"k8s.io/kubernetes/pkg/kubelet/secret"
)
...
...
@@ -113,17 +114,19 @@ type basicManager struct {
// Mirror pod UID to pod UID map.
translationByUID
map
[
types
.
UID
]
types
.
UID
// basicManager is keeping secretManager up-to-date.
secretManager
secret
.
Manager
// basicManager is keeping secretManager and configMapManager up-to-date.
secretManager
secret
.
Manager
configMapManager
configmap
.
Manager
// A mirror pod client to create/delete mirror pods.
MirrorClient
}
// NewBasicPodManager returns a functional Manager.
func
NewBasicPodManager
(
client
MirrorClient
,
secretManager
secret
.
Manager
)
Manager
{
func
NewBasicPodManager
(
client
MirrorClient
,
secretManager
secret
.
Manager
,
configMapManager
configmap
.
Manager
)
Manager
{
pm
:=
&
basicManager
{}
pm
.
secretManager
=
secretManager
pm
.
configMapManager
=
configMapManager
pm
.
MirrorClient
=
client
pm
.
SetPods
(
nil
)
return
pm
...
...
@@ -163,6 +166,11 @@ func (pm *basicManager) updatePodsInternal(pods ...*v1.Pod) {
// not register pod, as it doesn't really matter.
pm
.
secretManager
.
RegisterPod
(
pod
)
}
if
pm
.
configMapManager
!=
nil
{
// TODO: Consider detecting only status update and in such case do
// not register pod, as it doesn't really matter.
pm
.
configMapManager
.
RegisterPod
(
pod
)
}
podFullName
:=
kubecontainer
.
GetPodFullName
(
pod
)
if
IsMirrorPod
(
pod
)
{
pm
.
mirrorPodByUID
[
pod
.
UID
]
=
pod
...
...
@@ -186,6 +194,9 @@ func (pm *basicManager) DeletePod(pod *v1.Pod) {
if
pm
.
secretManager
!=
nil
{
pm
.
secretManager
.
UnregisterPod
(
pod
)
}
if
pm
.
configMapManager
!=
nil
{
pm
.
configMapManager
.
UnregisterPod
(
pod
)
}
podFullName
:=
kubecontainer
.
GetPodFullName
(
pod
)
if
IsMirrorPod
(
pod
)
{
delete
(
pm
.
mirrorPodByUID
,
pod
.
UID
)
...
...
pkg/kubelet/pod/pod_manager_test.go
View file @
44258647
...
...
@@ -23,6 +23,7 @@ import (
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/kubelet/configmap"
podtest
"k8s.io/kubernetes/pkg/kubelet/pod/testing"
"k8s.io/kubernetes/pkg/kubelet/secret"
kubetypes
"k8s.io/kubernetes/pkg/kubelet/types"
...
...
@@ -32,7 +33,8 @@ import (
func
newTestManager
()
(
*
basicManager
,
*
podtest
.
FakeMirrorClient
)
{
fakeMirrorClient
:=
podtest
.
NewFakeMirrorClient
()
secretManager
:=
secret
.
NewFakeManager
()
manager
:=
NewBasicPodManager
(
fakeMirrorClient
,
secretManager
)
.
(
*
basicManager
)
configMapManager
:=
configmap
.
NewFakeManager
()
manager
:=
NewBasicPodManager
(
fakeMirrorClient
,
secretManager
,
configMapManager
)
.
(
*
basicManager
)
return
manager
,
fakeMirrorClient
}
...
...
pkg/kubelet/prober/common_test.go
View file @
44258647
...
...
@@ -99,7 +99,7 @@ func setTestProbe(pod *v1.Pod, probeType probeType, probeSpec v1.Probe) {
func
newTestManager
()
*
manager
{
refManager
:=
kubecontainer
.
NewRefManager
()
refManager
.
SetRef
(
testContainerID
,
&
v1
.
ObjectReference
{})
// Suppress prober warnings.
podManager
:=
kubepod
.
NewBasicPodManager
(
nil
,
nil
)
podManager
:=
kubepod
.
NewBasicPodManager
(
nil
,
nil
,
nil
)
// Add test pod to pod manager, so that status manager can get the pod from pod manager if needed.
podManager
.
AddPod
(
getTestPod
())
m
:=
NewManager
(
...
...
pkg/kubelet/prober/worker_test.go
View file @
44258647
...
...
@@ -118,7 +118,7 @@ func TestDoProbe(t *testing.T) {
}
// Clean up.
m
.
statusManager
=
status
.
NewManager
(
&
fake
.
Clientset
{},
kubepod
.
NewBasicPodManager
(
nil
,
nil
),
&
statustest
.
FakePodDeletionSafetyProvider
{})
m
.
statusManager
=
status
.
NewManager
(
&
fake
.
Clientset
{},
kubepod
.
NewBasicPodManager
(
nil
,
nil
,
nil
),
&
statustest
.
FakePodDeletionSafetyProvider
{})
resultsManager
(
m
,
probeType
)
.
Remove
(
testContainerID
)
}
}
...
...
pkg/kubelet/runonce_test.go
View file @
44258647
...
...
@@ -34,6 +34,7 @@ import (
"k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake"
cadvisortest
"k8s.io/kubernetes/pkg/kubelet/cadvisor/testing"
"k8s.io/kubernetes/pkg/kubelet/cm"
"k8s.io/kubernetes/pkg/kubelet/configmap"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
containertest
"k8s.io/kubernetes/pkg/kubelet/container/testing"
"k8s.io/kubernetes/pkg/kubelet/eviction"
...
...
@@ -63,8 +64,9 @@ func TestRunOnce(t *testing.T) {
Capacity
:
10
*
mb
,
},
nil
)
fakeSecretManager
:=
secret
.
NewFakeManager
()
fakeConfigMapManager
:=
configmap
.
NewFakeManager
()
podManager
:=
kubepod
.
NewBasicPodManager
(
podtest
.
NewFakeMirrorClient
(),
fakeSecretManager
)
podtest
.
NewFakeMirrorClient
(),
fakeSecretManager
,
fakeConfigMapManager
)
diskSpaceManager
,
_
:=
newDiskSpaceManager
(
cadvisor
,
DiskSpacePolicy
{})
fakeRuntime
:=
&
containertest
.
FakeRuntime
{}
basePath
,
err
:=
utiltesting
.
MkTmpdir
(
"kubelet"
)
...
...
@@ -93,7 +95,7 @@ func TestRunOnce(t *testing.T) {
plug
:=
&
volumetest
.
FakeVolumePlugin
{
PluginName
:
"fake"
,
Host
:
nil
}
kb
.
volumePluginMgr
,
err
=
NewInitializedVolumePluginMgr
(
kb
,
fakeSecretManager
,
[]
volume
.
VolumePlugin
{
plug
})
NewInitializedVolumePluginMgr
(
kb
,
fakeSecretManager
,
fakeConfigMapManager
,
[]
volume
.
VolumePlugin
{
plug
})
if
err
!=
nil
{
t
.
Fatalf
(
"failed to initialize VolumePluginMgr: %v"
,
err
)
}
...
...
pkg/kubelet/status/BUILD
View file @
44258647
...
...
@@ -48,6 +48,7 @@ go_test(
"//pkg/api/v1/pod:go_default_library",
"//pkg/client/clientset_generated/clientset:go_default_library",
"//pkg/client/clientset_generated/clientset/fake:go_default_library",
"//pkg/kubelet/configmap:go_default_library",
"//pkg/kubelet/container:go_default_library",
"//pkg/kubelet/pod:go_default_library",
"//pkg/kubelet/pod/testing:go_default_library",
...
...
pkg/kubelet/status/status_manager_test.go
View file @
44258647
...
...
@@ -36,6 +36,7 @@ import (
podutil
"k8s.io/kubernetes/pkg/api/v1/pod"
"k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
"k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake"
kubeconfigmap
"k8s.io/kubernetes/pkg/kubelet/configmap"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
kubepod
"k8s.io/kubernetes/pkg/kubelet/pod"
podtest
"k8s.io/kubernetes/pkg/kubelet/pod/testing"
...
...
@@ -74,7 +75,7 @@ func (m *manager) testSyncBatch() {
}
func
newTestManager
(
kubeClient
clientset
.
Interface
)
*
manager
{
podManager
:=
kubepod
.
NewBasicPodManager
(
podtest
.
NewFakeMirrorClient
(),
kubesecret
.
NewFakeManager
())
podManager
:=
kubepod
.
NewBasicPodManager
(
podtest
.
NewFakeMirrorClient
(),
kubesecret
.
NewFakeManager
()
,
kubeconfigmap
.
NewFakeManager
()
)
podManager
.
AddPod
(
getTestPod
())
return
NewManager
(
kubeClient
,
podManager
,
&
statustest
.
FakePodDeletionSafetyProvider
{})
.
(
*
manager
)
}
...
...
pkg/kubelet/volume_host.go
View file @
44258647
...
...
@@ -24,6 +24,7 @@ import (
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
"k8s.io/kubernetes/pkg/cloudprovider"
"k8s.io/kubernetes/pkg/kubelet/configmap"
"k8s.io/kubernetes/pkg/kubelet/secret"
"k8s.io/kubernetes/pkg/util/io"
"k8s.io/kubernetes/pkg/util/mount"
...
...
@@ -39,11 +40,13 @@ import (
func
NewInitializedVolumePluginMgr
(
kubelet
*
Kubelet
,
secretManager
secret
.
Manager
,
configMapManager
configmap
.
Manager
,
plugins
[]
volume
.
VolumePlugin
)
(
*
volume
.
VolumePluginMgr
,
error
)
{
kvh
:=
&
kubeletVolumeHost
{
kubelet
:
kubelet
,
volumePluginMgr
:
volume
.
VolumePluginMgr
{},
secretManager
:
secretManager
,
kubelet
:
kubelet
,
volumePluginMgr
:
volume
.
VolumePluginMgr
{},
secretManager
:
secretManager
,
configMapManager
:
configMapManager
,
}
if
err
:=
kvh
.
volumePluginMgr
.
InitPlugins
(
plugins
,
kvh
);
err
!=
nil
{
...
...
@@ -63,9 +66,10 @@ func (kvh *kubeletVolumeHost) GetPluginDir(pluginName string) string {
}
type
kubeletVolumeHost
struct
{
kubelet
*
Kubelet
volumePluginMgr
volume
.
VolumePluginMgr
secretManager
secret
.
Manager
kubelet
*
Kubelet
volumePluginMgr
volume
.
VolumePluginMgr
secretManager
secret
.
Manager
configMapManager
configmap
.
Manager
}
func
(
kvh
*
kubeletVolumeHost
)
GetPodVolumeDir
(
podUID
types
.
UID
,
pluginName
string
,
volumeName
string
)
string
{
...
...
@@ -141,6 +145,10 @@ func (kvh *kubeletVolumeHost) GetSecretFunc() func(namespace, name string) (*v1.
return
kvh
.
secretManager
.
GetSecret
}
func
(
kvh
*
kubeletVolumeHost
)
GetConfigMapFunc
()
func
(
namespace
,
name
string
)
(
*
v1
.
ConfigMap
,
error
)
{
return
kvh
.
configMapManager
.
GetConfigMap
}
func
(
kvh
*
kubeletVolumeHost
)
GetNodeLabels
()
(
map
[
string
]
string
,
error
)
{
node
,
err
:=
kvh
.
kubelet
.
GetNode
()
if
err
!=
nil
{
...
...
pkg/kubelet/volumemanager/BUILD
View file @
44258647
...
...
@@ -47,6 +47,7 @@ go_test(
"//pkg/client/clientset_generated/clientset:go_default_library",
"//pkg/client/clientset_generated/clientset/fake:go_default_library",
"//pkg/kubelet/config:go_default_library",
"//pkg/kubelet/configmap:go_default_library",
"//pkg/kubelet/container/testing:go_default_library",
"//pkg/kubelet/pod:go_default_library",
"//pkg/kubelet/pod/testing:go_default_library",
...
...
pkg/kubelet/volumemanager/populator/BUILD
View file @
44258647
...
...
@@ -53,6 +53,7 @@ go_test(
deps = [
"//pkg/api/v1:go_default_library",
"//pkg/client/clientset_generated/clientset/fake:go_default_library",
"//pkg/kubelet/configmap:go_default_library",
"//pkg/kubelet/container/testing:go_default_library",
"//pkg/kubelet/pod:go_default_library",
"//pkg/kubelet/pod/testing:go_default_library",
...
...
pkg/kubelet/volumemanager/populator/desired_state_of_world_populator_test.go
View file @
44258647
...
...
@@ -23,6 +23,7 @@ import (
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake"
"k8s.io/kubernetes/pkg/kubelet/configmap"
containertest
"k8s.io/kubernetes/pkg/kubelet/container/testing"
kubepod
"k8s.io/kubernetes/pkg/kubelet/pod"
podtest
"k8s.io/kubernetes/pkg/kubelet/pod/testing"
...
...
@@ -40,8 +41,9 @@ func TestFindAndAddNewPods_FindAndRemoveDeletedPods(t *testing.T) {
fakeClient
:=
&
fake
.
Clientset
{}
fakeSecretManager
:=
secret
.
NewFakeManager
()
fakeConfigMapManager
:=
configmap
.
NewFakeManager
()
fakePodManager
:=
kubepod
.
NewBasicPodManager
(
podtest
.
NewFakeMirrorClient
(),
fakeSecretManager
)
podtest
.
NewFakeMirrorClient
(),
fakeSecretManager
,
fakeConfigMapManager
)
fakesDSW
:=
cache
.
NewDesiredStateOfWorld
(
fakeVolumePluginMgr
)
fakeRuntime
:=
&
containertest
.
FakeRuntime
{}
...
...
pkg/kubelet/volumemanager/volume_manager_test.go
View file @
44258647
...
...
@@ -32,6 +32,7 @@ import (
"k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
"k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake"
"k8s.io/kubernetes/pkg/kubelet/config"
"k8s.io/kubernetes/pkg/kubelet/configmap"
containertest
"k8s.io/kubernetes/pkg/kubelet/container/testing"
"k8s.io/kubernetes/pkg/kubelet/pod"
kubepod
"k8s.io/kubernetes/pkg/kubelet/pod"
...
...
@@ -56,7 +57,7 @@ func TestGetMountedVolumesForPodAndGetVolumesInUse(t *testing.T) {
t
.
Fatalf
(
"can't make a temp dir: %v"
,
err
)
}
defer
os
.
RemoveAll
(
tmpDir
)
podManager
:=
kubepod
.
NewBasicPodManager
(
podtest
.
NewFakeMirrorClient
(),
secret
.
NewFakeManager
())
podManager
:=
kubepod
.
NewBasicPodManager
(
podtest
.
NewFakeMirrorClient
(),
secret
.
NewFakeManager
()
,
configmap
.
NewFakeManager
()
)
node
,
pod
,
pv
,
claim
:=
createObjects
()
kubeClient
:=
fake
.
NewSimpleClientset
(
node
,
pod
,
pv
,
claim
)
...
...
@@ -101,7 +102,7 @@ func TestGetExtraSupplementalGroupsForPod(t *testing.T) {
t
.
Fatalf
(
"can't make a temp dir: %v"
,
err
)
}
defer
os
.
RemoveAll
(
tmpDir
)
podManager
:=
kubepod
.
NewBasicPodManager
(
podtest
.
NewFakeMirrorClient
(),
secret
.
NewFakeManager
())
podManager
:=
kubepod
.
NewBasicPodManager
(
podtest
.
NewFakeMirrorClient
(),
secret
.
NewFakeManager
()
,
configmap
.
NewFakeManager
()
)
node
,
pod
,
_
,
claim
:=
createObjects
()
...
...
pkg/volume/configmap/configmap.go
View file @
44258647
...
...
@@ -42,13 +42,15 @@ const (
// configMapPlugin implements the VolumePlugin interface.
type
configMapPlugin
struct
{
host
volume
.
VolumeHost
host
volume
.
VolumeHost
getConfigMap
func
(
namespace
,
name
string
)
(
*
v1
.
ConfigMap
,
error
)
}
var
_
volume
.
VolumePlugin
=
&
configMapPlugin
{}
func
(
plugin
*
configMapPlugin
)
Init
(
host
volume
.
VolumeHost
)
error
{
plugin
.
host
=
host
plugin
.
getConfigMap
=
host
.
GetConfigMapFunc
()
return
nil
}
...
...
@@ -86,14 +88,32 @@ func (plugin *configMapPlugin) SupportsBulkVolumeVerification() bool {
func
(
plugin
*
configMapPlugin
)
NewMounter
(
spec
*
volume
.
Spec
,
pod
*
v1
.
Pod
,
opts
volume
.
VolumeOptions
)
(
volume
.
Mounter
,
error
)
{
return
&
configMapVolumeMounter
{
configMapVolume
:
&
configMapVolume
{
spec
.
Name
(),
pod
.
UID
,
plugin
,
plugin
.
host
.
GetMounter
(),
plugin
.
host
.
GetWriter
(),
volume
.
MetricsNil
{}},
source
:
*
spec
.
Volume
.
ConfigMap
,
pod
:
*
pod
,
opts
:
&
opts
},
nil
configMapVolume
:
&
configMapVolume
{
spec
.
Name
(),
pod
.
UID
,
plugin
,
plugin
.
host
.
GetMounter
(),
plugin
.
host
.
GetWriter
(),
volume
.
MetricsNil
{},
},
source
:
*
spec
.
Volume
.
ConfigMap
,
pod
:
*
pod
,
opts
:
&
opts
,
getConfigMap
:
plugin
.
getConfigMap
,
},
nil
}
func
(
plugin
*
configMapPlugin
)
NewUnmounter
(
volName
string
,
podUID
types
.
UID
)
(
volume
.
Unmounter
,
error
)
{
return
&
configMapVolumeUnmounter
{
&
configMapVolume
{
volName
,
podUID
,
plugin
,
plugin
.
host
.
GetMounter
(),
plugin
.
host
.
GetWriter
(),
volume
.
MetricsNil
{}}},
nil
return
&
configMapVolumeUnmounter
{
&
configMapVolume
{
volName
,
podUID
,
plugin
,
plugin
.
host
.
GetMounter
(),
plugin
.
host
.
GetWriter
(),
volume
.
MetricsNil
{},
},
},
nil
}
func
(
plugin
*
configMapPlugin
)
ConstructVolumeSpec
(
volumeName
,
mountPath
string
)
(
*
volume
.
Spec
,
error
)
{
...
...
@@ -126,9 +146,10 @@ func (sv *configMapVolume) GetPath() string {
type
configMapVolumeMounter
struct
{
*
configMapVolume
source
v1
.
ConfigMapVolumeSource
pod
v1
.
Pod
opts
*
volume
.
VolumeOptions
source
v1
.
ConfigMapVolumeSource
pod
v1
.
Pod
opts
*
volume
.
VolumeOptions
getConfigMap
func
(
namespace
,
name
string
)
(
*
v1
.
ConfigMap
,
error
)
}
var
_
volume
.
Mounter
=
&
configMapVolumeMounter
{}
...
...
@@ -174,13 +195,8 @@ func (b *configMapVolumeMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID)
return
err
}
kubeClient
:=
b
.
plugin
.
host
.
GetKubeClient
()
if
kubeClient
==
nil
{
return
fmt
.
Errorf
(
"Cannot setup configMap volume %v because kube client is not configured"
,
b
.
volName
)
}
optional
:=
b
.
source
.
Optional
!=
nil
&&
*
b
.
source
.
Optional
configMap
,
err
:=
kubeClient
.
Core
()
.
ConfigMaps
(
b
.
pod
.
Namespace
)
.
Get
(
b
.
source
.
Name
,
metav1
.
GetOptions
{}
)
configMap
,
err
:=
b
.
getConfigMap
(
b
.
pod
.
Namespace
,
b
.
source
.
Name
)
if
err
!=
nil
{
if
!
(
errors
.
IsNotFound
(
err
)
&&
optional
)
{
glog
.
Errorf
(
"Couldn't get configMap %v/%v: %v"
,
b
.
pod
.
Namespace
,
b
.
source
.
Name
,
err
)
...
...
pkg/volume/plugins.go
View file @
44258647
...
...
@@ -233,6 +233,9 @@ type VolumeHost interface {
// Returns a function that returns a secret.
GetSecretFunc
()
func
(
namespace
,
name
string
)
(
*
v1
.
Secret
,
error
)
// Returns a function that returns a configmap.
GetConfigMapFunc
()
func
(
namespace
,
name
string
)
(
*
v1
.
ConfigMap
,
error
)
// Returns the labels on the node
GetNodeLabels
()
(
map
[
string
]
string
,
error
)
}
...
...
pkg/volume/projected/projected.go
View file @
44258647
...
...
@@ -45,8 +45,9 @@ const (
)
type
projectedPlugin
struct
{
host
volume
.
VolumeHost
getSecret
func
(
namespace
,
name
string
)
(
*
v1
.
Secret
,
error
)
host
volume
.
VolumeHost
getSecret
func
(
namespace
,
name
string
)
(
*
v1
.
Secret
,
error
)
getConfigMap
func
(
namespace
,
name
string
)
(
*
v1
.
ConfigMap
,
error
)
}
var
_
volume
.
VolumePlugin
=
&
projectedPlugin
{}
...
...
@@ -68,6 +69,7 @@ func getPath(uid types.UID, volName string, host volume.VolumeHost) string {
func
(
plugin
*
projectedPlugin
)
Init
(
host
volume
.
VolumeHost
)
error
{
plugin
.
host
=
host
plugin
.
getSecret
=
host
.
GetSecretFunc
()
plugin
.
getConfigMap
=
host
.
GetConfigMapFunc
()
return
nil
}
...
...
@@ -235,10 +237,10 @@ func (s *projectedVolumeMounter) collectData() (map[string]volumeutil.FileProjec
secretapi
,
err
:=
s
.
plugin
.
getSecret
(
s
.
pod
.
Namespace
,
source
.
Secret
.
Name
)
if
err
!=
nil
{
if
!
(
errors
.
IsNotFound
(
err
)
&&
optional
)
{
glog
.
Errorf
(
"Couldn't get secret %v/%v
"
,
s
.
pod
.
Namespace
,
source
.
Secret
.
Name
)
glog
.
Errorf
(
"Couldn't get secret %v/%v
: %v"
,
s
.
pod
.
Namespace
,
source
.
Secret
.
Name
,
err
)
errlist
=
append
(
errlist
,
err
)
continue
}
secretapi
=
&
v1
.
Secret
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Namespace
:
s
.
pod
.
Namespace
,
...
...
@@ -248,17 +250,16 @@ func (s *projectedVolumeMounter) collectData() (map[string]volumeutil.FileProjec
}
secretPayload
,
err
:=
secret
.
MakePayload
(
source
.
Secret
.
Items
,
secretapi
,
s
.
source
.
DefaultMode
,
optional
)
if
err
!=
nil
{
glog
.
Errorf
(
"Couldn't get secret %v/%v: %v"
,
s
.
pod
.
Namespace
,
source
.
Secret
.
Name
,
err
)
glog
.
Errorf
(
"Couldn't get secret
payload
%v/%v: %v"
,
s
.
pod
.
Namespace
,
source
.
Secret
.
Name
,
err
)
errlist
=
append
(
errlist
,
err
)
continue
}
for
k
,
v
:=
range
secretPayload
{
payload
[
k
]
=
v
}
}
else
if
source
.
ConfigMap
!=
nil
{
optional
:=
source
.
ConfigMap
.
Optional
!=
nil
&&
*
source
.
ConfigMap
.
Optional
configMap
,
err
:=
kubeClient
.
Core
()
.
ConfigMaps
(
s
.
pod
.
Namespace
)
.
Get
(
source
.
ConfigMap
.
Name
,
metav1
.
GetOptions
{}
)
configMap
,
err
:=
s
.
plugin
.
getConfigMap
(
s
.
pod
.
Namespace
,
source
.
ConfigMap
.
Name
)
if
err
!=
nil
{
if
!
(
errors
.
IsNotFound
(
err
)
&&
optional
)
{
glog
.
Errorf
(
"Couldn't get configMap %v/%v: %v"
,
s
.
pod
.
Namespace
,
source
.
ConfigMap
.
Name
,
err
)
...
...
@@ -274,6 +275,7 @@ func (s *projectedVolumeMounter) collectData() (map[string]volumeutil.FileProjec
}
configMapPayload
,
err
:=
configmap
.
MakePayload
(
source
.
ConfigMap
.
Items
,
configMap
,
s
.
source
.
DefaultMode
,
optional
)
if
err
!=
nil
{
glog
.
Errorf
(
"Couldn't get configMap payload %v/%v: %v"
,
s
.
pod
.
Namespace
,
source
.
ConfigMap
.
Name
,
err
)
errlist
=
append
(
errlist
,
err
)
continue
}
...
...
pkg/volume/projected/projected_test.go
View file @
44258647
...
...
@@ -505,7 +505,8 @@ func TestCollectDataWithConfigMap(t *testing.T) {
sources
:
source
.
Sources
,
podUID
:
pod
.
UID
,
plugin
:
&
projectedPlugin
{
host
:
host
,
host
:
host
,
getConfigMap
:
host
.
GetConfigMapFunc
(),
},
},
source
:
*
source
,
...
...
pkg/volume/secret/secret.go
View file @
44258647
...
...
@@ -198,7 +198,7 @@ func (b *secretVolumeMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) er
secret
,
err
:=
b
.
getSecret
(
b
.
pod
.
Namespace
,
b
.
source
.
SecretName
)
if
err
!=
nil
{
if
!
(
errors
.
IsNotFound
(
err
)
&&
optional
)
{
glog
.
Errorf
(
"Couldn't get secret %v/%v
"
,
b
.
pod
.
Namespace
,
b
.
source
.
SecretName
)
glog
.
Errorf
(
"Couldn't get secret %v/%v
: %v"
,
b
.
pod
.
Namespace
,
b
.
source
.
SecretName
,
err
)
return
err
}
secret
=
&
v1
.
Secret
{
...
...
pkg/volume/testing/testing.go
View file @
44258647
...
...
@@ -134,6 +134,12 @@ func (f *fakeVolumeHost) GetSecretFunc() func(namespace, name string) (*v1.Secre
}
}
func
(
f
*
fakeVolumeHost
)
GetConfigMapFunc
()
func
(
namespace
,
name
string
)
(
*
v1
.
ConfigMap
,
error
)
{
return
func
(
namespace
,
name
string
)
(
*
v1
.
ConfigMap
,
error
)
{
return
f
.
kubeClient
.
Core
()
.
ConfigMaps
(
namespace
)
.
Get
(
name
,
metav1
.
GetOptions
{})
}
}
func
(
f
*
fakeVolumeHost
)
GetNodeLabels
()
(
map
[
string
]
string
,
error
)
{
return
map
[
string
]
string
{
"test-label"
:
"test-value"
},
nil
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment