У меня есть небольшой скрипт, работающий в поде, который ищет последние образы приложений (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"}
2 ответа
Используйте imagePullPolicy: IfNotPresent в спецификации модуля. использовать образ, который уже присутствует на узле.
Используйте imagePullPolicy: всегда извлекать новый образ из реестра образов.
Документы неверны. Вы можете прочитать исходный код здесь< /а>. Политика PullIfNotPresent
проверит, существует ли образ, но Always
переходит сразу к извлечению образа.
Похожие вопросы
Новые вопросы
kubernetes
ВОПРОСЫ КУБЕРНЕТА ДОЛЖНЫ БЫТЬ ОТНОШЕНЫ К РАЗРАБОТКЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ. Настройка и развертывание здесь не по теме. Хорошее эмпирическое правило: если это происходит за пределами группы, это, вероятно, не по теме. Если речь идет о коде, работающем внутри модуля, то, вероятно, все в порядке.