Pass runtimehandler from CRI pull image request
Starting with k8s cri-api v0.29.1, CRI supports new runtime handler flag Signed-off-by: Kirtana Ashok <kiashok@microsoft.com>
This commit is contained in:
parent
dd725fae25
commit
4c775fcfbf
@ -140,7 +140,7 @@ type ImageManagerService interface {
|
|||||||
// ImageStatus returns the status of the image.
|
// ImageStatus returns the status of the image.
|
||||||
ImageStatus(image *runtimeapi.ImageSpec, opts ...grpc.CallOption) (*runtimeapi.Image, error)
|
ImageStatus(image *runtimeapi.ImageSpec, opts ...grpc.CallOption) (*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, podSandboxConfig *runtimeapi.PodSandboxConfig, opts ...grpc.CallOption) (string, error)
|
PullImage(image *runtimeapi.ImageSpec, auth *runtimeapi.AuthConfig, podSandboxConfig *runtimeapi.PodSandboxConfig, runtimeHandler string, opts ...grpc.CallOption) (string, error)
|
||||||
// RemoveImage removes the image.
|
// RemoveImage removes the image.
|
||||||
RemoveImage(image *runtimeapi.ImageSpec, opts ...grpc.CallOption) error
|
RemoveImage(image *runtimeapi.ImageSpec, opts ...grpc.CallOption) 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.
|
||||||
|
@ -92,7 +92,7 @@ func testCRIImagePullTimeoutBySlowCommitWriter(t *testing.T) {
|
|||||||
|
|
||||||
ctx := namespaces.WithNamespace(logtest.WithT(context.Background(), t), k8sNamespace)
|
ctx := namespaces.WithNamespace(logtest.WithT(context.Background(), t), k8sNamespace)
|
||||||
|
|
||||||
_, err = criService.PullImage(ctx, pullProgressTestImageName, nil, nil)
|
_, err = criService.PullImage(ctx, pullProgressTestImageName, nil, nil, "")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -211,7 +211,7 @@ func testCRIImagePullTimeoutByHoldingContentOpenWriter(t *testing.T) {
|
|||||||
go func() {
|
go func() {
|
||||||
defer close(errCh)
|
defer close(errCh)
|
||||||
|
|
||||||
_, err := criService.PullImage(ctx, pullProgressTestImageName, nil, nil)
|
_, err := criService.PullImage(ctx, pullProgressTestImageName, nil, nil, "")
|
||||||
errCh <- err
|
errCh <- err
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -294,7 +294,7 @@ func testCRIImagePullTimeoutByNoDataTransferred(t *testing.T) {
|
|||||||
dctx, _, err := cli.WithLease(ctx)
|
dctx, _, err := cli.WithLease(ctx)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
_, err = criService.PullImage(dctx, fmt.Sprintf("%s/%s", mirrorURL.Host, "containerd/volume-ownership:2.1"), nil, nil)
|
_, err = criService.PullImage(dctx, fmt.Sprintf("%s/%s", mirrorURL.Host, "containerd/volume-ownership:2.1"), nil, nil, "")
|
||||||
|
|
||||||
assert.Equal(t, context.Canceled, errors.Unwrap(err), "[%v] expected canceled error, but got (%v)", idx, err)
|
assert.Equal(t, context.Canceled, errors.Unwrap(err), "[%v] expected canceled error, but got (%v)", idx, err)
|
||||||
assert.True(t, mirrorSrv.limiter.clearHitCircuitBreaker(), "[%v] expected to hit circuit breaker", idx)
|
assert.True(t, mirrorSrv.limiter.clearHitCircuitBreaker(), "[%v] expected to hit circuit breaker", idx)
|
||||||
|
@ -735,7 +735,7 @@ func EnsureImageExists(t *testing.T, imageName string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
t.Logf("Pull test image %q", imageName)
|
t.Logf("Pull test image %q", imageName)
|
||||||
imgID, err := imageService.PullImage(&runtime.ImageSpec{Image: imageName}, nil, nil)
|
imgID, err := imageService.PullImage(&runtime.ImageSpec{Image: imageName}, nil, nil, "")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
return imgID
|
return imgID
|
||||||
|
@ -116,7 +116,7 @@ func shouldRecoverAllThePodsAfterUpgrade(t *testing.T, criRuntimeService cri.Run
|
|||||||
var busyboxImage = images.Get(images.BusyBox)
|
var busyboxImage = images.Get(images.BusyBox)
|
||||||
|
|
||||||
t.Logf("Pulling image %q", busyboxImage)
|
t.Logf("Pulling image %q", busyboxImage)
|
||||||
_, err := criImageService.PullImage(&criruntime.ImageSpec{Image: busyboxImage}, nil, nil)
|
_, err := criImageService.PullImage(&criruntime.ImageSpec{Image: busyboxImage}, nil, nil, "")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
t.Log("Create first sandbox")
|
t.Log("Create first sandbox")
|
||||||
@ -195,7 +195,7 @@ func execToExistingContainer(t *testing.T, criRuntimeService cri.RuntimeService,
|
|||||||
var busyboxImage = images.Get(images.BusyBox)
|
var busyboxImage = images.Get(images.BusyBox)
|
||||||
|
|
||||||
t.Logf("Pulling image %q", busyboxImage)
|
t.Logf("Pulling image %q", busyboxImage)
|
||||||
_, err := criImageService.PullImage(&criruntime.ImageSpec{Image: busyboxImage}, nil, nil)
|
_, err := criImageService.PullImage(&criruntime.ImageSpec{Image: busyboxImage}, nil, nil, "")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
t.Log("Create sandbox")
|
t.Log("Create sandbox")
|
||||||
sbConfig := PodSandboxConfig("sandbox", "running")
|
sbConfig := PodSandboxConfig("sandbox", "running")
|
||||||
@ -263,7 +263,7 @@ func shouldManipulateContainersInPodAfterUpgrade(t *testing.T, criRuntimeService
|
|||||||
var busyboxImage = images.Get(images.BusyBox)
|
var busyboxImage = images.Get(images.BusyBox)
|
||||||
|
|
||||||
t.Logf("Pulling image %q", busyboxImage)
|
t.Logf("Pulling image %q", busyboxImage)
|
||||||
_, err := criImageService.PullImage(&criruntime.ImageSpec{Image: busyboxImage}, nil, nil)
|
_, err := criImageService.PullImage(&criruntime.ImageSpec{Image: busyboxImage}, nil, nil, "")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
t.Log("Create a sandbox")
|
t.Log("Create a sandbox")
|
||||||
@ -353,7 +353,7 @@ func shouldRecoverExistingImages(t *testing.T, criRuntimeService cri.RuntimeServ
|
|||||||
expectedRefs := []string{}
|
expectedRefs := []string{}
|
||||||
for _, img := range images {
|
for _, img := range images {
|
||||||
t.Logf("Pulling image %q", img)
|
t.Logf("Pulling image %q", img)
|
||||||
imgRef, err := criImageService.PullImage(&criruntime.ImageSpec{Image: img}, nil, nil)
|
imgRef, err := criImageService.PullImage(&criruntime.ImageSpec{Image: img}, nil, nil, "")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
expectedRefs = append(expectedRefs, imgRef)
|
expectedRefs = append(expectedRefs, imgRef)
|
||||||
}
|
}
|
||||||
|
@ -122,7 +122,7 @@ func (r *ImageService) ImageStatus(image *runtimeapi.ImageSpec, opts ...grpc.Cal
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PullImage pulls an image with authentication config.
|
// PullImage pulls an image with authentication config.
|
||||||
func (r *ImageService) PullImage(image *runtimeapi.ImageSpec, auth *runtimeapi.AuthConfig, podSandboxConfig *runtimeapi.PodSandboxConfig, opts ...grpc.CallOption) (string, error) {
|
func (r *ImageService) PullImage(image *runtimeapi.ImageSpec, auth *runtimeapi.AuthConfig, podSandboxConfig *runtimeapi.PodSandboxConfig, runtimeHandler string, opts ...grpc.CallOption) (string, error) {
|
||||||
ctx, cancel := getContextWithCancel()
|
ctx, cancel := getContextWithCancel()
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
|
@ -289,7 +289,7 @@ func (s *fakeImageService) LocalResolve(refOrID string) (imagestore.Image, error
|
|||||||
|
|
||||||
func (s *fakeImageService) ImageFSPaths() map[string]string { return make(map[string]string) }
|
func (s *fakeImageService) ImageFSPaths() map[string]string { return make(map[string]string) }
|
||||||
|
|
||||||
func (s *fakeImageService) PullImage(context.Context, string, func(string) (string, string, error), *runtime.PodSandboxConfig) (string, error) {
|
func (s *fakeImageService) PullImage(context.Context, string, func(string) (string, string, error), *runtime.PodSandboxConfig, string) (string, error) {
|
||||||
return "", errors.New("not implemented")
|
return "", errors.New("not implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,15 +108,14 @@ func (c *GRPCCRIImageService) PullImage(ctx context.Context, r *runtime.PullImag
|
|||||||
return ParseAuth(hostauth, host)
|
return ParseAuth(hostauth, host)
|
||||||
}
|
}
|
||||||
|
|
||||||
ref, err := c.CRIImageService.PullImage(ctx, imageRef, credentials, r.SandboxConfig)
|
ref, err := c.CRIImageService.PullImage(ctx, imageRef, credentials, r.SandboxConfig, r.GetImage().GetRuntimeHandler())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return &runtime.PullImageResponse{ImageRef: ref}, nil
|
return &runtime.PullImageResponse{ImageRef: ref}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *CRIImageService) PullImage(ctx context.Context, name string, credentials func(string) (string, string, error), sandboxConfig *runtime.PodSandboxConfig) (_ string, err error) {
|
func (c *CRIImageService) PullImage(ctx context.Context, name string, credentials func(string) (string, string, error), sandboxConfig *runtime.PodSandboxConfig, runtimeHandler string) (_ string, err error) {
|
||||||
|
|
||||||
span := tracing.SpanFromContext(ctx)
|
span := tracing.SpanFromContext(ctx)
|
||||||
defer func() {
|
defer func() {
|
||||||
// TODO: add domain label for imagePulls metrics, and we may need to provide a mechanism
|
// TODO: add domain label for imagePulls metrics, and we may need to provide a mechanism
|
||||||
@ -770,6 +769,8 @@ func (c *CRIImageService) snapshotterFromPodSandboxConfig(ctx context.Context, i
|
|||||||
return snapshotter, nil
|
return snapshotter, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(kiashok): honor the new CRI runtime handler field added to v0.29.0
|
||||||
|
// for image pull per runtime class support.
|
||||||
runtimeHandler, ok := s.Annotations[annotations.RuntimeHandler]
|
runtimeHandler, ok := s.Annotations[annotations.RuntimeHandler]
|
||||||
if !ok {
|
if !ok {
|
||||||
return snapshotter, nil
|
return snapshotter, nil
|
||||||
|
@ -107,7 +107,7 @@ type RuntimeService interface {
|
|||||||
type ImageService interface {
|
type ImageService interface {
|
||||||
LocalResolve(refOrID string) (imagestore.Image, error)
|
LocalResolve(refOrID string) (imagestore.Image, error)
|
||||||
GetImage(id string) (imagestore.Image, error)
|
GetImage(id string) (imagestore.Image, error)
|
||||||
PullImage(ctx context.Context, name string, creds func(string) (string, string, error), sc *runtime.PodSandboxConfig) (string, error)
|
PullImage(ctx context.Context, name string, creds func(string) (string, string, error), sc *runtime.PodSandboxConfig, runtimeHandler string) (string, error)
|
||||||
RuntimeSnapshotter(ctx context.Context, ociRuntime criconfig.Runtime) string
|
RuntimeSnapshotter(ctx context.Context, ociRuntime criconfig.Runtime) string
|
||||||
PinnedImage(string) string
|
PinnedImage(string) string
|
||||||
}
|
}
|
||||||
|
@ -80,7 +80,7 @@ func (c *Controller) Start(ctx context.Context, id string) (cin sandbox.Controll
|
|||||||
sandboxImage = criconfig.DefaultSandboxImage
|
sandboxImage = criconfig.DefaultSandboxImage
|
||||||
}
|
}
|
||||||
// Ensure sandbox container image snapshot.
|
// Ensure sandbox container image snapshot.
|
||||||
image, err := c.ensureImageExists(ctx, sandboxImage, config)
|
image, err := c.ensureImageExists(ctx, sandboxImage, config, metadata.RuntimeHandler)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return cin, fmt.Errorf("failed to get sandbox image %q: %w", sandboxImage, err)
|
return cin, fmt.Errorf("failed to get sandbox image %q: %w", sandboxImage, err)
|
||||||
}
|
}
|
||||||
@ -293,7 +293,7 @@ func (c *Controller) Create(_ctx context.Context, info sandbox.Sandbox, opts ...
|
|||||||
return c.store.Save(podSandbox)
|
return c.store.Save(podSandbox)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Controller) ensureImageExists(ctx context.Context, ref string, config *runtime.PodSandboxConfig) (*imagestore.Image, error) {
|
func (c *Controller) ensureImageExists(ctx context.Context, ref string, config *runtime.PodSandboxConfig, runtimeHandler string) (*imagestore.Image, error) {
|
||||||
image, err := c.imageService.LocalResolve(ref)
|
image, err := c.imageService.LocalResolve(ref)
|
||||||
if err != nil && !errdefs.IsNotFound(err) {
|
if err != nil && !errdefs.IsNotFound(err) {
|
||||||
return nil, fmt.Errorf("failed to get image %q: %w", ref, err)
|
return nil, fmt.Errorf("failed to get image %q: %w", ref, err)
|
||||||
@ -303,7 +303,7 @@ func (c *Controller) ensureImageExists(ctx context.Context, ref string, config *
|
|||||||
}
|
}
|
||||||
// Pull image to ensure the image exists
|
// Pull image to ensure the image exists
|
||||||
// TODO: Cleaner interface
|
// TODO: Cleaner interface
|
||||||
imageID, err := c.imageService.PullImage(ctx, ref, nil, config)
|
imageID, err := c.imageService.PullImage(ctx, ref, nil, config, runtimeHandler)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to pull image %q: %w", ref, err)
|
return nil, fmt.Errorf("failed to pull image %q: %w", ref, err)
|
||||||
}
|
}
|
||||||
|
@ -78,7 +78,7 @@ type RuntimeService interface {
|
|||||||
type ImageService interface {
|
type ImageService interface {
|
||||||
RuntimeSnapshotter(ctx context.Context, ociRuntime criconfig.Runtime) string
|
RuntimeSnapshotter(ctx context.Context, ociRuntime criconfig.Runtime) string
|
||||||
|
|
||||||
PullImage(ctx context.Context, name string, credentials func(string) (string, string, error), sandboxConfig *runtime.PodSandboxConfig) (string, error)
|
PullImage(ctx context.Context, name string, credentials func(string) (string, string, error), sandboxConfig *runtime.PodSandboxConfig, runtimeHandler string) (string, error)
|
||||||
UpdateImage(ctx context.Context, r string) error
|
UpdateImage(ctx context.Context, r string) error
|
||||||
|
|
||||||
CheckImages(ctx context.Context) error
|
CheckImages(ctx context.Context) error
|
||||||
|
Loading…
Reference in New Issue
Block a user