Я запускаю частный реестр докеров v2.7.0 как kubernetes pod со службой и постоянным томом благодаря руководству Varun Kumar G, который был единственным успешным методом в моей настройке, чтобы kubernetes извлекал данные из моего частного реестра докеров на моем 3 узла — локальный — кластер с Ubuntu 20.04 lts kvms.
Проблема с удалением образов из реестра kubernetes pod docker v2.7.0 (пришлось использовать предыдущую версию, потому что последняя версия v2.7.1 не работает с htpasswd). Кроме того, я прочитал много подобных тем, таких как это, это и это.
С запуском реестра докеров v2.7.1 как докер-контейнер, у меня не было проблем с удалением изображений,
но с запуском реестра докеров v2.7.0 как kubernetes pod, обычные шаги удаления в результате невозможно снова отправить удаленное изображение, даже после успешного удаления больших двоичных объектов и удаления папок изображений вручную под /var/lib/реестр/докер/реестр/v2/репозитории/
.
Ниже находится модуль реестра yaml.
апиВерсия: v1
вид: стручок
метаданные:
имя: докрег-стручок
этикетки:
приложение: mregistry
спецификация:
контейнеры:
- название: реестр
изображение: реестр: 2.7.0
imagePullPolicy: Ифноптресент
томМаунты:
- имя: репо-том
mountPath: "/var/lib/registry"
- имя: сертификаты-vol
mountPath: "/ сертификаты"
Только для чтения: правда
- имя: автор-том
Путь монтирования: "/ авторизация"
Только для чтения: правда
среда:
- имя: REGISTRY_AUTH
значение: "htpasswd"
- имя: REGISTRY_AUTH_HTPASSWD_REALM
значение: "Область реестра"
- имя: REGISTRY_AUTH_HTPASSWD_PATH
значение: "/auth/htpasswd"
- имя: REGISTRY_HTTP_TLS_CERTIFICATE
значение: "/certs/tls.crt"
- имя: REGISTRY_HTTP_TLS_KEY
значение: "/certs/tls.key"
- имя: REGISTRY_STORAGE_DELETE_ENABLED
значение: "истина"
тома:
- имя: репо-том
персистентволумеклайм:
претензияНазвание: репо-пвх
- имя: сертификаты-vol
секрет:
secretName: сертификаты-секрет
- имя: автор-том
секрет:
secretName: секрет авторизации
политика перезапуска: всегда
имя_узла: весна
и ниже приведен постоянный объем yaml
апиВерсия: v1
вид: персистентволуме
метаданные:
имя: репо-pv
этикетки:
тип: магазин
спецификация:
емкость:
хранилище: 7Gi
VolumeMode: файловая система
режимы доступа:
- ReadWriteOnce
персистентволумереклаймполици: сохранить
storageClassName: локальное хранилище
местный:
Тип фс: ext4
путь: /корень/репо
сродство узлов:
обязательный:
нодселектортермс:
- matchExpressions:
- ключ: kubernetes.io/имя хоста
оператор: В
ценности:
- весна
---
апиВерсия: v1
вид: Персистентволумеклаим
метаданные:
имя: репо-ПВХ
этикетки:
тип: магазин
спецификация:
селектор:
метки соответствия:
тип: магазин
VolumeMode: файловая система
storageClassName: локальное хранилище
режимы доступа:
- ReadWriteOnce
Ресурсы:
Запросы:
хранилище: 7Gi
Скажем, я помещаю образ в новый модуль реестра, предварительно очистив постоянное хранилище.
root@sea:scripts# docker push dockerreg:5000/mubu4:v4
Пуш ссылается на репозиторий [dockreg:5000/mubu4].
9f54eef41275: Нажал
v4: дайджест: sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f размер: 529
Удаление изображений работает по назначению, пока я не попытаюсь снова отправить удаленное изображение, и в этот момент я получаю ужасный Слой уже существует
ошибка.
Как вы могли видеть выше, я включил в среду модуля реестра следующее:
- имя: REGISTRY_STORAGE_DELETE_ENABLED
значение: "истина"
иначе я бы получил неподдерживаемый
ошибка из завиток -X УДАЛИТЬ
вызов, даже после добавления
удалять:
включено: правда
в /etc/docker/registry/config.yml
внутри стручка,
версия: 0.1
журнал:
поля:
услуга: реестр
место хранения:
кеш:
blob-дескриптор: в памяти
файловая система:
корневой каталог: /var/lib/registry
удалять:
включено: правда
http:
адрес: :5000
заголовки:
X-Content-Type-Options: [nosniff]
здоровье:
Драйвер хранилища:
включено: правда
интервал: 10 с
порог: 3
это, кажется, не имеет значения в моем случае использования.
Ниже приведены шаги удаления.
curl -u александр: софианос \
> -vsk -H "Принять: \
> приложение/vnd.docker.distribution.manifest.v2+json" \
> -X УДАЛИТЬ \
> https://dockreg:5000/v2/mubu4/manifests/sha256:\
> 7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f
Вышеприведенное печатает, среди прочего, следующее
> УДАЛИТЬ /v2/mubu4/манифесты/sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f HTTP/2
> Хост: докрег:5000
> авторизация: Basic YWxleGFuZGVyOnNvZmlhbm9z
> пользовательский агент: curl/7.68.0
> принять: приложение/vnd.docker.distribution.manifest.v2+json
>
* Состояние соединения изменено (MAX_CONCURRENT_STREAMS == 250)!
< HTTP/2 202
<докер-дистрибутив-api-версия: реестр/2.0
< x-content-type-options: nosniff
<длина содержимого: 0
<дата: суббота, 30 октября 2021 г., 13:25:53 по Гринвичу
<
* Соединение №0 с хостом Dockreg осталось нетронутым
что вроде в порядке вещей.
Ниже показано удаление больших двоичных объектов из модуля реестра.
root@sea:scripts# kubectl exec -it докрег-под -- sh
/ # bin/registry сборщик мусора /etc/docker/registry/config.yml
Мубу4
Отмечено 0 больших двоичных объектов, 3 больших двоичных объекта и 0 манифестов, которые можно удалить.
Большой двоичный объект, подходящий для удаления: sha256:7b1a6ab2e44dbac178598dabe7cff59bd67233dba0b27e4fbd1f9d4b3c877a54
INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/7b/7b1a6ab2e44dbac178598dabe7cff59bd67233dba0b27e4fbd1f9d4b3c877a54 go.version=go1.11.2 instance.id=82a101ee-47f4-4f4f-bc79-76d774b0924b service=registry
Большой двоичный объект, подходящий для удаления: sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f
INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/7b/7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f go.version=go1.11.2 instance.id=82a101ee-47f4-4f4f-bc79-76d774b0924b service=registry
Большой двоичный объект, подходящий для удаления: sha256:ecb35fc8715f5ab1d9053ecb2f2d9ebbec4a59c0a0615d98de53bc29f7285085
INFO[0000] Удаление большого двоичного объекта: /docker/registry/v2/blobs/sha256/ec/ecb35fc8715f5ab1d9053ecb2f2d9ebbec4a59c0a0615d98de53bc29f7285085
Наконец, ручное удаление образа репозитория
/ # rm -rf /var/lib/registry/docker/registry/v2/repositories/mubu4
В моем постоянном хранилище реестр теперь выглядит так
дерево root@spring:repo#
.
âââ докер
✓ реестр
âââ v2
ââ капли
âââ sha256
â âââ 7b
â âââ ек
âââ репозитории
8 каталогов, 0 файлов
Но когда я снова пытаюсь отправить удаленное изображение, я получаю
root@sea:scripts# docker push dockerreg:5000/mubu4:v4
Пуш ссылается на репозиторий [dockreg:5000/mubu4].
9f54eef41275: слой уже существует
v4: дайджест: sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f размер: 529
и в моем реестре папка изображений mubu4, которую я ранее удалил, была таинственным образом воссоздана с помощью приведенной выше команды push.
дерево root@spring:repo#
.
âââ докер
✓ реестр
âââ v2
ââ капли
âââ sha256
â âââ 7b
â âââ ек
âââ репозитории
âââ мубу4
âââ _manifests
✓ ревизии
âââ sha256
âââ 7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f
🔸Ссылка
ââ теги
âââ v4
âââ текущий
🔸Ссылка
✓ индекс
âââ sha256
âââ 7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f
ââ ссылка
19 каталогов, 3 файла
Я также попытался стереть постоянное хранилище с помощью
root@spring:repo# rm -rf *
но безрезультатно. После этого пытаюсь отправить удаленное изображение, все равно выводит то же самое Слой уже существует
ошибка, и дерево реестра снова автоматически воссоздается, выглядя точно так же, как в выходных данных дерева выше.
Вопрос в том что еще я могу попытаться сделать для этой работы и/или, альтернативно,
из приведенного выше тестирования следует, что в модуле kubernetes реестра докеров есть другие файлы, содержащие конфигурацию, в которой удаленные изображения не удаляются., и эти файлы активируют воссоздание удаленного образа с помощью push-вызова Docker. Куда мне смотреть кроме дерева
/var/lib/реестр/докер/реестр/v2/
чтобы я мог удалить все ссылки на удаленные изображения?