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
5e2ed11c
Commit
5e2ed11c
authored
Dec 06, 2018
by
Eric Lin
Committed by
leilei.lin
Dec 07, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Pass PodSandboxConfig to PullImage method in CRI
Fix #71745
parent
895f483f
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
49 additions
and
38 deletions
+49
-38
services.go
pkg/kubelet/apis/cri/services.go
+1
-1
fake_image_service.go
pkg/kubelet/apis/cri/testing/fake_image_service.go
+1
-1
runtime.go
pkg/kubelet/container/runtime.go
+1
-1
fake_runtime.go
pkg/kubelet/container/testing/fake_runtime.go
+2
-1
runtime_mock.go
pkg/kubelet/container/testing/runtime_mock.go
+2
-1
BUILD
pkg/kubelet/images/BUILD
+1
-0
helpers.go
pkg/kubelet/images/helpers.go
+3
-2
image_manager.go
pkg/kubelet/images/image_manager.go
+4
-2
image_manager_test.go
pkg/kubelet/images/image_manager_test.go
+2
-2
puller.go
pkg/kubelet/images/puller.go
+14
-11
types.go
pkg/kubelet/images/types.go
+2
-1
instrumented_services.go
pkg/kubelet/kuberuntime/instrumented_services.go
+2
-2
kuberuntime_container.go
pkg/kubelet/kuberuntime/kuberuntime_container.go
+1
-1
kuberuntime_container_linux_test.go
pkg/kubelet/kuberuntime/kuberuntime_container_linux_test.go
+1
-1
kuberuntime_image.go
pkg/kubelet/kuberuntime/kuberuntime_image.go
+3
-3
kuberuntime_image_test.go
pkg/kubelet/kuberuntime/kuberuntime_image_test.go
+3
-3
fake_image_service.go
pkg/kubelet/remote/fake/fake_image_service.go
+1
-1
remote_image.go
pkg/kubelet/remote/remote_image.go
+4
-3
image_list.go
test/e2e_node/image_list.go
+1
-1
No files found.
pkg/kubelet/apis/cri/services.go
View file @
5e2ed11c
...
@@ -111,7 +111,7 @@ type ImageManagerService interface {
...
@@ -111,7 +111,7 @@ type ImageManagerService interface {
// ImageStatus returns the status of the image.
// ImageStatus returns the status of the image.
ImageStatus
(
image
*
runtimeapi
.
ImageSpec
)
(
*
runtimeapi
.
Image
,
error
)
ImageStatus
(
image
*
runtimeapi
.
ImageSpec
)
(
*
runtimeapi
.
Image
,
error
)
// PullImage pulls an image with the authentication config.
// PullImage pulls an image with the authentication config.
PullImage
(
image
*
runtimeapi
.
ImageSpec
,
auth
*
runtimeapi
.
AuthConfig
)
(
string
,
error
)
PullImage
(
image
*
runtimeapi
.
ImageSpec
,
auth
*
runtimeapi
.
AuthConfig
,
podSandboxConfig
*
runtimeapi
.
PodSandboxConfig
)
(
string
,
error
)
// RemoveImage removes the image.
// RemoveImage removes the image.
RemoveImage
(
image
*
runtimeapi
.
ImageSpec
)
error
RemoveImage
(
image
*
runtimeapi
.
ImageSpec
)
error
// ImageFsInfo returns information of the filesystem that is used to store images.
// ImageFsInfo returns information of the filesystem that is used to store images.
...
...
pkg/kubelet/apis/cri/testing/fake_image_service.go
View file @
5e2ed11c
...
@@ -105,7 +105,7 @@ func (r *FakeImageService) ImageStatus(image *runtimeapi.ImageSpec) (*runtimeapi
...
@@ -105,7 +105,7 @@ func (r *FakeImageService) ImageStatus(image *runtimeapi.ImageSpec) (*runtimeapi
return
r
.
Images
[
image
.
Image
],
nil
return
r
.
Images
[
image
.
Image
],
nil
}
}
func
(
r
*
FakeImageService
)
PullImage
(
image
*
runtimeapi
.
ImageSpec
,
auth
*
runtimeapi
.
AuthConfig
)
(
string
,
error
)
{
func
(
r
*
FakeImageService
)
PullImage
(
image
*
runtimeapi
.
ImageSpec
,
auth
*
runtimeapi
.
AuthConfig
,
podSandboxConfig
*
runtimeapi
.
PodSandboxConfig
)
(
string
,
error
)
{
r
.
Lock
()
r
.
Lock
()
defer
r
.
Unlock
()
defer
r
.
Unlock
()
...
...
pkg/kubelet/container/runtime.go
View file @
5e2ed11c
...
@@ -137,7 +137,7 @@ type StreamingRuntime interface {
...
@@ -137,7 +137,7 @@ type StreamingRuntime interface {
type
ImageService
interface
{
type
ImageService
interface
{
// PullImage pulls an image from the network to local storage using the supplied
// PullImage pulls an image from the network to local storage using the supplied
// secrets if necessary. It returns a reference (digest or ID) to the pulled image.
// secrets if necessary. It returns a reference (digest or ID) to the pulled image.
PullImage
(
image
ImageSpec
,
pullSecrets
[]
v1
.
Secret
)
(
string
,
error
)
PullImage
(
image
ImageSpec
,
pullSecrets
[]
v1
.
Secret
,
podSandboxConfig
*
runtimeapi
.
PodSandboxConfig
)
(
string
,
error
)
// GetImageRef gets the reference (digest or ID) of the image which has already been in
// GetImageRef gets the reference (digest or ID) of the image which has already been in
// the local storage. It returns ("", nil) if the image isn't in the local storage.
// the local storage. It returns ("", nil) if the image isn't in the local storage.
GetImageRef
(
image
ImageSpec
)
(
string
,
error
)
GetImageRef
(
image
ImageSpec
)
(
string
,
error
)
...
...
pkg/kubelet/container/testing/fake_runtime.go
View file @
5e2ed11c
...
@@ -28,6 +28,7 @@ import (
...
@@ -28,6 +28,7 @@ import (
"k8s.io/api/core/v1"
"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/util/flowcontrol"
"k8s.io/client-go/util/flowcontrol"
runtimeapi
"k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2"
.
"k8s.io/kubernetes/pkg/kubelet/container"
.
"k8s.io/kubernetes/pkg/kubelet/container"
"k8s.io/kubernetes/pkg/volume"
"k8s.io/kubernetes/pkg/volume"
)
)
...
@@ -298,7 +299,7 @@ func (f *FakeRuntime) GetContainerLogs(_ context.Context, pod *v1.Pod, container
...
@@ -298,7 +299,7 @@ func (f *FakeRuntime) GetContainerLogs(_ context.Context, pod *v1.Pod, container
return
f
.
Err
return
f
.
Err
}
}
func
(
f
*
FakeRuntime
)
PullImage
(
image
ImageSpec
,
pullSecrets
[]
v1
.
Secret
)
(
string
,
error
)
{
func
(
f
*
FakeRuntime
)
PullImage
(
image
ImageSpec
,
pullSecrets
[]
v1
.
Secret
,
podSandboxConfig
*
runtimeapi
.
PodSandboxConfig
)
(
string
,
error
)
{
f
.
Lock
()
f
.
Lock
()
defer
f
.
Unlock
()
defer
f
.
Unlock
()
...
...
pkg/kubelet/container/testing/runtime_mock.go
View file @
5e2ed11c
...
@@ -26,6 +26,7 @@ import (
...
@@ -26,6 +26,7 @@ import (
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/tools/remotecommand"
"k8s.io/client-go/tools/remotecommand"
"k8s.io/client-go/util/flowcontrol"
"k8s.io/client-go/util/flowcontrol"
runtimeapi
"k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2"
.
"k8s.io/kubernetes/pkg/kubelet/container"
.
"k8s.io/kubernetes/pkg/kubelet/container"
"k8s.io/kubernetes/pkg/volume"
"k8s.io/kubernetes/pkg/volume"
)
)
...
@@ -106,7 +107,7 @@ func (r *Mock) GetContainerLogs(_ context.Context, pod *v1.Pod, containerID Cont
...
@@ -106,7 +107,7 @@ func (r *Mock) GetContainerLogs(_ context.Context, pod *v1.Pod, containerID Cont
return
args
.
Error
(
0
)
return
args
.
Error
(
0
)
}
}
func
(
r
*
Mock
)
PullImage
(
image
ImageSpec
,
pullSecrets
[]
v1
.
Secret
)
(
string
,
error
)
{
func
(
r
*
Mock
)
PullImage
(
image
ImageSpec
,
pullSecrets
[]
v1
.
Secret
,
podSandboxConfig
*
runtimeapi
.
PodSandboxConfig
)
(
string
,
error
)
{
args
:=
r
.
Called
(
image
,
pullSecrets
)
args
:=
r
.
Called
(
image
,
pullSecrets
)
return
image
.
Image
,
args
.
Error
(
0
)
return
image
.
Image
,
args
.
Error
(
0
)
}
}
...
...
pkg/kubelet/images/BUILD
View file @
5e2ed11c
...
@@ -18,6 +18,7 @@ go_library(
...
@@ -18,6 +18,7 @@ go_library(
],
],
importpath = "k8s.io/kubernetes/pkg/kubelet/images",
importpath = "k8s.io/kubernetes/pkg/kubelet/images",
deps = [
deps = [
"//pkg/kubelet/apis/cri/runtime/v1alpha2:go_default_library",
"//pkg/kubelet/apis/stats/v1alpha1:go_default_library",
"//pkg/kubelet/apis/stats/v1alpha1:go_default_library",
"//pkg/kubelet/container:go_default_library",
"//pkg/kubelet/container:go_default_library",
"//pkg/kubelet/events:go_default_library",
"//pkg/kubelet/events:go_default_library",
...
...
pkg/kubelet/images/helpers.go
View file @
5e2ed11c
...
@@ -21,6 +21,7 @@ import (
...
@@ -21,6 +21,7 @@ import (
"k8s.io/api/core/v1"
"k8s.io/api/core/v1"
"k8s.io/client-go/util/flowcontrol"
"k8s.io/client-go/util/flowcontrol"
runtimeapi
"k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
)
)
...
@@ -42,9 +43,9 @@ type throttledImageService struct {
...
@@ -42,9 +43,9 @@ type throttledImageService struct {
limiter
flowcontrol
.
RateLimiter
limiter
flowcontrol
.
RateLimiter
}
}
func
(
ts
throttledImageService
)
PullImage
(
image
kubecontainer
.
ImageSpec
,
secrets
[]
v1
.
Secret
)
(
string
,
error
)
{
func
(
ts
throttledImageService
)
PullImage
(
image
kubecontainer
.
ImageSpec
,
secrets
[]
v1
.
Secret
,
podSandboxConfig
*
runtimeapi
.
PodSandboxConfig
)
(
string
,
error
)
{
if
ts
.
limiter
.
TryAccept
()
{
if
ts
.
limiter
.
TryAccept
()
{
return
ts
.
ImageService
.
PullImage
(
image
,
secrets
)
return
ts
.
ImageService
.
PullImage
(
image
,
secrets
,
podSandboxConfig
)
}
}
return
""
,
fmt
.
Errorf
(
"pull QPS exceeded"
)
return
""
,
fmt
.
Errorf
(
"pull QPS exceeded"
)
}
}
pkg/kubelet/images/image_manager.go
View file @
5e2ed11c
...
@@ -24,6 +24,8 @@ import (
...
@@ -24,6 +24,8 @@ import (
"k8s.io/client-go/tools/record"
"k8s.io/client-go/tools/record"
"k8s.io/client-go/util/flowcontrol"
"k8s.io/client-go/util/flowcontrol"
"k8s.io/klog"
"k8s.io/klog"
runtimeapi
"k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
"k8s.io/kubernetes/pkg/kubelet/events"
"k8s.io/kubernetes/pkg/kubelet/events"
"k8s.io/kubernetes/pkg/util/parsers"
"k8s.io/kubernetes/pkg/util/parsers"
...
@@ -84,7 +86,7 @@ func (m *imageManager) logIt(ref *v1.ObjectReference, eventtype, event, prefix,
...
@@ -84,7 +86,7 @@ func (m *imageManager) logIt(ref *v1.ObjectReference, eventtype, event, prefix,
// EnsureImageExists pulls the image for the specified pod and container, and returns
// EnsureImageExists pulls the image for the specified pod and container, and returns
// (imageRef, error message, error).
// (imageRef, error message, error).
func
(
m
*
imageManager
)
EnsureImageExists
(
pod
*
v1
.
Pod
,
container
*
v1
.
Container
,
pullSecrets
[]
v1
.
Secret
)
(
string
,
string
,
error
)
{
func
(
m
*
imageManager
)
EnsureImageExists
(
pod
*
v1
.
Pod
,
container
*
v1
.
Container
,
pullSecrets
[]
v1
.
Secret
,
podSandboxConfig
*
runtimeapi
.
PodSandboxConfig
)
(
string
,
string
,
error
)
{
logPrefix
:=
fmt
.
Sprintf
(
"%s/%s"
,
pod
.
Name
,
container
.
Image
)
logPrefix
:=
fmt
.
Sprintf
(
"%s/%s"
,
pod
.
Name
,
container
.
Image
)
ref
,
err
:=
kubecontainer
.
GenerateContainerRef
(
pod
,
container
)
ref
,
err
:=
kubecontainer
.
GenerateContainerRef
(
pod
,
container
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -127,7 +129,7 @@ func (m *imageManager) EnsureImageExists(pod *v1.Pod, container *v1.Container, p
...
@@ -127,7 +129,7 @@ func (m *imageManager) EnsureImageExists(pod *v1.Pod, container *v1.Container, p
}
}
m
.
logIt
(
ref
,
v1
.
EventTypeNormal
,
events
.
PullingImage
,
logPrefix
,
fmt
.
Sprintf
(
"pulling image %q"
,
container
.
Image
),
klog
.
Info
)
m
.
logIt
(
ref
,
v1
.
EventTypeNormal
,
events
.
PullingImage
,
logPrefix
,
fmt
.
Sprintf
(
"pulling image %q"
,
container
.
Image
),
klog
.
Info
)
pullChan
:=
make
(
chan
pullResult
)
pullChan
:=
make
(
chan
pullResult
)
m
.
puller
.
pullImage
(
spec
,
pullSecrets
,
pullChan
)
m
.
puller
.
pullImage
(
spec
,
pullSecrets
,
pullChan
,
podSandboxConfig
)
imagePullResult
:=
<-
pullChan
imagePullResult
:=
<-
pullChan
if
imagePullResult
.
err
!=
nil
{
if
imagePullResult
.
err
!=
nil
{
m
.
logIt
(
ref
,
v1
.
EventTypeWarning
,
events
.
FailedToPullImage
,
logPrefix
,
fmt
.
Sprintf
(
"Failed to pull image %q: %v"
,
container
.
Image
,
imagePullResult
.
err
),
klog
.
Warning
)
m
.
logIt
(
ref
,
v1
.
EventTypeWarning
,
events
.
FailedToPullImage
,
logPrefix
,
fmt
.
Sprintf
(
"Failed to pull image %q: %v"
,
container
.
Image
,
imagePullResult
.
err
),
klog
.
Warning
)
...
...
pkg/kubelet/images/image_manager_test.go
View file @
5e2ed11c
...
@@ -151,7 +151,7 @@ func TestParallelPuller(t *testing.T) {
...
@@ -151,7 +151,7 @@ func TestParallelPuller(t *testing.T) {
for
tick
,
expected
:=
range
c
.
expected
{
for
tick
,
expected
:=
range
c
.
expected
{
fakeRuntime
.
CalledFunctions
=
nil
fakeRuntime
.
CalledFunctions
=
nil
fakeClock
.
Step
(
time
.
Second
)
fakeClock
.
Step
(
time
.
Second
)
_
,
_
,
err
:=
puller
.
EnsureImageExists
(
pod
,
container
,
nil
)
_
,
_
,
err
:=
puller
.
EnsureImageExists
(
pod
,
container
,
nil
,
nil
)
assert
.
NoError
(
t
,
fakeRuntime
.
AssertCalls
(
expected
.
calls
),
"in test %d tick=%d"
,
i
,
tick
)
assert
.
NoError
(
t
,
fakeRuntime
.
AssertCalls
(
expected
.
calls
),
"in test %d tick=%d"
,
i
,
tick
)
assert
.
Equal
(
t
,
expected
.
err
,
err
,
"in test %d tick=%d"
,
i
,
tick
)
assert
.
Equal
(
t
,
expected
.
err
,
err
,
"in test %d tick=%d"
,
i
,
tick
)
}
}
...
@@ -176,7 +176,7 @@ func TestSerializedPuller(t *testing.T) {
...
@@ -176,7 +176,7 @@ func TestSerializedPuller(t *testing.T) {
for
tick
,
expected
:=
range
c
.
expected
{
for
tick
,
expected
:=
range
c
.
expected
{
fakeRuntime
.
CalledFunctions
=
nil
fakeRuntime
.
CalledFunctions
=
nil
fakeClock
.
Step
(
time
.
Second
)
fakeClock
.
Step
(
time
.
Second
)
_
,
_
,
err
:=
puller
.
EnsureImageExists
(
pod
,
container
,
nil
)
_
,
_
,
err
:=
puller
.
EnsureImageExists
(
pod
,
container
,
nil
,
nil
)
assert
.
NoError
(
t
,
fakeRuntime
.
AssertCalls
(
expected
.
calls
),
"in test %d tick=%d"
,
i
,
tick
)
assert
.
NoError
(
t
,
fakeRuntime
.
AssertCalls
(
expected
.
calls
),
"in test %d tick=%d"
,
i
,
tick
)
assert
.
Equal
(
t
,
expected
.
err
,
err
,
"in test %d tick=%d"
,
i
,
tick
)
assert
.
Equal
(
t
,
expected
.
err
,
err
,
"in test %d tick=%d"
,
i
,
tick
)
}
}
...
...
pkg/kubelet/images/puller.go
View file @
5e2ed11c
...
@@ -21,6 +21,7 @@ import (
...
@@ -21,6 +21,7 @@ import (
"k8s.io/api/core/v1"
"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/apimachinery/pkg/util/wait"
runtimeapi
"k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
)
)
...
@@ -30,7 +31,7 @@ type pullResult struct {
...
@@ -30,7 +31,7 @@ type pullResult struct {
}
}
type
imagePuller
interface
{
type
imagePuller
interface
{
pullImage
(
kubecontainer
.
ImageSpec
,
[]
v1
.
Secret
,
chan
<-
pullResult
)
pullImage
(
kubecontainer
.
ImageSpec
,
[]
v1
.
Secret
,
chan
<-
pullResult
,
*
runtimeapi
.
PodSandboxConfig
)
}
}
var
_
,
_
imagePuller
=
&
parallelImagePuller
{},
&
serialImagePuller
{}
var
_
,
_
imagePuller
=
&
parallelImagePuller
{},
&
serialImagePuller
{}
...
@@ -43,9 +44,9 @@ func newParallelImagePuller(imageService kubecontainer.ImageService) imagePuller
...
@@ -43,9 +44,9 @@ func newParallelImagePuller(imageService kubecontainer.ImageService) imagePuller
return
&
parallelImagePuller
{
imageService
}
return
&
parallelImagePuller
{
imageService
}
}
}
func
(
pip
*
parallelImagePuller
)
pullImage
(
spec
kubecontainer
.
ImageSpec
,
pullSecrets
[]
v1
.
Secret
,
pullChan
chan
<-
pullResult
)
{
func
(
pip
*
parallelImagePuller
)
pullImage
(
spec
kubecontainer
.
ImageSpec
,
pullSecrets
[]
v1
.
Secret
,
pullChan
chan
<-
pullResult
,
podSandboxConfig
*
runtimeapi
.
PodSandboxConfig
)
{
go
func
()
{
go
func
()
{
imageRef
,
err
:=
pip
.
imageService
.
PullImage
(
spec
,
pullSecrets
)
imageRef
,
err
:=
pip
.
imageService
.
PullImage
(
spec
,
pullSecrets
,
podSandboxConfig
)
pullChan
<-
pullResult
{
pullChan
<-
pullResult
{
imageRef
:
imageRef
,
imageRef
:
imageRef
,
err
:
err
,
err
:
err
,
...
@@ -68,22 +69,24 @@ func newSerialImagePuller(imageService kubecontainer.ImageService) imagePuller {
...
@@ -68,22 +69,24 @@ func newSerialImagePuller(imageService kubecontainer.ImageService) imagePuller {
}
}
type
imagePullRequest
struct
{
type
imagePullRequest
struct
{
spec
kubecontainer
.
ImageSpec
spec
kubecontainer
.
ImageSpec
pullSecrets
[]
v1
.
Secret
pullSecrets
[]
v1
.
Secret
pullChan
chan
<-
pullResult
pullChan
chan
<-
pullResult
podSandboxConfig
*
runtimeapi
.
PodSandboxConfig
}
}
func
(
sip
*
serialImagePuller
)
pullImage
(
spec
kubecontainer
.
ImageSpec
,
pullSecrets
[]
v1
.
Secret
,
pullChan
chan
<-
pullResult
)
{
func
(
sip
*
serialImagePuller
)
pullImage
(
spec
kubecontainer
.
ImageSpec
,
pullSecrets
[]
v1
.
Secret
,
pullChan
chan
<-
pullResult
,
podSandboxConfig
*
runtimeapi
.
PodSandboxConfig
)
{
sip
.
pullRequests
<-
&
imagePullRequest
{
sip
.
pullRequests
<-
&
imagePullRequest
{
spec
:
spec
,
spec
:
spec
,
pullSecrets
:
pullSecrets
,
pullSecrets
:
pullSecrets
,
pullChan
:
pullChan
,
pullChan
:
pullChan
,
podSandboxConfig
:
podSandboxConfig
,
}
}
}
}
func
(
sip
*
serialImagePuller
)
processImagePullRequests
()
{
func
(
sip
*
serialImagePuller
)
processImagePullRequests
()
{
for
pullRequest
:=
range
sip
.
pullRequests
{
for
pullRequest
:=
range
sip
.
pullRequests
{
imageRef
,
err
:=
sip
.
imageService
.
PullImage
(
pullRequest
.
spec
,
pullRequest
.
pullSecrets
)
imageRef
,
err
:=
sip
.
imageService
.
PullImage
(
pullRequest
.
spec
,
pullRequest
.
pullSecrets
,
pullRequest
.
podSandboxConfig
)
pullRequest
.
pullChan
<-
pullResult
{
pullRequest
.
pullChan
<-
pullResult
{
imageRef
:
imageRef
,
imageRef
:
imageRef
,
err
:
err
,
err
:
err
,
...
...
pkg/kubelet/images/types.go
View file @
5e2ed11c
...
@@ -20,6 +20,7 @@ import (
...
@@ -20,6 +20,7 @@ import (
"errors"
"errors"
"k8s.io/api/core/v1"
"k8s.io/api/core/v1"
runtimeapi
"k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2"
)
)
var
(
var
(
...
@@ -49,7 +50,7 @@ var (
...
@@ -49,7 +50,7 @@ var (
// Implementations are expected to be thread safe.
// Implementations are expected to be thread safe.
type
ImageManager
interface
{
type
ImageManager
interface
{
// EnsureImageExists ensures that image specified in `container` exists.
// EnsureImageExists ensures that image specified in `container` exists.
EnsureImageExists
(
pod
*
v1
.
Pod
,
container
*
v1
.
Container
,
pullSecrets
[]
v1
.
Secret
)
(
string
,
string
,
error
)
EnsureImageExists
(
pod
*
v1
.
Pod
,
container
*
v1
.
Container
,
pullSecrets
[]
v1
.
Secret
,
podSandboxConfig
*
runtimeapi
.
PodSandboxConfig
)
(
string
,
string
,
error
)
// TODO(ronl): consolidating image managing and deleting operation in this interface
// TODO(ronl): consolidating image managing and deleting operation in this interface
}
}
pkg/kubelet/kuberuntime/instrumented_services.go
View file @
5e2ed11c
...
@@ -275,11 +275,11 @@ func (in instrumentedImageManagerService) ImageStatus(image *runtimeapi.ImageSpe
...
@@ -275,11 +275,11 @@ func (in instrumentedImageManagerService) ImageStatus(image *runtimeapi.ImageSpe
return
out
,
err
return
out
,
err
}
}
func
(
in
instrumentedImageManagerService
)
PullImage
(
image
*
runtimeapi
.
ImageSpec
,
auth
*
runtimeapi
.
AuthConfig
)
(
string
,
error
)
{
func
(
in
instrumentedImageManagerService
)
PullImage
(
image
*
runtimeapi
.
ImageSpec
,
auth
*
runtimeapi
.
AuthConfig
,
podSandboxConfig
*
runtimeapi
.
PodSandboxConfig
)
(
string
,
error
)
{
const
operation
=
"pull_image"
const
operation
=
"pull_image"
defer
recordOperation
(
operation
,
time
.
Now
())
defer
recordOperation
(
operation
,
time
.
Now
())
imageRef
,
err
:=
in
.
service
.
PullImage
(
image
,
auth
)
imageRef
,
err
:=
in
.
service
.
PullImage
(
image
,
auth
,
podSandboxConfig
)
recordError
(
operation
,
err
)
recordError
(
operation
,
err
)
return
imageRef
,
err
return
imageRef
,
err
}
}
...
...
pkg/kubelet/kuberuntime/kuberuntime_container.go
View file @
5e2ed11c
...
@@ -92,7 +92,7 @@ func (m *kubeGenericRuntimeManager) recordContainerEvent(pod *v1.Pod, container
...
@@ -92,7 +92,7 @@ func (m *kubeGenericRuntimeManager) recordContainerEvent(pod *v1.Pod, container
// * run the post start lifecycle hooks (if applicable)
// * run the post start lifecycle hooks (if applicable)
func
(
m
*
kubeGenericRuntimeManager
)
startContainer
(
podSandboxID
string
,
podSandboxConfig
*
runtimeapi
.
PodSandboxConfig
,
container
*
v1
.
Container
,
pod
*
v1
.
Pod
,
podStatus
*
kubecontainer
.
PodStatus
,
pullSecrets
[]
v1
.
Secret
,
podIP
string
,
containerType
kubecontainer
.
ContainerType
)
(
string
,
error
)
{
func
(
m
*
kubeGenericRuntimeManager
)
startContainer
(
podSandboxID
string
,
podSandboxConfig
*
runtimeapi
.
PodSandboxConfig
,
container
*
v1
.
Container
,
pod
*
v1
.
Pod
,
podStatus
*
kubecontainer
.
PodStatus
,
pullSecrets
[]
v1
.
Secret
,
podIP
string
,
containerType
kubecontainer
.
ContainerType
)
(
string
,
error
)
{
// Step 1: pull the image.
// Step 1: pull the image.
imageRef
,
msg
,
err
:=
m
.
imagePuller
.
EnsureImageExists
(
pod
,
container
,
pullSecrets
)
imageRef
,
msg
,
err
:=
m
.
imagePuller
.
EnsureImageExists
(
pod
,
container
,
pullSecrets
,
podSandboxConfig
)
if
err
!=
nil
{
if
err
!=
nil
{
m
.
recordContainerEvent
(
pod
,
container
,
""
,
v1
.
EventTypeWarning
,
events
.
FailedToCreateContainer
,
"Error: %v"
,
grpc
.
ErrorDesc
(
err
))
m
.
recordContainerEvent
(
pod
,
container
,
""
,
v1
.
EventTypeWarning
,
events
.
FailedToCreateContainer
,
"Error: %v"
,
grpc
.
ErrorDesc
(
err
))
return
msg
,
err
return
msg
,
err
...
...
pkg/kubelet/kuberuntime/kuberuntime_container_linux_test.go
View file @
5e2ed11c
...
@@ -124,7 +124,7 @@ func TestGenerateContainerConfig(t *testing.T) {
...
@@ -124,7 +124,7 @@ func TestGenerateContainerConfig(t *testing.T) {
_
,
_
,
err
=
m
.
generateContainerConfig
(
&
podWithContainerSecurityContext
.
Spec
.
Containers
[
0
],
podWithContainerSecurityContext
,
0
,
""
,
podWithContainerSecurityContext
.
Spec
.
Containers
[
0
]
.
Image
,
kubecontainer
.
ContainerTypeRegular
)
_
,
_
,
err
=
m
.
generateContainerConfig
(
&
podWithContainerSecurityContext
.
Spec
.
Containers
[
0
],
podWithContainerSecurityContext
,
0
,
""
,
podWithContainerSecurityContext
.
Spec
.
Containers
[
0
]
.
Image
,
kubecontainer
.
ContainerTypeRegular
)
assert
.
Error
(
t
,
err
)
assert
.
Error
(
t
,
err
)
imageID
,
_
:=
imageService
.
PullImage
(
&
runtimeapi
.
ImageSpec
{
Image
:
"busybox"
},
nil
)
imageID
,
_
:=
imageService
.
PullImage
(
&
runtimeapi
.
ImageSpec
{
Image
:
"busybox"
},
nil
,
nil
)
image
,
_
:=
imageService
.
ImageStatus
(
&
runtimeapi
.
ImageSpec
{
Image
:
imageID
})
image
,
_
:=
imageService
.
ImageStatus
(
&
runtimeapi
.
ImageSpec
{
Image
:
imageID
})
image
.
Uid
=
nil
image
.
Uid
=
nil
...
...
pkg/kubelet/kuberuntime/kuberuntime_image.go
View file @
5e2ed11c
...
@@ -29,7 +29,7 @@ import (
...
@@ -29,7 +29,7 @@ import (
// PullImage pulls an image from the network to local storage using the supplied
// PullImage pulls an image from the network to local storage using the supplied
// secrets if necessary.
// secrets if necessary.
func
(
m
*
kubeGenericRuntimeManager
)
PullImage
(
image
kubecontainer
.
ImageSpec
,
pullSecrets
[]
v1
.
Secret
)
(
string
,
error
)
{
func
(
m
*
kubeGenericRuntimeManager
)
PullImage
(
image
kubecontainer
.
ImageSpec
,
pullSecrets
[]
v1
.
Secret
,
podSandboxConfig
*
runtimeapi
.
PodSandboxConfig
)
(
string
,
error
)
{
img
:=
image
.
Image
img
:=
image
.
Image
repoToPull
,
_
,
_
,
err
:=
parsers
.
ParseImageName
(
img
)
repoToPull
,
_
,
_
,
err
:=
parsers
.
ParseImageName
(
img
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -46,7 +46,7 @@ func (m *kubeGenericRuntimeManager) PullImage(image kubecontainer.ImageSpec, pul
...
@@ -46,7 +46,7 @@ func (m *kubeGenericRuntimeManager) PullImage(image kubecontainer.ImageSpec, pul
if
!
withCredentials
{
if
!
withCredentials
{
klog
.
V
(
3
)
.
Infof
(
"Pulling image %q without credentials"
,
img
)
klog
.
V
(
3
)
.
Infof
(
"Pulling image %q without credentials"
,
img
)
imageRef
,
err
:=
m
.
imageService
.
PullImage
(
imgSpec
,
nil
)
imageRef
,
err
:=
m
.
imageService
.
PullImage
(
imgSpec
,
nil
,
podSandboxConfig
)
if
err
!=
nil
{
if
err
!=
nil
{
klog
.
Errorf
(
"Pull image %q failed: %v"
,
img
,
err
)
klog
.
Errorf
(
"Pull image %q failed: %v"
,
img
,
err
)
return
""
,
err
return
""
,
err
...
@@ -67,7 +67,7 @@ func (m *kubeGenericRuntimeManager) PullImage(image kubecontainer.ImageSpec, pul
...
@@ -67,7 +67,7 @@ func (m *kubeGenericRuntimeManager) PullImage(image kubecontainer.ImageSpec, pul
RegistryToken
:
authConfig
.
RegistryToken
,
RegistryToken
:
authConfig
.
RegistryToken
,
}
}
imageRef
,
err
:=
m
.
imageService
.
PullImage
(
imgSpec
,
auth
)
imageRef
,
err
:=
m
.
imageService
.
PullImage
(
imgSpec
,
auth
,
podSandboxConfig
)
// If there was no error, return success
// If there was no error, return success
if
err
==
nil
{
if
err
==
nil
{
return
imageRef
,
nil
return
imageRef
,
nil
...
...
pkg/kubelet/kuberuntime/kuberuntime_image_test.go
View file @
5e2ed11c
...
@@ -34,7 +34,7 @@ func TestPullImage(t *testing.T) {
...
@@ -34,7 +34,7 @@ func TestPullImage(t *testing.T) {
_
,
_
,
fakeManager
,
err
:=
createTestRuntimeManager
()
_
,
_
,
fakeManager
,
err
:=
createTestRuntimeManager
()
assert
.
NoError
(
t
,
err
)
assert
.
NoError
(
t
,
err
)
imageRef
,
err
:=
fakeManager
.
PullImage
(
kubecontainer
.
ImageSpec
{
Image
:
"busybox"
},
nil
)
imageRef
,
err
:=
fakeManager
.
PullImage
(
kubecontainer
.
ImageSpec
{
Image
:
"busybox"
},
nil
,
nil
)
assert
.
NoError
(
t
,
err
)
assert
.
NoError
(
t
,
err
)
assert
.
Equal
(
t
,
"busybox"
,
imageRef
)
assert
.
Equal
(
t
,
"busybox"
,
imageRef
)
...
@@ -77,7 +77,7 @@ func TestRemoveImage(t *testing.T) {
...
@@ -77,7 +77,7 @@ func TestRemoveImage(t *testing.T) {
_
,
fakeImageService
,
fakeManager
,
err
:=
createTestRuntimeManager
()
_
,
fakeImageService
,
fakeManager
,
err
:=
createTestRuntimeManager
()
assert
.
NoError
(
t
,
err
)
assert
.
NoError
(
t
,
err
)
_
,
err
=
fakeManager
.
PullImage
(
kubecontainer
.
ImageSpec
{
Image
:
"busybox"
},
nil
)
_
,
err
=
fakeManager
.
PullImage
(
kubecontainer
.
ImageSpec
{
Image
:
"busybox"
},
nil
,
nil
)
assert
.
NoError
(
t
,
err
)
assert
.
NoError
(
t
,
err
)
assert
.
Equal
(
t
,
1
,
len
(
fakeImageService
.
Images
))
assert
.
Equal
(
t
,
1
,
len
(
fakeImageService
.
Images
))
...
@@ -166,7 +166,7 @@ func TestPullWithSecrets(t *testing.T) {
...
@@ -166,7 +166,7 @@ func TestPullWithSecrets(t *testing.T) {
_
,
fakeImageService
,
fakeManager
,
err
:=
customTestRuntimeManager
(
builtInKeyRing
)
_
,
fakeImageService
,
fakeManager
,
err
:=
customTestRuntimeManager
(
builtInKeyRing
)
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
_
,
err
=
fakeManager
.
PullImage
(
kubecontainer
.
ImageSpec
{
Image
:
test
.
imageName
},
test
.
passedSecrets
)
_
,
err
=
fakeManager
.
PullImage
(
kubecontainer
.
ImageSpec
{
Image
:
test
.
imageName
},
test
.
passedSecrets
,
nil
)
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
fakeImageService
.
AssertImagePulledWithAuth
(
t
,
&
runtimeapi
.
ImageSpec
{
Image
:
test
.
imageName
},
test
.
expectedAuth
,
description
)
fakeImageService
.
AssertImagePulledWithAuth
(
t
,
&
runtimeapi
.
ImageSpec
{
Image
:
test
.
imageName
},
test
.
expectedAuth
,
description
)
}
}
...
...
pkg/kubelet/remote/fake/fake_image_service.go
View file @
5e2ed11c
...
@@ -48,7 +48,7 @@ func (f *RemoteRuntime) ImageStatus(ctx context.Context, req *kubeapi.ImageStatu
...
@@ -48,7 +48,7 @@ func (f *RemoteRuntime) ImageStatus(ctx context.Context, req *kubeapi.ImageStatu
// PullImage pulls an image with authentication config.
// PullImage pulls an image with authentication config.
func
(
f
*
RemoteRuntime
)
PullImage
(
ctx
context
.
Context
,
req
*
kubeapi
.
PullImageRequest
)
(
*
kubeapi
.
PullImageResponse
,
error
)
{
func
(
f
*
RemoteRuntime
)
PullImage
(
ctx
context
.
Context
,
req
*
kubeapi
.
PullImageRequest
)
(
*
kubeapi
.
PullImageResponse
,
error
)
{
image
,
err
:=
f
.
ImageService
.
PullImage
(
req
.
Image
,
req
.
Auth
)
image
,
err
:=
f
.
ImageService
.
PullImage
(
req
.
Image
,
req
.
Auth
,
req
.
SandboxConfig
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
...
pkg/kubelet/remote/remote_image.go
View file @
5e2ed11c
...
@@ -100,13 +100,14 @@ func (r *RemoteImageService) ImageStatus(image *runtimeapi.ImageSpec) (*runtimea
...
@@ -100,13 +100,14 @@ func (r *RemoteImageService) ImageStatus(image *runtimeapi.ImageSpec) (*runtimea
}
}
// PullImage pulls an image with authentication config.
// PullImage pulls an image with authentication config.
func
(
r
*
RemoteImageService
)
PullImage
(
image
*
runtimeapi
.
ImageSpec
,
auth
*
runtimeapi
.
AuthConfig
)
(
string
,
error
)
{
func
(
r
*
RemoteImageService
)
PullImage
(
image
*
runtimeapi
.
ImageSpec
,
auth
*
runtimeapi
.
AuthConfig
,
podSandboxConfig
*
runtimeapi
.
PodSandboxConfig
)
(
string
,
error
)
{
ctx
,
cancel
:=
getContextWithCancel
()
ctx
,
cancel
:=
getContextWithCancel
()
defer
cancel
()
defer
cancel
()
resp
,
err
:=
r
.
imageClient
.
PullImage
(
ctx
,
&
runtimeapi
.
PullImageRequest
{
resp
,
err
:=
r
.
imageClient
.
PullImage
(
ctx
,
&
runtimeapi
.
PullImageRequest
{
Image
:
image
,
Image
:
image
,
Auth
:
auth
,
Auth
:
auth
,
SandboxConfig
:
podSandboxConfig
,
})
})
if
err
!=
nil
{
if
err
!=
nil
{
klog
.
Errorf
(
"PullImage %q from image service failed: %v"
,
image
.
Image
,
err
)
klog
.
Errorf
(
"PullImage %q from image service failed: %v"
,
image
.
Image
,
err
)
...
...
test/e2e_node/image_list.go
View file @
5e2ed11c
...
@@ -96,7 +96,7 @@ func (rp *remotePuller) Pull(image string) ([]byte, error) {
...
@@ -96,7 +96,7 @@ func (rp *remotePuller) Pull(image string) ([]byte, error) {
if
err
==
nil
&&
imageStatus
!=
nil
{
if
err
==
nil
&&
imageStatus
!=
nil
{
return
nil
,
nil
return
nil
,
nil
}
}
_
,
err
=
rp
.
imageService
.
PullImage
(
&
runtimeapi
.
ImageSpec
{
Image
:
image
},
nil
)
_
,
err
=
rp
.
imageService
.
PullImage
(
&
runtimeapi
.
ImageSpec
{
Image
:
image
},
nil
,
nil
)
return
nil
,
err
return
nil
,
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