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
f5901341
Commit
f5901341
authored
Apr 22, 2015
by
Yifan Gu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
kubelet/container: Move Prober/HandlerRunner interface to container/helpers.go
This enables us to pass them to container runtime as parameters.
parent
c9988db0
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
56 additions
and
28 deletions
+56
-28
helpers.go
pkg/kubelet/container/helpers.go
+32
-0
handlers.go
pkg/kubelet/handlers.go
+2
-5
kubelet.go
pkg/kubelet/kubelet.go
+4
-4
kubelet_test.go
pkg/kubelet/kubelet_test.go
+6
-6
probe.go
pkg/kubelet/probe.go
+11
-12
probe_test.go
pkg/kubelet/probe_test.go
+1
-1
No files found.
pkg/kubelet/container/helpers.go
0 → 100644
View file @
f5901341
/*
Copyright 2015 Google Inc. All rights reserved.
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
container
import
(
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
"github.com/GoogleCloudPlatform/kubernetes/pkg/probe"
)
// HandlerRunner runs a lifecycle handler for a container.
type
HandlerRunner
interface
{
Run
(
containerID
string
,
pod
*
api
.
Pod
,
container
*
api
.
Container
,
handler
*
api
.
Handler
)
error
}
// Prober checks the healthiness of a container.
type
Prober
interface
{
Probe
(
pod
*
api
.
Pod
,
status
api
.
PodStatus
,
container
api
.
Container
,
containerID
string
,
createdAt
int64
)
(
probe
.
Result
,
error
)
}
pkg/kubelet/handlers.go
View file @
f5901341
...
...
@@ -22,15 +22,12 @@ import (
"strconv"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
kubecontainer
"github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/container"
"github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/dockertools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
"github.com/golang/glog"
)
type
HandlerRunner
interface
{
Run
(
containerID
string
,
pod
*
api
.
Pod
,
container
*
api
.
Container
,
handler
*
api
.
Handler
)
error
}
type
handlerRunner
struct
{
httpGetter
httpGetter
commandRunner
dockertools
.
ContainerCommandRunner
...
...
@@ -38,7 +35,7 @@ type handlerRunner struct {
}
// TODO(yifan): Merge commandRunner and containerManager once containerManager implements the ContainerCommandRunner interface.
func
NewHandlerRunner
(
httpGetter
httpGetter
,
commandRunner
dockertools
.
ContainerCommandRunner
,
containerManager
*
dockertools
.
DockerManager
)
*
h
andlerRunner
{
func
newHandlerRunner
(
httpGetter
httpGetter
,
commandRunner
dockertools
.
ContainerCommandRunner
,
containerManager
*
dockertools
.
DockerManager
)
kubecontainer
.
H
andlerRunner
{
return
&
handlerRunner
{
httpGetter
:
httpGetter
,
commandRunner
:
commandRunner
,
...
...
pkg/kubelet/kubelet.go
View file @
f5901341
...
...
@@ -232,8 +232,8 @@ func NewMainKubelet(
}
klet
.
podManager
=
newBasicPodManager
(
klet
.
kubeClient
)
klet
.
prober
=
N
ewProber
(
klet
.
runner
,
klet
.
readinessManager
,
klet
.
containerRefManager
,
klet
.
recorder
)
klet
.
handlerRunner
=
N
ewHandlerRunner
(
klet
.
httpClient
,
klet
.
runner
,
klet
.
containerManager
)
klet
.
prober
=
n
ewProber
(
klet
.
runner
,
klet
.
readinessManager
,
klet
.
containerRefManager
,
klet
.
recorder
)
klet
.
handlerRunner
=
n
ewHandlerRunner
(
klet
.
httpClient
,
klet
.
runner
,
klet
.
containerManager
)
runtimeCache
,
err
:=
kubecontainer
.
NewRuntimeCache
(
containerManager
)
if
err
!=
nil
{
...
...
@@ -317,10 +317,10 @@ type Kubelet struct {
networkPlugin
network
.
NetworkPlugin
// Healthy check prober.
prober
*
Prober
prober
kubecontainer
.
Prober
// Container lifecycle handler runner.
handlerRunner
HandlerRunner
handlerRunner
kubecontainer
.
HandlerRunner
// Container readiness state manager.
readinessManager
*
kubecontainer
.
ReadinessManager
...
...
pkg/kubelet/kubelet_test.go
View file @
f5901341
...
...
@@ -113,8 +113,8 @@ func newTestKubelet(t *testing.T) *TestKubelet {
},
fakeRecorder
)
kubelet
.
containerManager
.
Puller
=
&
dockertools
.
FakeDockerPuller
{}
kubelet
.
prober
=
N
ewProber
(
nil
,
kubelet
.
readinessManager
,
kubelet
.
containerRefManager
,
kubelet
.
recorder
)
kubelet
.
handlerRunner
=
N
ewHandlerRunner
(
&
fakeHTTP
{},
&
fakeContainerCommandRunner
{},
kubelet
.
containerManager
)
kubelet
.
prober
=
n
ewProber
(
nil
,
kubelet
.
readinessManager
,
kubelet
.
containerRefManager
,
kubelet
.
recorder
)
kubelet
.
handlerRunner
=
n
ewHandlerRunner
(
&
fakeHTTP
{},
&
fakeContainerCommandRunner
{},
kubelet
.
containerManager
)
return
&
TestKubelet
{
kubelet
,
fakeDocker
,
mockCadvisor
,
fakeKubeClient
,
waitGroup
,
fakeMirrorClient
}
}
...
...
@@ -768,7 +768,7 @@ func TestSyncPodsWithPodInfraCreatesContainerCallsHandler(t *testing.T) {
waitGroup
:=
testKubelet
.
waitGroup
fakeHttp
:=
fakeHTTP
{}
kubelet
.
httpClient
=
&
fakeHttp
kubelet
.
handlerRunner
=
N
ewHandlerRunner
(
kubelet
.
httpClient
,
&
fakeContainerCommandRunner
{},
kubelet
.
containerManager
)
kubelet
.
handlerRunner
=
n
ewHandlerRunner
(
kubelet
.
httpClient
,
&
fakeContainerCommandRunner
{},
kubelet
.
containerManager
)
pods
:=
[]
*
api
.
Pod
{
{
ObjectMeta
:
api
.
ObjectMeta
{
...
...
@@ -1690,7 +1690,7 @@ func TestRunHandlerExec(t *testing.T) {
kubelet
:=
testKubelet
.
kubelet
fakeDocker
:=
testKubelet
.
fakeDocker
kubelet
.
runner
=
&
fakeCommandRunner
kubelet
.
handlerRunner
=
N
ewHandlerRunner
(
&
fakeHTTP
{},
kubelet
.
runner
,
kubelet
.
containerManager
)
kubelet
.
handlerRunner
=
n
ewHandlerRunner
(
&
fakeHTTP
{},
kubelet
.
runner
,
kubelet
.
containerManager
)
containerID
:=
"abc1234"
podName
:=
"podFoo"
...
...
@@ -1745,7 +1745,7 @@ func TestRunHandlerHttp(t *testing.T) {
testKubelet
:=
newTestKubelet
(
t
)
kubelet
:=
testKubelet
.
kubelet
kubelet
.
httpClient
=
&
fakeHttp
kubelet
.
handlerRunner
=
N
ewHandlerRunner
(
kubelet
.
httpClient
,
&
fakeContainerCommandRunner
{},
kubelet
.
containerManager
)
kubelet
.
handlerRunner
=
n
ewHandlerRunner
(
kubelet
.
httpClient
,
&
fakeContainerCommandRunner
{},
kubelet
.
containerManager
)
containerID
:=
"abc1234"
podName
:=
"podFoo"
...
...
@@ -1813,7 +1813,7 @@ func TestSyncPodEventHandlerFails(t *testing.T) {
kubelet
.
httpClient
=
&
fakeHTTP
{
err
:
fmt
.
Errorf
(
"test error"
),
}
kubelet
.
handlerRunner
=
N
ewHandlerRunner
(
kubelet
.
httpClient
,
&
fakeContainerCommandRunner
{},
kubelet
.
containerManager
)
kubelet
.
handlerRunner
=
n
ewHandlerRunner
(
kubelet
.
httpClient
,
&
fakeContainerCommandRunner
{},
kubelet
.
containerManager
)
pods
:=
[]
*
api
.
Pod
{
{
...
...
pkg/kubelet/probe.go
View file @
f5901341
...
...
@@ -37,9 +37,8 @@ import (
const
maxProbeRetries
=
3
// Prober helps to check the liveness/readiness of a container.
// TODO(yifan): Replace the concrete type with interface later.
type
Prober
struct
{
// prober helps to check the liveness/readiness of a container.
type
prober
struct
{
exec
execprobe
.
ExecProber
http
httprobe
.
HTTPProber
tcp
tcprobe
.
TCPProber
...
...
@@ -52,13 +51,13 @@ type Prober struct {
// NewProber creates a Prober, it takes a command runner and
// several container info managers.
func
N
ewProber
(
func
n
ewProber
(
runner
dockertools
.
ContainerCommandRunner
,
readinessManager
*
kubecontainer
.
ReadinessManager
,
refManager
*
kubecontainer
.
RefManager
,
recorder
record
.
EventRecorder
)
*
Prober
{
recorder
record
.
EventRecorder
)
kubecontainer
.
Prober
{
return
&
P
rober
{
return
&
p
rober
{
exec
:
execprobe
.
New
(),
http
:
httprobe
.
New
(),
tcp
:
tcprobe
.
New
(),
...
...
@@ -73,7 +72,7 @@ func NewProber(
// Probe checks the liveness/readiness of the given container.
// If the container's liveness probe is unsuccessful, set readiness to false.
// If liveness is successful, do a readiness check and set readiness accordingly.
func
(
pb
*
P
rober
)
Probe
(
pod
*
api
.
Pod
,
status
api
.
PodStatus
,
container
api
.
Container
,
containerID
string
,
createdAt
int64
)
(
probe
.
Result
,
error
)
{
func
(
pb
*
p
rober
)
Probe
(
pod
*
api
.
Pod
,
status
api
.
PodStatus
,
container
api
.
Container
,
containerID
string
,
createdAt
int64
)
(
probe
.
Result
,
error
)
{
// Probe liveness.
live
,
err
:=
pb
.
probeLiveness
(
pod
,
status
,
container
,
containerID
,
createdAt
)
if
err
!=
nil
{
...
...
@@ -113,7 +112,7 @@ func (pb *Prober) Probe(pod *api.Pod, status api.PodStatus, container api.Contai
// probeLiveness probes the liveness of a container.
// If the initalDelay since container creation on liveness probe has not passed the probe will return probe.Success.
func
(
pb
*
P
rober
)
probeLiveness
(
pod
*
api
.
Pod
,
status
api
.
PodStatus
,
container
api
.
Container
,
containerID
string
,
createdAt
int64
)
(
probe
.
Result
,
error
)
{
func
(
pb
*
p
rober
)
probeLiveness
(
pod
*
api
.
Pod
,
status
api
.
PodStatus
,
container
api
.
Container
,
containerID
string
,
createdAt
int64
)
(
probe
.
Result
,
error
)
{
p
:=
container
.
LivenessProbe
if
p
==
nil
{
return
probe
.
Success
,
nil
...
...
@@ -126,7 +125,7 @@ func (pb *Prober) probeLiveness(pod *api.Pod, status api.PodStatus, container ap
// probeReadiness probes the readiness of a container.
// If the initial delay on the readiness probe has not passed the probe will return probe.Failure.
func
(
pb
*
P
rober
)
probeReadiness
(
pod
*
api
.
Pod
,
status
api
.
PodStatus
,
container
api
.
Container
,
containerID
string
,
createdAt
int64
)
(
probe
.
Result
,
error
)
{
func
(
pb
*
p
rober
)
probeReadiness
(
pod
*
api
.
Pod
,
status
api
.
PodStatus
,
container
api
.
Container
,
containerID
string
,
createdAt
int64
)
(
probe
.
Result
,
error
)
{
p
:=
container
.
ReadinessProbe
if
p
==
nil
{
return
probe
.
Success
,
nil
...
...
@@ -139,7 +138,7 @@ func (pb *Prober) probeReadiness(pod *api.Pod, status api.PodStatus, container a
// runProbeWithRetries tries to probe the container in a finite loop, it returns the last result
// if it never succeeds.
func
(
pb
*
P
rober
)
runProbeWithRetries
(
p
*
api
.
Probe
,
pod
*
api
.
Pod
,
status
api
.
PodStatus
,
container
api
.
Container
,
containerID
string
,
retires
int
)
(
probe
.
Result
,
error
)
{
func
(
pb
*
p
rober
)
runProbeWithRetries
(
p
*
api
.
Probe
,
pod
*
api
.
Pod
,
status
api
.
PodStatus
,
container
api
.
Container
,
containerID
string
,
retires
int
)
(
probe
.
Result
,
error
)
{
var
err
error
var
result
probe
.
Result
for
i
:=
0
;
i
<
retires
;
i
++
{
...
...
@@ -151,7 +150,7 @@ func (pb *Prober) runProbeWithRetries(p *api.Probe, pod *api.Pod, status api.Pod
return
result
,
err
}
func
(
pb
*
P
rober
)
runProbe
(
p
*
api
.
Probe
,
pod
*
api
.
Pod
,
status
api
.
PodStatus
,
container
api
.
Container
,
containerID
string
)
(
probe
.
Result
,
error
)
{
func
(
pb
*
p
rober
)
runProbe
(
p
*
api
.
Probe
,
pod
*
api
.
Pod
,
status
api
.
PodStatus
,
container
api
.
Container
,
containerID
string
)
(
probe
.
Result
,
error
)
{
timeout
:=
time
.
Duration
(
p
.
TimeoutSeconds
)
*
time
.
Second
if
p
.
Exec
!=
nil
{
glog
.
V
(
4
)
.
Infof
(
"Exec-Probe Pod: %v, Container: %v"
,
pod
,
container
)
...
...
@@ -228,7 +227,7 @@ type execInContainer struct {
run
func
()
([]
byte
,
error
)
}
func
(
p
*
P
rober
)
newExecInContainer
(
pod
*
api
.
Pod
,
container
api
.
Container
,
containerID
string
)
exec
.
Cmd
{
func
(
p
*
p
rober
)
newExecInContainer
(
pod
*
api
.
Pod
,
container
api
.
Container
,
containerID
string
)
exec
.
Cmd
{
return
execInContainer
{
func
()
([]
byte
,
error
)
{
return
p
.
runner
.
RunInContainer
(
containerID
,
container
.
LivenessProbe
.
Exec
.
Command
)
}}
...
...
pkg/kubelet/probe_test.go
View file @
f5901341
...
...
@@ -152,7 +152,7 @@ func makeTestKubelet(result probe.Result, err error) *Kubelet {
containerRefManager
:
kubecontainer
.
NewRefManager
(),
}
kl
.
prober
=
&
P
rober
{
kl
.
prober
=
&
p
rober
{
exec
:
fakeExecProber
{
result
:
result
,
err
:
err
,
...
...
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