Pull to refresh

Comments 13

А еще есть чат по артифактори :-)

https://t.me/ru_artifactory

А еще.... а еще... а еще есть slack по всем cncf продуктам (включая vmware harbor)

Очень жаль, что не рассмотрен containerd. CRI-O решение неплохое, но гораздо менее популярное, конечно.

Что еще мне не понравилось в конфигурации CRI - то, что это нужен полный доступ к узлам. А если дело происходит в облаке и нет возможности менять конфиги на узлах кубернетес кластера?

Еще вариант (идею) - дарю - можно написать mutation webhook, который будет переписывать поле image: во всех pod'ах - в этом случае можно вообще не пользоваться прокси-репо, а попросту переложить все образа к себе.

И еще фактор, который мне в прокси не нравится - он не ускоряет дистрибьюцию образов по узлам (для этого надо использовать решения вроде https://github.com/uber/kraken но я сильно тему не изучал) и второй момент - если образ удалили или подменили в удаленном регистри (например, на докерхабе это достаточно частая проблема), то кэш тут может не помочь...

Еще что добавить хочу - не обязательно покупать платный Artifactory. Разработчики предлагают бесплатную версию на той же кодовой базе, но с ограниченным функционалом ТОЛЬКО для докер образов - https://jfrog.com/container-registry/ Странно, что этот продукт не рассмотрен в обзоре. По идее у него настройка такая же, как у полного JFrog Artifactory, но не нужно выкладывать сотни нефти :-)

А еще меня удивила стрелочка на диаграмме от Flux/Argo к podman. Если в случае kubernetes/openshift + cri-o я понимаю, почему она там есть, то в случае podman не очень, потому что эти решения напрямую не интегрируются. Что я упустил?  

https://jfrog.com/container-registry/ Странно, что этот продукт не рассмотрен в обзоре.

Спасибо, ссылку на бесплатный container-registry в статью добавил, а вот рассматривать Artifactory не стал, также как и Quay, я посчитал, что это будет избыточно, достаточно упоминания в сравнении и ссылки на руководство.

для JFrog Artifactory настройка будет похожей и описана в официальной документации

А еще меня удивила стрелочка на диаграмме от Flux/Argo к podman.

А вы внимательный :)

Даже не знаю как она там оказалась, видимо это всё мои мечты под впечатлением новости, что podman теперь умеет не только Pod запускать но и Deployment.

Что еще мне не понравилось в конфигурации CRI - то, что это нужен полный
доступ к узлам. А если дело происходит в облаке и нет возможности
менять конфиги на узлах кубернетес кластера?

Подскажите, а как вы изменяете конфиги containerd на узлах где нет возможности их изменять?

Небольшой дисклеймер - когда я пишу "CRI", то я имею в виду и cri-o, и containerd , и любой другой контейнерный движок.

В случае облака - если нет возможности, то нет возможности. Приходится придумывать обходные пути.

Какие плюс-минус рабочие варианты знаю:

  1. Если есть поддержка своих шаблонов воркеров - можно конфиг вшить туда

  2. Если такого нет, но очень хочется - можно попробовать раскатать daemonset с hostpath, чтобы заменить на узлах файлы конфигурации. Но это уже не так надежно, т.к. влезаешь в логику работы платформы

  3. Если и этого нет, тогда похоже все ) и нужно искать альтернативные способы получить желаемое (не через конфиг)

Небольшой дисклеймер - когда я пишу "CRI", то я имею в виду и cri-o, и containerd , и любой другой контейнерный движок.

И в правду, скорее моя невнимательность.

Вот тоже подумал про DaemonSet и HostPath, благо ни разу не оказывался в такой ситуации и ноды подконтрольны мне.

Не спорю, что в статье приведено нишевое решение, если абстрагироваться от облаков, в случае on-premise решений, особенно в совокупности таких факторов как: закрытый контур, строгая политика ИБ и медленный интернет канал, проксирование очень даже упрощает и ускоряет дистрибьюцию.

если образ удалили или подменили в удаленном регистри, то кэш тут может не помочь

Если подменили, то всё будет хорошо, прокси в первую очередь валидирует метаданные, сверяет их с удаленным реестром контейнеров, и только если изменений нет (или сервер не ответил) мы получим данные из кеша. Касаемо удаления, это вопрос хороший, в Nexus знаю есть отдельная опция для обработки и кеширования 404, а в Distrubution кеш для удаленного образа, скорее всего продолжит своё существование. В любом случае, для кеша полезно делать отдельную задачу в планировщике, для удаления старых и неиспользуемых образов, что от части решает вопрос удаления.

можно написать mutation webhook

А можно не писать, используя CRI-O/Podman и конфигурацию registries.conf :)

Мне кажется идея с mutation webhook для image может нарушить работу keel.sh и подобных решений, но это не точно, нужно проверять на практике.

Если подменили, то всё будет хорошо, прокси в первую очередь валидирует метаданные, сверяет их с удаленным реестром контейнеров, и только если изменений нет (или сервер не ответил) мы получим данные из кеша. Касаемо удаления, это вопрос хороший, в Nexus знаю есть отдельная опция для обработки и кеширования 404, а в Distrubution кеш для удаленного образа, скорее всего продолжит своё существование. В любом случае, для кеша полезно делать отдельную задачу в планировщике, для удаления старых и неиспользуемых образов, что от части решает вопрос удаления.

как раз не хорошо.

Потому что если образ с докерхаба удалили, а мы им пользуемся, то если он исчезнет из кэша - мы получим неработоспособную систему (образа-то нет!)

В случае, если кто-то образ обновил - тоже большой вопрос - хотим ли мы, чтобы софт обновился (например, мы намеренно указали :latest на dev-стенде), но для прода это попросту недоступимо, потому что мы рассчитываем на то, что то, что мы задеплоили, то и будет крутиться, пока мы явно не обновим тег-версию.

Мне кажется идея с mutation webhook для image может нарушить работу keel.sh и подобных решений, но это не точно, нужно проверять на практике.

может быть, но можно это сделать аккуратно :-)

Потому что если образ с докерхаба удалили, а мы им пользуемся, то если он исчезнет из кэша - мы получим неработоспособную систему (образа-то нет!)

Так он и не удалится, если мы не делали ротацию старого кеша или не настроили чего-то дополнительно для обраотки удаленных образов.

Касаемо latest, мне кажется это выбор каждого, и если мы указали postgres:13.5-bullseye за место postgres:13 , значит мы пошли на это осознанно, и кешем стандартный механиз поставки не нарушаем. Иначе могут возникнуть вопросы - "а почему мой latest не latest?".

Для жёсткой фиксации на версии, всегда можно указать конкретный манифест:

postgres:13.5-bullseye@sha256:3f34db7403050a89aecb3e17d3f22c771b76120565d113d5462f673e229c5472

Благодарю за статью, но у вас перевод немного кривой:

При использовании коротких имен всегда существует риск того, что извлекаемое изображение может быть подделано. Если нужный реестр контейнеров не стоит первым в списке поиска, злоумышленник может разместить другое одноименное изображение в публичном реестре, находящемся раньше в списке поиска. Пользователь случайно получит и запустит образ и код злоумышленника, а не ожидаемый контент.

Какое нафиг "изображение"? Может имеется ввиду "образ"?

Sign up to leave a comment.

Articles