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
6c168871
Unverified
Commit
6c168871
authored
Sep 28, 2018
by
k8s-ci-robot
Committed by
GitHub
Sep 28, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #68181 from Pingan2017/golint
fix golint failures - some packages under /pkg/kubelet
parents
8ea6b2c7
158552ff
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
64 additions
and
55 deletions
+64
-55
.golint_failures
hack/.golint_failures
+0
-4
helpers.go
pkg/kubelet/images/helpers.go
+1
-1
image_gc_manager.go
pkg/kubelet/images/image_gc_manager.go
+3
-3
image_manager.go
pkg/kubelet/images/image_manager.go
+5
-5
types.go
pkg/kubelet/images/types.go
+7
-7
fake_kuberuntime_manager.go
pkg/kubelet/kuberuntime/fake_kuberuntime_manager.go
+2
-2
instrumented_services_test.go
pkg/kubelet/kuberuntime/instrumented_services_test.go
+3
-3
kuberuntime_container.go
pkg/kubelet/kuberuntime/kuberuntime_container.go
+7
-3
kuberuntime_container_linux_test.go
pkg/kubelet/kuberuntime/kuberuntime_container_linux_test.go
+2
-2
kuberuntime_container_test.go
pkg/kubelet/kuberuntime/kuberuntime_container_test.go
+9
-9
kuberuntime_gc.go
pkg/kubelet/kuberuntime/kuberuntime_gc.go
+1
-1
kuberuntime_image_test.go
pkg/kubelet/kuberuntime/kuberuntime_image_test.go
+3
-3
kuberuntime_manager.go
pkg/kubelet/kuberuntime/kuberuntime_manager.go
+3
-2
kuberuntime_manager_test.go
pkg/kubelet/kuberuntime/kuberuntime_manager_test.go
+1
-1
legacy.go
pkg/kubelet/kuberuntime/legacy.go
+2
-2
legacy_test.go
pkg/kubelet/kuberuntime/legacy_test.go
+3
-3
leaky.go
pkg/kubelet/leaky/leaky.go
+1
-1
generic.go
pkg/kubelet/pleg/generic.go
+4
-1
pleg.go
pkg/kubelet/pleg/pleg.go
+7
-2
No files found.
hack/.golint_failures
View file @
6c168871
...
...
@@ -197,12 +197,8 @@ pkg/kubelet/dockershim/network/hostport/testing
pkg/kubelet/dockershim/network/kubenet
pkg/kubelet/dockershim/network/testing
pkg/kubelet/events
pkg/kubelet/images
pkg/kubelet/kuberuntime
pkg/kubelet/leaky
pkg/kubelet/lifecycle
pkg/kubelet/metrics
pkg/kubelet/pleg
pkg/kubelet/pod
pkg/kubelet/pod/testing
pkg/kubelet/preemption
...
...
pkg/kubelet/images/helpers.go
View file @
6c168871
...
...
@@ -46,5 +46,5 @@ func (ts throttledImageService) PullImage(image kubecontainer.ImageSpec, secrets
if
ts
.
limiter
.
TryAccept
()
{
return
ts
.
ImageService
.
PullImage
(
image
,
secrets
)
}
return
""
,
fmt
.
Errorf
(
"pull QPS exceeded
.
"
)
return
""
,
fmt
.
Errorf
(
"pull QPS exceeded"
)
}
pkg/kubelet/images/image_gc_manager.go
View file @
6c168871
...
...
@@ -44,8 +44,7 @@ type StatsProvider interface {
ImageFsStats
()
(
*
statsapi
.
FsStats
,
error
)
}
// Manages lifecycle of all images.
//
// ImageGCManager is an interface for managing lifecycle of all images.
// Implementation is thread-safe.
type
ImageGCManager
interface
{
// Applies the garbage collection policy. Errors include being unable to free
...
...
@@ -61,7 +60,7 @@ type ImageGCManager interface {
DeleteUnusedImages
()
error
}
//
A
policy for garbage collecting images. Policy defines an allowed band in
//
ImageGCPolicy is a
policy for garbage collecting images. Policy defines an allowed band in
// which garbage collection will be run.
type
ImageGCPolicy
struct
{
// Any usage above this threshold will always trigger garbage collection.
...
...
@@ -144,6 +143,7 @@ type imageRecord struct {
size
int64
}
// NewImageGCManager instantiates a new ImageGCManager object.
func
NewImageGCManager
(
runtime
container
.
Runtime
,
statsProvider
StatsProvider
,
recorder
record
.
EventRecorder
,
nodeRef
*
v1
.
ObjectReference
,
policy
ImageGCPolicy
,
sandboxImage
string
)
(
ImageGCManager
,
error
)
{
// Validate policy.
if
policy
.
HighThresholdPercent
<
0
||
policy
.
HighThresholdPercent
>
100
{
...
...
pkg/kubelet/images/image_manager.go
View file @
6c168871
...
...
@@ -40,6 +40,7 @@ type imageManager struct {
var
_
ImageManager
=
&
imageManager
{}
// NewImageManager instantiates a new ImageManager object.
func
NewImageManager
(
recorder
record
.
EventRecorder
,
imageService
kubecontainer
.
ImageService
,
imageBackOff
*
flowcontrol
.
Backoff
,
serialized
bool
,
qps
float32
,
burst
int
)
ImageManager
{
imageService
=
throttleImagePulling
(
imageService
,
qps
,
burst
)
...
...
@@ -112,11 +113,10 @@ func (m *imageManager) EnsureImageExists(pod *v1.Pod, container *v1.Container, p
msg
:=
fmt
.
Sprintf
(
"Container image %q already present on machine"
,
container
.
Image
)
m
.
logIt
(
ref
,
v1
.
EventTypeNormal
,
events
.
PulledImage
,
logPrefix
,
msg
,
glog
.
Info
)
return
imageRef
,
""
,
nil
}
else
{
msg
:=
fmt
.
Sprintf
(
"Container image %q is not present with pull policy of Never"
,
container
.
Image
)
m
.
logIt
(
ref
,
v1
.
EventTypeWarning
,
events
.
ErrImageNeverPullPolicy
,
logPrefix
,
msg
,
glog
.
Warning
)
return
""
,
msg
,
ErrImageNeverPull
}
msg
:=
fmt
.
Sprintf
(
"Container image %q is not present with pull policy of Never"
,
container
.
Image
)
m
.
logIt
(
ref
,
v1
.
EventTypeWarning
,
events
.
ErrImageNeverPullPolicy
,
logPrefix
,
msg
,
glog
.
Warning
)
return
""
,
msg
,
ErrImageNeverPull
}
backOffKey
:=
fmt
.
Sprintf
(
"%s_%s"
,
pod
.
UID
,
container
.
Image
)
...
...
@@ -132,7 +132,7 @@ func (m *imageManager) EnsureImageExists(pod *v1.Pod, container *v1.Container, p
if
imagePullResult
.
err
!=
nil
{
m
.
logIt
(
ref
,
v1
.
EventTypeWarning
,
events
.
FailedToPullImage
,
logPrefix
,
fmt
.
Sprintf
(
"Failed to pull image %q: %v"
,
container
.
Image
,
imagePullResult
.
err
),
glog
.
Warning
)
m
.
backOff
.
Next
(
backOffKey
,
m
.
backOff
.
Clock
.
Now
())
if
imagePullResult
.
err
==
RegistryUnavailable
{
if
imagePullResult
.
err
==
Err
RegistryUnavailable
{
msg
:=
fmt
.
Sprintf
(
"image pull failed for %s because the registry is unavailable."
,
container
.
Image
)
return
""
,
msg
,
imagePullResult
.
err
}
...
...
pkg/kubelet/images/types.go
View file @
6c168871
...
...
@@ -23,22 +23,22 @@ import (
)
var
(
// Container image pull failed, kubelet is backing off image pull
//
ErrImagePullBackOff -
Container image pull failed, kubelet is backing off image pull
ErrImagePullBackOff
=
errors
.
New
(
"ImagePullBackOff"
)
// Unable to inspect image
//
ErrImageInspect -
Unable to inspect image
ErrImageInspect
=
errors
.
New
(
"ImageInspectError"
)
// General image pull error
//
ErrImagePull -
General image pull error
ErrImagePull
=
errors
.
New
(
"ErrImagePull"
)
// Required Image is absent on host and PullPolicy is NeverPullImage
//
ErrImageNeverPull -
Required Image is absent on host and PullPolicy is NeverPullImage
ErrImageNeverPull
=
errors
.
New
(
"ErrImageNeverPull"
)
// Get http error when pulling image from registry
RegistryUnavailable
=
errors
.
New
(
"RegistryUnavailable"
)
//
ErrRegistryUnavailable -
Get http error when pulling image from registry
Err
RegistryUnavailable
=
errors
.
New
(
"RegistryUnavailable"
)
// Unable to parse the image name.
//
ErrInvalidImageName -
Unable to parse the image name.
ErrInvalidImageName
=
errors
.
New
(
"InvalidImageName"
)
)
...
...
pkg/kubelet/kuberuntime/fake_kuberuntime_manager.go
View file @
6c168871
...
...
@@ -70,7 +70,7 @@ func (f *fakePodStateProvider) IsPodTerminated(uid types.UID) bool {
return
!
found
}
func
N
ewFakeKubeRuntimeManager
(
runtimeService
internalapi
.
RuntimeService
,
imageService
internalapi
.
ImageManagerService
,
machineInfo
*
cadvisorapi
.
MachineInfo
,
osInterface
kubecontainer
.
OSInterface
,
runtimeHelper
kubecontainer
.
RuntimeHelper
,
keyring
credentialprovider
.
DockerKeyring
)
(
*
kubeGenericRuntimeManager
,
error
)
{
func
n
ewFakeKubeRuntimeManager
(
runtimeService
internalapi
.
RuntimeService
,
imageService
internalapi
.
ImageManagerService
,
machineInfo
*
cadvisorapi
.
MachineInfo
,
osInterface
kubecontainer
.
OSInterface
,
runtimeHelper
kubecontainer
.
RuntimeHelper
,
keyring
credentialprovider
.
DockerKeyring
)
(
*
kubeGenericRuntimeManager
,
error
)
{
recorder
:=
&
record
.
FakeRecorder
{}
kubeRuntimeManager
:=
&
kubeGenericRuntimeManager
{
recorder
:
recorder
,
...
...
@@ -93,7 +93,7 @@ func NewFakeKubeRuntimeManager(runtimeService internalapi.RuntimeService, imageS
return
nil
,
err
}
kubeRuntimeManager
.
containerGC
=
N
ewContainerGC
(
runtimeService
,
newFakePodStateProvider
(),
kubeRuntimeManager
)
kubeRuntimeManager
.
containerGC
=
n
ewContainerGC
(
runtimeService
,
newFakePodStateProvider
(),
kubeRuntimeManager
)
kubeRuntimeManager
.
runtimeName
=
typedVersion
.
RuntimeName
kubeRuntimeManager
.
imagePuller
=
images
.
NewImageManager
(
kubecontainer
.
FilterEventRecorder
(
recorder
),
...
...
pkg/kubelet/kuberuntime/instrumented_services_test.go
View file @
6c168871
...
...
@@ -38,7 +38,7 @@ func TestRecordOperation(t *testing.T) {
assert
.
NoError
(
t
,
err
)
defer
l
.
Close
()
prometheusU
rl
:=
"http://"
+
temporalServer
+
"/metrics"
prometheusU
RL
:=
"http://"
+
temporalServer
+
"/metrics"
mux
:=
http
.
NewServeMux
()
mux
.
Handle
(
"/metrics"
,
prometheus
.
Handler
())
server
:=
&
http
.
Server
{
...
...
@@ -55,11 +55,11 @@ func TestRecordOperation(t *testing.T) {
assert
.
HTTPBodyContains
(
t
,
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
mux
.
ServeHTTP
(
w
,
r
)
}),
"GET"
,
prometheusU
rl
,
nil
,
runtimeOperationsCounterExpected
)
}),
"GET"
,
prometheusU
RL
,
nil
,
runtimeOperationsCounterExpected
)
assert
.
HTTPBodyContains
(
t
,
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
mux
.
ServeHTTP
(
w
,
r
)
}),
"GET"
,
prometheusU
rl
,
nil
,
runtimeOperationsLatencyExpected
)
}),
"GET"
,
prometheusU
RL
,
nil
,
runtimeOperationsLatencyExpected
)
}
func
TestInstrumentedVersion
(
t
*
testing
.
T
)
{
...
...
pkg/kubelet/kuberuntime/kuberuntime_container.go
View file @
6c168871
...
...
@@ -50,10 +50,14 @@ import (
)
var
(
// ErrCreateContainerConfig - failed to create container config
ErrCreateContainerConfig
=
errors
.
New
(
"CreateContainerConfigError"
)
ErrCreateContainer
=
errors
.
New
(
"CreateContainerError"
)
ErrPreStartHook
=
errors
.
New
(
"PreStartHookError"
)
ErrPostStartHook
=
errors
.
New
(
"PostStartHookError"
)
// ErrCreateContainer - failed to create container
ErrCreateContainer
=
errors
.
New
(
"CreateContainerError"
)
// ErrPreStartHook - failed to execute PreStartHook
ErrPreStartHook
=
errors
.
New
(
"PreStartHookError"
)
// ErrPostStartHook - failed to execute PostStartHook
ErrPostStartHook
=
errors
.
New
(
"PostStartHookError"
)
)
// recordContainerEvent should be used by the runtime manager for all container related events.
...
...
pkg/kubelet/kuberuntime/kuberuntime_container_linux_test.go
View file @
6c168871
...
...
@@ -124,8 +124,8 @@ func TestGenerateContainerConfig(t *testing.T) {
_
,
_
,
err
=
m
.
generateContainerConfig
(
&
podWithContainerSecurityContext
.
Spec
.
Containers
[
0
],
podWithContainerSecurityContext
,
0
,
""
,
podWithContainerSecurityContext
.
Spec
.
Containers
[
0
]
.
Image
,
kubecontainer
.
ContainerTypeRegular
)
assert
.
Error
(
t
,
err
)
imageI
d
,
_
:=
imageService
.
PullImage
(
&
runtimeapi
.
ImageSpec
{
Image
:
"busybox"
},
nil
)
image
,
_
:=
imageService
.
ImageStatus
(
&
runtimeapi
.
ImageSpec
{
Image
:
imageI
d
})
imageI
D
,
_
:=
imageService
.
PullImage
(
&
runtimeapi
.
ImageSpec
{
Image
:
"busybox"
},
nil
)
image
,
_
:=
imageService
.
ImageStatus
(
&
runtimeapi
.
ImageSpec
{
Image
:
imageI
D
})
image
.
Uid
=
nil
image
.
Username
=
"test"
...
...
pkg/kubelet/kuberuntime/kuberuntime_container_test.go
View file @
6c168871
...
...
@@ -56,17 +56,17 @@ func TestRemoveContainer(t *testing.T) {
_
,
fakeContainers
:=
makeAndSetFakePod
(
t
,
m
,
fakeRuntime
,
pod
)
assert
.
Equal
(
t
,
len
(
fakeContainers
),
1
)
containerI
d
:=
fakeContainers
[
0
]
.
Id
containerI
D
:=
fakeContainers
[
0
]
.
Id
fakeOS
:=
m
.
osInterface
.
(
*
containertest
.
FakeOS
)
err
=
m
.
removeContainer
(
containerI
d
)
err
=
m
.
removeContainer
(
containerI
D
)
assert
.
NoError
(
t
,
err
)
// Verify container log is removed
expectedContainerLogPath
:=
filepath
.
Join
(
podLogsRootDirectory
,
"12345678"
,
"foo"
,
"0.log"
)
expectedContainerLogSymlink
:=
legacyLogSymlink
(
containerI
d
,
"foo"
,
"bar"
,
"new"
)
expectedContainerLogSymlink
:=
legacyLogSymlink
(
containerI
D
,
"foo"
,
"bar"
,
"new"
)
assert
.
Equal
(
t
,
fakeOS
.
Removes
,
[]
string
{
expectedContainerLogPath
,
expectedContainerLogSymlink
})
// Verify container is removed
assert
.
Contains
(
t
,
fakeRuntime
.
Called
,
"RemoveContainer"
)
containers
,
err
:=
fakeRuntime
.
ListContainers
(
&
runtimeapi
.
ContainerFilter
{
Id
:
containerI
d
})
containers
,
err
:=
fakeRuntime
.
ListContainers
(
&
runtimeapi
.
ContainerFilter
{
Id
:
containerI
D
})
assert
.
NoError
(
t
,
err
)
assert
.
Empty
(
t
,
containers
)
}
...
...
@@ -257,10 +257,10 @@ func TestLifeCycleHook(t *testing.T) {
}
fakeRunner
:=
&
containertest
.
FakeContainerCommandRunner
{}
fakeH
ttp
:=
&
fakeHTTP
{}
fakeH
TTP
:=
&
fakeHTTP
{}
lcHanlder
:=
lifecycle
.
NewHandlerRunner
(
fakeH
ttp
,
fakeH
TTP
,
fakeRunner
,
nil
)
...
...
@@ -277,11 +277,11 @@ func TestLifeCycleHook(t *testing.T) {
// Configured and working HTTP hook
t
.
Run
(
"PreStop-HTTPGet"
,
func
(
t
*
testing
.
T
)
{
defer
func
()
{
fakeH
ttp
.
url
=
""
}()
defer
func
()
{
fakeH
TTP
.
url
=
""
}()
testPod
.
Spec
.
Containers
[
0
]
.
Lifecycle
=
httpLifeCycle
m
.
killContainer
(
testPod
,
cID
,
"foo"
,
"testKill"
,
&
gracePeriod
)
if
!
strings
.
Contains
(
fakeH
ttp
.
url
,
httpLifeCycle
.
PreStop
.
HTTPGet
.
Host
)
{
if
!
strings
.
Contains
(
fakeH
TTP
.
url
,
httpLifeCycle
.
PreStop
.
HTTPGet
.
Host
)
{
t
.
Errorf
(
"HTTP Prestop hook was not invoked"
)
}
})
...
...
@@ -295,7 +295,7 @@ func TestLifeCycleHook(t *testing.T) {
m
.
killContainer
(
testPod
,
cID
,
"foo"
,
"testKill"
,
&
gracePeriodLocal
)
if
strings
.
Contains
(
fakeH
ttp
.
url
,
httpLifeCycle
.
PreStop
.
HTTPGet
.
Host
)
{
if
strings
.
Contains
(
fakeH
TTP
.
url
,
httpLifeCycle
.
PreStop
.
HTTPGet
.
Host
)
{
t
.
Errorf
(
"HTTP Should not execute when gracePeriod is 0"
)
}
})
...
...
pkg/kubelet/kuberuntime/kuberuntime_gc.go
View file @
6c168871
...
...
@@ -39,7 +39,7 @@ type containerGC struct {
}
// NewContainerGC creates a new containerGC.
func
N
ewContainerGC
(
client
internalapi
.
RuntimeService
,
podStateProvider
podStateProvider
,
manager
*
kubeGenericRuntimeManager
)
*
containerGC
{
func
n
ewContainerGC
(
client
internalapi
.
RuntimeService
,
podStateProvider
podStateProvider
,
manager
*
kubeGenericRuntimeManager
)
*
containerGC
{
return
&
containerGC
{
client
:
client
,
manager
:
manager
,
...
...
pkg/kubelet/kuberuntime/kuberuntime_image_test.go
View file @
6c168871
...
...
@@ -109,8 +109,8 @@ func TestPullWithSecrets(t *testing.T) {
t
.
Errorf
(
"unexpected error: %v"
,
err
)
}
dockerConfigJ
son
:=
map
[
string
]
map
[
string
]
map
[
string
]
string
{
"auths"
:
dockerCfg
}
dockerConfigJ
sonContent
,
err
:=
json
.
Marshal
(
dockerConfigJson
)
dockerConfigJ
SON
:=
map
[
string
]
map
[
string
]
map
[
string
]
string
{
"auths"
:
dockerCfg
}
dockerConfigJ
SONContent
,
err
:=
json
.
Marshal
(
dockerConfigJSON
)
if
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %v"
,
err
)
}
...
...
@@ -153,7 +153,7 @@ func TestPullWithSecrets(t *testing.T) {
},
"builtin keyring secrets, but use passed with new docker config"
:
{
"ubuntu"
,
[]
v1
.
Secret
{{
Type
:
v1
.
SecretTypeDockerConfigJson
,
Data
:
map
[
string
][]
byte
{
v1
.
DockerConfigJsonKey
:
dockerConfigJ
son
Content
}}},
[]
v1
.
Secret
{{
Type
:
v1
.
SecretTypeDockerConfigJson
,
Data
:
map
[
string
][]
byte
{
v1
.
DockerConfigJsonKey
:
dockerConfigJ
SON
Content
}}},
credentialprovider
.
DockerConfig
(
map
[
string
]
credentialprovider
.
DockerConfigEntry
{
"index.docker.io/v1/"
:
{
Username
:
"built-in"
,
Password
:
"password"
,
Provider
:
nil
},
}),
...
...
pkg/kubelet/kuberuntime/kuberuntime_manager.go
View file @
6c168871
...
...
@@ -125,6 +125,7 @@ type kubeGenericRuntimeManager struct {
runtimeClassManager
*
runtimeclass
.
Manager
}
// KubeGenericRuntime is a interface contains interfaces for container runtime and command.
type
KubeGenericRuntime
interface
{
kubecontainer
.
Runtime
kubecontainer
.
StreamingRuntime
...
...
@@ -216,7 +217,7 @@ func NewKubeGenericRuntimeManager(
imagePullQPS
,
imagePullBurst
)
kubeRuntimeManager
.
runner
=
lifecycle
.
NewHandlerRunner
(
httpClient
,
kubeRuntimeManager
,
kubeRuntimeManager
)
kubeRuntimeManager
.
containerGC
=
N
ewContainerGC
(
runtimeService
,
podStateProvider
,
kubeRuntimeManager
)
kubeRuntimeManager
.
containerGC
=
n
ewContainerGC
(
runtimeService
,
podStateProvider
,
kubeRuntimeManager
)
kubeRuntimeManager
.
versionCache
=
cache
.
NewObjectCache
(
func
()
(
interface
{},
error
)
{
...
...
@@ -543,7 +544,7 @@ func (m *kubeGenericRuntimeManager) computePodActions(pod *v1.Pod, podStatus *ku
reason
=
"Container failed liveness probe."
}
else
{
// Keep the container.
keepCount
+=
1
keepCount
++
continue
}
...
...
pkg/kubelet/kuberuntime/kuberuntime_manager_test.go
View file @
6c168871
...
...
@@ -54,7 +54,7 @@ func customTestRuntimeManager(keyring *credentialprovider.BasicDockerKeyring) (*
// we may want to set memory capacity.
machineInfo
:=
&
cadvisorapi
.
MachineInfo
{}
osInterface
:=
&
containertest
.
FakeOS
{}
manager
,
err
:=
N
ewFakeKubeRuntimeManager
(
fakeRuntimeService
,
fakeImageService
,
machineInfo
,
osInterface
,
&
containertest
.
FakeRuntimeHelper
{},
keyring
)
manager
,
err
:=
n
ewFakeKubeRuntimeManager
(
fakeRuntimeService
,
fakeImageService
,
machineInfo
,
osInterface
,
&
containertest
.
FakeRuntimeHelper
{},
keyring
)
return
fakeRuntimeService
,
fakeImageService
,
manager
,
err
}
...
...
pkg/kubelet/kuberuntime/legacy.go
View file @
6c168871
...
...
@@ -44,9 +44,9 @@ func legacyLogSymlink(containerID string, containerName, podName, podNamespace s
containerName
,
containerID
)
}
func
logSymlink
(
containerLogsDir
,
podFullName
,
containerName
,
dockerI
d
string
)
string
{
func
logSymlink
(
containerLogsDir
,
podFullName
,
containerName
,
dockerI
D
string
)
string
{
suffix
:=
fmt
.
Sprintf
(
".%s"
,
legacyLogSuffix
)
logPath
:=
fmt
.
Sprintf
(
"%s_%s-%s"
,
podFullName
,
containerName
,
dockerI
d
)
logPath
:=
fmt
.
Sprintf
(
"%s_%s-%s"
,
podFullName
,
containerName
,
dockerI
D
)
// Length of a filename cannot exceed 255 characters in ext4 on Linux.
if
len
(
logPath
)
>
ext4MaxFileNameLen
-
len
(
suffix
)
{
logPath
=
logPath
[
:
ext4MaxFileNameLen
-
len
(
suffix
)]
...
...
pkg/kubelet/kuberuntime/legacy_test.go
View file @
6c168871
...
...
@@ -40,10 +40,10 @@ func TestLogSymLink(t *testing.T) {
containerLogsDir
:=
"/foo/bar"
podFullName
:=
randStringBytes
(
128
)
containerName
:=
randStringBytes
(
70
)
dockerI
d
:=
randStringBytes
(
80
)
dockerI
D
:=
randStringBytes
(
80
)
// The file name cannot exceed 255 characters. Since .log suffix is required, the prefix cannot exceed 251 characters.
expectedPath
:=
path
.
Join
(
containerLogsDir
,
fmt
.
Sprintf
(
"%s_%s-%s"
,
podFullName
,
containerName
,
dockerI
d
)[
:
251
]
+
".log"
)
as
.
Equal
(
expectedPath
,
logSymlink
(
containerLogsDir
,
podFullName
,
containerName
,
dockerI
d
))
expectedPath
:=
path
.
Join
(
containerLogsDir
,
fmt
.
Sprintf
(
"%s_%s-%s"
,
podFullName
,
containerName
,
dockerI
D
)[
:
251
]
+
".log"
)
as
.
Equal
(
expectedPath
,
logSymlink
(
containerLogsDir
,
podFullName
,
containerName
,
dockerI
D
))
}
func
TestLegacyLogSymLink
(
t
*
testing
.
T
)
{
...
...
pkg/kubelet/leaky/leaky.go
View file @
6c168871
...
...
@@ -19,7 +19,7 @@ limitations under the License.
package
leaky
const
(
//
This
is used in a few places outside of Kubelet, such as indexing
//
PodInfraContainerName
is used in a few places outside of Kubelet, such as indexing
// into the container info.
PodInfraContainerName
=
"POD"
)
pkg/kubelet/pleg/generic.go
View file @
6c168871
...
...
@@ -106,6 +106,7 @@ type podRecord struct {
type
podRecords
map
[
types
.
UID
]
*
podRecord
// NewGenericPLEG instantiates a new GenericPLEG object and return it.
func
NewGenericPLEG
(
runtime
kubecontainer
.
Runtime
,
channelCapacity
int
,
relistPeriod
time
.
Duration
,
cache
kubecontainer
.
Cache
,
clock
clock
.
Clock
)
PodLifecycleEventGenerator
{
return
&
GenericPLEG
{
...
...
@@ -118,7 +119,7 @@ func NewGenericPLEG(runtime kubecontainer.Runtime, channelCapacity int,
}
}
//
R
eturns a channel from which the subscriber can receive PodLifecycleEvent
//
Watch r
eturns a channel from which the subscriber can receive PodLifecycleEvent
// events.
// TODO: support multiple subscribers.
func
(
g
*
GenericPLEG
)
Watch
()
chan
*
PodLifecycleEvent
{
...
...
@@ -130,6 +131,8 @@ func (g *GenericPLEG) Start() {
go
wait
.
Until
(
g
.
relist
,
g
.
relistPeriod
,
wait
.
NeverStop
)
}
// Healthy check if PLEG work properly.
// relistThreshold is the maximum interval between two relist.
func
(
g
*
GenericPLEG
)
Healthy
()
(
bool
,
error
)
{
relistTime
:=
g
.
getRelistTime
()
elapsed
:=
g
.
clock
.
Since
(
relistTime
)
...
...
pkg/kubelet/pleg/pleg.go
View file @
6c168871
...
...
@@ -20,16 +20,20 @@ import (
"k8s.io/apimachinery/pkg/types"
)
// PodLifeCycleEventType define the event type of pod life cycle events.
type
PodLifeCycleEventType
string
const
(
// ContainerStarted - event type when the new state of container is running.
ContainerStarted
PodLifeCycleEventType
=
"ContainerStarted"
ContainerDied
PodLifeCycleEventType
=
"ContainerDied"
// ContainerDied - event type when the new state of container is exited.
ContainerDied
PodLifeCycleEventType
=
"ContainerDied"
// ContainerRemoved - event type when the old state of container is exited.
ContainerRemoved
PodLifeCycleEventType
=
"ContainerRemoved"
// PodSync is used to trigger syncing of a pod when the observed change of
// the state of the pod cannot be captured by any single event above.
PodSync
PodLifeCycleEventType
=
"PodSync"
//
Do not use the events below because they are disabled in GenericPLEG
.
//
ContainerChanged - event type when the new state of container is unknown
.
ContainerChanged
PodLifeCycleEventType
=
"ContainerChanged"
)
...
...
@@ -45,6 +49,7 @@ type PodLifecycleEvent struct {
Data
interface
{}
}
// PodLifecycleEventGenerator contains functions for generating pod life cycle events.
type
PodLifecycleEventGenerator
interface
{
Start
()
Watch
()
chan
*
PodLifecycleEvent
...
...
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