У меня есть небольшой скрипт, работающий в поде, который ищет последние образы приложений (dashboard:development) в моем реестре, а затем отправляет их на работающие узлы (через набор демонов).

Это действительно работает, как показано ниже.

Теперь я бы предположил, что как только модуль приложения (например, sp-pod-xx) запрашивает это изображение, kubelet не должен пытаться повторно загрузить изображение, даже если установлено imagePullPolicy: Always. Как говорится в документах, kubelet сравнивает дайджест и только тянет, если есть несоответствие:

Всегда: каждый раз, когда kubelet запускает контейнер, kubelet запрашивает реестр образа контейнера, чтобы преобразовать имя в дайджест образа. Если у kubelet есть образ контейнера с этим точным дайджестом, кэшированным локально, kubelet использует свой кэшированный образ; в противном случае kubelet извлекает образ с разрешенным дайджестом и использует этот образ для запуска контейнера.

Но, несмотря на то, что дайджесты идентичны (я это проверял), kubelet все равно перетягивает образ. Модуль App и модули Daemonset также работают на одних и тех же узлах.

Есть идеи, почему?

Журналы событий:

4m5s        Normal   Killing             pod/image-puller-ds-ldbfz                         
3m57s       Normal   SuccessfulCreate    daemonset/image-puller-ds                         Created pod: image-puller-ds-fcmts
3m57s       Normal   SuccessfulCreate    daemonset/image-puller-ds                         Created pod: image-puller-ds-fhhds
3m57s       Normal   Pulled              pod/image-puller-ds-fhhds                         Successfully pulled image "dashboard:development" in 192.717161ms
3m57s       Normal   Pulling             pod/image-puller-ds-fhhds                         Pulling image "dashboard:development"
3m56s       Normal   Started             pod/image-puller-ds-fhhds                         Started container image-puller
3m56s       Normal   Created             pod/image-puller-ds-fcmts                         Created container image-puller
3m56s       Normal   Created             pod/image-puller-ds-fhhds                         Created container image-puller
3m56s       Normal   Started             pod/image-puller-ds-fcmts                         Started container image-puller
3m56s       Normal   Pulled              pod/image-puller-ds-fhhds                         Container image "pause:0.0.1" already present on machine
3m55s       Normal   Created             pod/image-puller-ds-fcmts                         Created container pause
3m55s       Normal   SuccessfulDelete    daemonset/image-puller-ds                         Deleted pod: image-puller-ds-xt9vv
3m55s       Normal   Pulled              pod/image-puller-ds-fcmts                         Container image "pause:0.0.1" already present on machine
3m55s       Normal   Created             pod/image-puller-ds-fhhds                         Created container pause
3m55s       Normal   Started             pod/image-puller-ds-fhhds                         Started container pause
3m55s       Normal   Started             pod/image-puller-ds-fcmts                         Started container pause
3m55s       Normal   Killing             pod/image-puller-ds-xt9vv                         Stopping container pause
3m54s       Normal   Killing             pod/image-puller-ds-wgwzh                         Stopping container pause
3m54s       Normal   SuccessfulDelete    daemonset/image-puller-ds                         Deleted pod: image-puller-ds-wgwzh
3m25s       Normal   Pulling             pod/sp-pod-f3884032-1164-48e8-8213-c0c3856e573d   Pulling image "dashboard:development"
3m25s       Normal   Pulled              pod/sp-pod-f3884032-1164-48e8-8213-c0c3856e573d   Successfully pulled image "dashboard:development" in 220.610781ms
3m25s       Normal   Created             pod/sp-pod-f3884032-1164-48e8-8213-c0c3856e573d   Created container sp-container-f3884032-1164-48e8-8213-c0c3856e573d
3m25s       Normal   Started             pod/sp-pod-f3884032-1164-48e8-8213-c0c3856e573d   Started container sp-container-f3884032-1164-48e8-8213-c0c3856e573d

Версии:

Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.0", GitCommit:"c2b5237ccd9c0f1d600d3072634ca66cefdf272f", GitTreeState:"clean", BuildDate:"2021-08-04T18:03:20Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.12", GitCommit:"f941a31f4515c5ac03f5fc7ccf9a330e3510b80d", GitTreeState:"clean", BuildDate:"2022-11-09T17:12:33Z", GoVersion:"go1.17.13", Compiler:"gc", Platform:"linux/amd64"}
0
Bennimi 15 Ноя 2022 в 20:41
Какую среду выполнения контейнера вы используете?
 – 
Nishan B
16 Ноя 2022 в 06:39
Среда выполнения находится в контейнере
 – 
Bennimi
16 Ноя 2022 в 11:45

2 ответа

Используйте imagePullPolicy: IfNotPresent в спецификации модуля. использовать образ, который уже присутствует на узле.

Используйте imagePullPolicy: всегда извлекать новый образ из реестра образов.

0
P Ekambaram 16 Ноя 2022 в 06:35
Это не то, что говорят документы, имхо. В нем говорится, что он сравнивает дайджест и не тянет, если дайджест уже присутствует.
 – 
Bennimi
16 Ноя 2022 в 11:43