kubelet/dockertools: Add readinessManage/containerRefManager to dockerManager.

This can enable us to move KillContainer() to container runtime.
This commit is contained in:
Yifan Gu 2015-04-23 14:16:59 -07:00
parent fade245a44
commit e8d485a3a1
6 changed files with 41 additions and 11 deletions

View File

@ -392,7 +392,7 @@ func TestIsImagePresent(t *testing.T) {
func TestGetRunningContainers(t *testing.T) { func TestGetRunningContainers(t *testing.T) {
fakeDocker := &FakeDockerClient{Errors: make(map[string]error)} fakeDocker := &FakeDockerClient{Errors: make(map[string]error)}
fakeRecorder := &record.FakeRecorder{} fakeRecorder := &record.FakeRecorder{}
containerManager := NewDockerManager(fakeDocker, fakeRecorder, PodInfraContainerImage, 0, 0) containerManager := NewDockerManager(fakeDocker, fakeRecorder, nil, nil, PodInfraContainerImage, 0, 0)
tests := []struct { tests := []struct {
containers map[string]*docker.Container containers map[string]*docker.Container
inputIDs []string inputIDs []string
@ -657,7 +657,7 @@ func TestFindContainersByPod(t *testing.T) {
}, },
} }
fakeClient := &FakeDockerClient{} fakeClient := &FakeDockerClient{}
containerManager := NewDockerManager(fakeClient, &record.FakeRecorder{}, PodInfraContainerImage, 0, 0) containerManager := NewDockerManager(fakeClient, &record.FakeRecorder{}, nil, nil, PodInfraContainerImage, 0, 0)
for i, test := range tests { for i, test := range tests {
fakeClient.ContainerList = test.containerList fakeClient.ContainerList = test.containerList
fakeClient.ExitedContainerList = test.exitedContainerList fakeClient.ExitedContainerList = test.exitedContainerList

View File

@ -49,8 +49,11 @@ const (
// TODO: Eventually DockerManager should implement kubecontainer.Runtime // TODO: Eventually DockerManager should implement kubecontainer.Runtime
// interface, and it should also add a cache to replace dockerCache. // interface, and it should also add a cache to replace dockerCache.
type DockerManager struct { type DockerManager struct {
client DockerInterface client DockerInterface
recorder record.EventRecorder recorder record.EventRecorder
readinessManager *kubecontainer.ReadinessManager
containerRefManager *kubecontainer.RefManager
// TODO(yifan): PodInfraContainerImage can be unexported once // TODO(yifan): PodInfraContainerImage can be unexported once
// we move createPodInfraContainer into dockertools. // we move createPodInfraContainer into dockertools.
PodInfraContainerImage string PodInfraContainerImage string
@ -73,11 +76,20 @@ type DockerManager struct {
// Ensures DockerManager implements ConatinerRunner. // Ensures DockerManager implements ConatinerRunner.
var _ kubecontainer.ContainerRunner = new(DockerManager) var _ kubecontainer.ContainerRunner = new(DockerManager)
func NewDockerManager(client DockerInterface, recorder record.EventRecorder, podInfraContainerImage string, qps float32, burst int) *DockerManager { func NewDockerManager(
client DockerInterface,
recorder record.EventRecorder,
readinessManager *kubecontainer.ReadinessManager,
containerRefManager *kubecontainer.RefManager,
podInfraContainerImage string,
qps float32,
burst int) *DockerManager {
reasonCache := stringCache{cache: lru.New(maxReasonCacheEntries)} reasonCache := stringCache{cache: lru.New(maxReasonCacheEntries)}
return &DockerManager{ return &DockerManager{
client: client, client: client,
recorder: recorder, recorder: recorder,
readinessManager: readinessManager,
containerRefManager: containerRefManager,
PodInfraContainerImage: podInfraContainerImage, PodInfraContainerImage: podInfraContainerImage,
reasonCache: reasonCache, reasonCache: reasonCache,
Puller: newDockerPuller(client, qps, burst), Puller: newDockerPuller(client, qps, burst),

View File

@ -264,7 +264,17 @@ func NewMainKubelet(
return nil, fmt.Errorf("failed to initialize image manager: %v", err) return nil, fmt.Errorf("failed to initialize image manager: %v", err)
} }
statusManager := newStatusManager(kubeClient) statusManager := newStatusManager(kubeClient)
containerManager := dockertools.NewDockerManager(dockerClient, recorder, podInfraContainerImage, pullQPS, pullBurst) readinessManager := kubecontainer.NewReadinessManager()
containerRefManager := kubecontainer.NewRefManager()
containerManager := dockertools.NewDockerManager(
dockerClient,
recorder,
readinessManager,
containerRefManager,
podInfraContainerImage,
pullQPS,
pullBurst)
volumeManager := newVolumeManager() volumeManager := newVolumeManager()
klet := &Kubelet{ klet := &Kubelet{
@ -273,8 +283,8 @@ func NewMainKubelet(
kubeClient: kubeClient, kubeClient: kubeClient,
rootDirectory: rootDirectory, rootDirectory: rootDirectory,
resyncInterval: resyncInterval, resyncInterval: resyncInterval,
containerRefManager: kubecontainer.NewRefManager(), containerRefManager: containerRefManager,
readinessManager: kubecontainer.NewReadinessManager(), readinessManager: readinessManager,
runner: containerManager, runner: containerManager,
httpClient: &http.Client{}, httpClient: &http.Client{},
sourcesReady: sourcesReady, sourcesReady: sourcesReady,

View File

@ -103,7 +103,7 @@ func newTestKubelet(t *testing.T) *TestKubelet {
podManager, fakeMirrorClient := newFakePodManager() podManager, fakeMirrorClient := newFakePodManager()
kubelet.podManager = podManager kubelet.podManager = podManager
kubelet.containerRefManager = kubecontainer.NewRefManager() kubelet.containerRefManager = kubecontainer.NewRefManager()
kubelet.containerManager = dockertools.NewDockerManager(fakeDocker, fakeRecorder, dockertools.PodInfraContainerImage, 0, 0) kubelet.containerManager = dockertools.NewDockerManager(fakeDocker, fakeRecorder, kubelet.readinessManager, kubelet.containerRefManager, dockertools.PodInfraContainerImage, 0, 0)
kubelet.runtimeCache = kubecontainer.NewFakeRuntimeCache(kubelet.containerManager) kubelet.runtimeCache = kubecontainer.NewFakeRuntimeCache(kubelet.containerManager)
kubelet.podWorkers = newPodWorkers( kubelet.podWorkers = newPodWorkers(
kubelet.runtimeCache, kubelet.runtimeCache,

View File

@ -40,7 +40,8 @@ func newPod(uid, name string) *api.Pod {
func createPodWorkers() (*podWorkers, map[types.UID][]string) { func createPodWorkers() (*podWorkers, map[types.UID][]string) {
fakeDocker := &dockertools.FakeDockerClient{} fakeDocker := &dockertools.FakeDockerClient{}
fakeRecorder := &record.FakeRecorder{} fakeRecorder := &record.FakeRecorder{}
fakeRuntimeCache := kubecontainer.NewFakeRuntimeCache(dockertools.NewDockerManager(fakeDocker, fakeRecorder, dockertools.PodInfraContainerImage, 0, 0)) dockerManager := dockertools.NewDockerManager(fakeDocker, fakeRecorder, nil, nil, dockertools.PodInfraContainerImage, 0, 0)
fakeRuntimeCache := kubecontainer.NewFakeRuntimeCache(dockerManager)
lock := sync.Mutex{} lock := sync.Mutex{}
processed := make(map[types.UID][]string) processed := make(map[types.UID][]string)

View File

@ -147,7 +147,14 @@ func TestRunOnce(t *testing.T) {
t: t, t: t,
} }
kb.containerManager = dockertools.NewDockerManager(kb.dockerClient, kb.recorder, dockertools.PodInfraContainerImage, 0, 0) kb.containerManager = dockertools.NewDockerManager(
kb.dockerClient,
kb.recorder,
kb.readinessManager,
kb.containerRefManager,
dockertools.PodInfraContainerImage,
0,
0)
kb.containerManager.Puller = &dockertools.FakeDockerPuller{} kb.containerManager.Puller = &dockertools.FakeDockerPuller{}
pods := []*api.Pod{ pods := []*api.Pod{