Skip to content

Commit

Permalink
Optimization to determine whether the pod state is consistent logic
Browse files Browse the repository at this point in the history
Signed-off-by: dafu-wu <[email protected]>
  • Loading branch information
dafu-wu authored and dafu-wu committed Dec 17, 2021
1 parent 3a6e489 commit 8bbd3ff
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 6 deletions.
9 changes: 7 additions & 2 deletions pkg/control/sidecarcontrol/sidecarset_control.go
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ func (c *commonControl) IsPodStateConsistent(pod *v1.Pod, sidecarContainers sets
}

allDigestImage := true
cImageIDs := util.GetPodContainerImageIDs(pod)
for _, container := range pod.Spec.Containers {
// only check whether sidecar container is consistent
if !sidecarContainers.Has(container.Name) {
Expand All @@ -165,10 +166,14 @@ func (c *commonControl) IsPodStateConsistent(pod *v1.Pod, sidecarContainers sets
//for example: docker.io/busybox@sha256:a9286defaba7b3a519d585ba0e37d0b2cbee74ebfe590960b0b1d6a5e97d1e1d
if !util.IsImageDigest(container.Image) {
allDigestImage = false
continue
break
}

if !util.IsPodContainerDigestEqual(sets.NewString(container.Name), pod) {
imageID, ok := cImageIDs[container.Name]
if !ok {
return false
}
if !util.IsContainerImageEqual(container.Image, imageID) {
return false
}
}
Expand Down
13 changes: 9 additions & 4 deletions pkg/util/pods.go
Original file line number Diff line number Diff line change
Expand Up @@ -203,17 +203,22 @@ func IsRunningAndReady(pod *v1.Pod) bool {
return pod.Status.Phase == v1.PodRunning && podutil.IsPodReady(pod)
}

func IsPodContainerDigestEqual(containers sets.String, pod *v1.Pod) bool {
cStatus := make(map[string]string, len(pod.Status.ContainerStatuses))
func GetPodContainerImageIDs(pod *v1.Pod) map[string]string {
cImageIDs := make(map[string]string, len(pod.Status.ContainerStatuses))
for i := range pod.Status.ContainerStatuses {
c := &pod.Status.ContainerStatuses[i]
//ImageID format: docker-pullable://busybox@sha256:a9286defaba7b3a519d585ba0e37d0b2cbee74ebfe590960b0b1d6a5e97d1e1d
imageID := c.ImageID
if strings.Contains(imageID, "://") {
imageID = strings.Split(imageID, "://")[1]
}
cStatus[c.Name] = imageID
cImageIDs[c.Name] = imageID
}
return cImageIDs
}

func IsPodContainerDigestEqual(containers sets.String, pod *v1.Pod) bool {
cImageIDs := GetPodContainerImageIDs(pod)

for _, container := range pod.Spec.Containers {
if !containers.Has(container.Name) {
Expand All @@ -223,7 +228,7 @@ func IsPodContainerDigestEqual(containers sets.String, pod *v1.Pod) bool {
if !IsImageDigest(container.Image) {
return false
}
imageID, ok := cStatus[container.Name]
imageID, ok := cImageIDs[container.Name]
if !ok {
return false
}
Expand Down

0 comments on commit 8bbd3ff

Please sign in to comment.