Я обнаружил, что концепция Openshift ImageStream
чрезвычайно сложна для понимания.Openshift вводит еще один абстрактный слой (по сравнению с Kubernetes), чтобы обеспечить:
Однако, если тег потока изображений, используемый Deployment или Build, не обновляется, то даже если образ Docker в реестре Dockerобновляется, сборка или развертывание будет продолжаться с использованием предыдущего (предположительно известного исправного) образа.
Я не совсем понимаю, как этого можно достичь?Я прочитал ImageStream
, ImageStreamTag
и ImageStreamImage
, они просто указатель (или метаданные), указывающие на внешнее изображение.Он не содержит фактического изображения.
Я могу подтвердить, что после того, как я создал ImageStream
(который получает изображение из концентратора докеров), изображение не отправляется в реестр по умолчанию Openshift docker-registry.default.svc:5000
, я проверяювнутри, но не смог его найти.И наоборот, это действительно так, это означает, что если я помещу изображение в реестр по умолчанию, ImageStream
будет создан автоматически.
Давайте рассмотрим пример ниже:
myImageStream: latest -> docker.hub / myNameSpace / myimage: latest (SHA-1234)
Если я помещаю новое изображение в последний тег docker.hub с SHA-5678, и если ImageStream не установлен как --scheduled
, тозначит, мой контейнер всегда будет использовать изображение SHA-1234.
Скажем, если в другом рабочем узле раскручивается новый модуль, так как рабочий узел не имеет изображения SHA-1234, он начнет новую загрузку из docker.hub, и он будетget SHA-5678.
Это нарушает так называемое «известное хорошее изображение», и даже хуже, потому что работают две разные версии изображения.Я совершенно сбит с толку по этому поводу, кто-нибудь может дать дальнейшие объяснения о том, как работает Openshift ImageStream
?
Ссылка:
https://blog.openshift.com/image-streams-faq/
https://docs.openshift.com/container-platform/3.9/architecture/core_concepts/builds_and_image_streams.html#image-streams