Skip to content

Commit dbb0ab0

Browse files
benrz-devBnjmnZmmrmn
authored andcommitted
avoid calling GetImageRef if pullpolicy is always
1 parent 00236ae commit dbb0ab0

File tree

2 files changed

+212
-66
lines changed

2 files changed

+212
-66
lines changed

pkg/kubelet/images/image_manager.go

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -73,19 +73,35 @@ func NewImageManager(recorder record.EventRecorder, imageService kubecontainer.I
7373
}
7474
}
7575

76-
// shouldPullImage returns whether we should pull an image according to
77-
// the presence and pull policy of the image.
78-
func shouldPullImage(pullPolicy v1.PullPolicy, imagePresent bool) bool {
79-
if pullPolicy == v1.PullNever {
80-
return false
81-
}
82-
83-
if pullPolicy == v1.PullAlways ||
84-
(pullPolicy == v1.PullIfNotPresent && (!imagePresent)) {
85-
return true
76+
// imagePullPrecheck inspects the pull policy and checks for image presence accordingly,
77+
// returning (imageRef, error msg, err) and logging any errors.
78+
func (m *imageManager) imagePullPrecheck(ctx context.Context, objRef *v1.ObjectReference, logPrefix string, pullPolicy v1.PullPolicy, spec *kubecontainer.ImageSpec, imgRef string) (imageRef string, msg string, err error) {
79+
switch pullPolicy {
80+
case v1.PullAlways:
81+
return "", msg, nil
82+
case v1.PullIfNotPresent:
83+
imageRef, err = m.imageService.GetImageRef(ctx, *spec)
84+
if err != nil {
85+
msg = fmt.Sprintf("Failed to inspect image %q: %v", imageRef, err)
86+
m.logIt(objRef, v1.EventTypeWarning, events.FailedToInspectImage, logPrefix, msg, klog.Warning)
87+
return "", msg, ErrImageInspect
88+
}
89+
return imageRef, msg, nil
90+
case v1.PullNever:
91+
imageRef, err = m.imageService.GetImageRef(ctx, *spec)
92+
if err != nil {
93+
msg = fmt.Sprintf("Failed to inspect image %q: %v", imageRef, err)
94+
m.logIt(objRef, v1.EventTypeWarning, events.FailedToInspectImage, logPrefix, msg, klog.Warning)
95+
return "", msg, ErrImageInspect
96+
}
97+
if imageRef == "" {
98+
msg = fmt.Sprintf("Container image %q is not present with pull policy of Never", imgRef)
99+
m.logIt(objRef, v1.EventTypeWarning, events.ErrImageNeverPullPolicy, logPrefix, msg, klog.Warning)
100+
return "", msg, ErrImageNeverPull
101+
}
102+
return imageRef, msg, nil
86103
}
87-
88-
return false
104+
return
89105
}
90106

91107
// records an event using ref, event msg. log to glog using prefix, msg, logFn
@@ -124,23 +140,14 @@ func (m *imageManager) EnsureImageExists(ctx context.Context, objRef *v1.ObjectR
124140
RuntimeHandler: podRuntimeHandler,
125141
}
126142

127-
imageRef, err = m.imageService.GetImageRef(ctx, spec)
143+
imageRef, message, err = m.imagePullPrecheck(ctx, objRef, logPrefix, pullPolicy, &spec, imgRef)
128144
if err != nil {
129-
msg := fmt.Sprintf("Failed to inspect image %q: %v", imgRef, err)
130-
m.logIt(objRef, v1.EventTypeWarning, events.FailedToInspectImage, logPrefix, msg, klog.Warning)
131-
return "", msg, ErrImageInspect
145+
return "", message, err
132146
}
133-
134-
present := imageRef != ""
135-
if !shouldPullImage(pullPolicy, present) {
136-
if present {
137-
msg := fmt.Sprintf("Container image %q already present on machine", imgRef)
138-
m.logIt(objRef, v1.EventTypeNormal, events.PulledImage, logPrefix, msg, klog.Info)
139-
return imageRef, "", nil
140-
}
141-
msg := fmt.Sprintf("Container image %q is not present with pull policy of Never", imgRef)
142-
m.logIt(objRef, v1.EventTypeWarning, events.ErrImageNeverPullPolicy, logPrefix, msg, klog.Warning)
143-
return "", msg, ErrImageNeverPull
147+
if imageRef != "" {
148+
msg := fmt.Sprintf("Container image %q already present on machine", imgRef)
149+
m.logIt(objRef, v1.EventTypeNormal, events.PulledImage, logPrefix, msg, klog.Info)
150+
return imageRef, msg, nil
144151
}
145152

146153
backOffKey := fmt.Sprintf("%s_%s", pod.UID, imgRef)

0 commit comments

Comments
 (0)