Эта статья опубликована Shanhe в облачном сообществе Huawei « K8s Image Cache Management Kube-fledged Awareness ».
Мы знаем , что планирование контейнеров в Интернете требует извлечения образа текущего контейнера из строки запланированного узла. В некоторых особых сценариях требуется получение изображения текущего контейнера в строке запланированного узла. k8s
-
Требуется
快速启动和/或扩展
приложение . Например, приложения, выполняющие обработку данных в реальном времени, должны быстро масштабироваться из-за стремительного роста объемов данных. -
Образ относительно большой и включает в себя несколько версий. Хранилище узла ограничено, и ненужные изображения необходимо удалять динамически.
-
无服务器函数
Часто необходимо мгновенно реагировать на поступающие события и запускать контейнеры в течение долей секунды. -
Работа на периферийных устройствах должна допускать прерывистое сетевое подключение к зеркальному репозиторию.
IoT 应用程序
边缘设备
-
Если вам нужно вытащить образ
专用仓库
из , и вы не можете предоставить всем镜像仓库
доступ для извлечения образа оттуда, вы можете сделать образ доступным на узлах кластера. -
Если администратору или оператору кластера необходимо обновить приложение и заранее проверить, можно ли успешно получить новый образ.
kube-fledged
Он используется для создания и управления кешем образов контейнеров непосредственно на узлах кластера Kubernetes . Он позволяет пользователям определять список изображений и рабочие узлы, на которых эти изображения следует кэшировать (т. е. извлекать). В результате модуль приложения можно запустить практически сразу, поскольку нет необходимости извлекать образ из реестра. kubernetes operator
worker
kube-fledged
API CRUD предоставляется для управления жизненным циклом кэша изображений и поддерживает несколько настраиваемых параметров, что позволяет настраивать функции в соответствии с вашими потребностями.
В Kubernetes он встроен 镜像垃圾回收机制
. Кубелет в узле периодически проверяет, достигает ли использование диска определенного порога (настраивается с помощью флагов). Как только это будет достигнуто 阈值
, kubelet автоматически удалит все неиспользуемые изображения с узла.
В предлагаемом решении необходимо реализовать механизмы автоматического и периодического обновления. Если изображение в кеше изображений удаляется с помощью gc kubelet, следующий цикл обновления загрузит удаленное изображение в кеш изображений. Это гарантирует актуальность кэша изображений.
Проектирование потока
https://github.com/senthilrch/kube-fledged/blob/master/docs/kubefledged-architecture.png
Развертывание на базе Kube
Развертывание режима управления
──[[email protected]]-[~/ansible] └─$mkdir кубический оперенный ┌──[[email protected]]-[~/ansible] └─$cd kube-оперелый ┌──[[email protected]]-[~/ansible/kube-fledged] └─$export KUBEFLEDGED_NAMESPACE=kube-fledged ┌──[[email protected]]-[~/ansible/kube-fledged] └─$kubectl создать пространство имен ${KUBEFLEDGED_NAMESPACE} пространство имен/kube-fledged создано ┌──[[email protected]]-[~/ansible/kube-fledged] └─$helm репозиторий для добавления kubefledged-charts https://senthilrch.github.io/kubefledged-charts/ «kubefledged-charts» добавлен в ваши репозитории. ┌──[[email protected]]-[~/ansible/kube-fledged] └─$helm обновление репозитория Подождите, пока мы собираем последние новости из ваших хранилищ диаграмм... ...Успешно получено обновление из репозитория диаграмм "kubefledged-charts". ...Успешно получено обновление из репозитория диаграмм "kubescape". ...Успешно получено обновление из репозитория диаграмм "rancher-stable". ...Успешно получено обновление из репозитория диаграмм "skm". ...Успешно получено обновление из репозитория карт "openkruise". ...Успешно получено обновление из репозитория диаграмм "awx-operator". ...Успешно получено обновление из репозитория диаграмм "botkube". Обновление завершено. ⎈Счастливого Хелминга!⎈
┌──[[email protected]]-[~/ansible/kube-fledged] └─$helm install --verify kube-fledged kubefledged-charts/kube-fledged -n ${KUBEFLEDGED_NAMESPACE} --wait
В ходе фактического развертывания выяснилось, что из-за проблем с сетью chart
загрузку выполнить невозможно, поэтому развертывание было выполнено с использованием yaml. make deploy-using-yaml
Развертывание файла Yaml
┌──[[email protected]]-[~/ansible/kube-fledged] └─$git клон https://github.com/senthilrch/kube-fledged.git Клонирование в «оперившийся куб»… удаленный: Перечисление объектов: 10613, готово. удаленно: Подсчет объектов: 100% (1501/1501), выполнено. удаленно: Сжатие объектов: 100% (629/629), выполнено. удаленное: всего 10613 (дельта 845), повторно использовано 1357 (дельта 766), повторно использовано в упаковке 9112 Среди принимающих объектов: 100% (10613/10613), 34,58 МБ | 7,33 МБ/с, выполнено. Обработка дельта-среды: 100 % (4431/4431), завершено. ┌──[[email protected]]-[~/ansible/kube-fledged] └─$ls кубический ┌──[[email protected]]-[~/ansible/kube-fledged] └─$cd kube-fledged/ ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged] └─$make Deploy-using-yaml kubectl apply -f Deploy/kubefledged-namespace.yaml
При первом развертывании я обнаружил, что образ невозможно снести.
┌──[[email protected]]-[~] └─$kubectl get all -n kube-fledged ИМЯ ГОТОВ СТАТУС ПЕРЕЗАПУСК ВОЗРАСТ pod/kube-fledged-controller-df69f6565-drrqg 0/1 CrashLoopBackOff 35 (5 часов 59 минут назад) 21 час pod/kube-fledged-webhook-server-7bcd589bc4-b7kg2 0/1 Init:CrashLoopBackOff 35 (5 часов 58 минут назад) 21 час pod/kubefledged-controller-55f848cc67-7f4rl 1/1 Работает 0 21ч pod/kubefledged-webhook-server-597dbf4ff5-l8fbh 0/1 Init:CrashLoopBackOff 34 (6 часов назад) 21 час НАЗВАНИЕ ТИП КЛАСТЕР-IP ВНЕШНИЙ IP-ПОРТЫ ВОЗРАСТ service/kube-fledged-webhook-server ClusterIP 10.100.194.199 <нет> 3443/TCP 21h service/kubefledged-webhook-server ClusterIP 10.101.191.206 <нет> 3443/TCP 21h ИМЯ ГОТОВО АКТУАЛЬНО ДОСТУПНО ВОЗРАСТ развертывание.apps/kube-fledged-controller 0/1 1 0 21h развертывание.apps/kube-fledged-webhook-server 0/1 1 0 21ч развертывание.apps/kubefledged-controller 0/1 1 0 21h развертывание.apps/kubefledged-webhook-server 0/1 1 0 21ч ИМЯ ЖЕЛАЕМЫЙ НАСТОЯЩИЙ ВОЗРАСТ ГОТОВНОСТИ Replicate.apps/kube-fledged-controller-df69f6565 1 1 0 21h Replicate.apps/kube-fledged-webhook-server-7bcd589bc4 1 1 0 21 час Replicate.apps/kubefledged-controller-55f848cc67 1 1 0 21h Replicate.apps/kubefledged-webhook-server-597dbf4ff5 1 1 0 21 час ┌──[[email protected]]-[~] └─$
Здесь мы находим изображение, которое хотим получить.
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$cat *.yaml | Греп-изображение: - изображение: sendhilrch/kubefledged-controller:v0.10.0 - изображение: sendhilrch/kubefledged-webhook-server:v0.10.0 - изображение: sendhilrch/kubefledged-webhook-server:v0.10.0
Вытащите некоторые по отдельности и в настоящее время используйте пакетные операции на всех рабочих узлах. ansible
┌──[[email protected]]-[~/ansible] └─$ansible k8s_node -mshell -a "docker pull docker.io/senthilrch/kubefledged-cri-client:v0.10.0" -i host.yaml
Вытащите другие похожие изображения
После завершения операции состояние контейнера становится нормальным.
┌──[[email protected]]-[~/ansible] └─$kubectl -n kube-fledged получить все ИМЯ ГОТОВ СТАТУС ПЕРЕЗАПУСК ВОЗРАСТ pod/kube-fledged-controller-df69f6565-wdb4g 1/1 Выполняется 0 13ч pod/kube-fledged-webhook-server-7bcd589bc4-j8xxp 1/1 Выполняется 0 13ч pod/kubefledged-controller-55f848cc67-klxlm 1/1 Выполняется 0 13ч pod/kubefledged-webhook-server-597dbf4ff5-ktbsh 1/1 Выполняется 0 13ч НАЗВАНИЕ ТИП КЛАСТЕР-IP ВНЕШНИЙ IP-ПОРТЫ ВОЗРАСТ service/kube-fledged-webhook-server ClusterIP 10.100.194.199 <нет> 3443/TCP 36h service/kubefledged-webhook-server ClusterIP 10.101.191.206 <нет> 3443/TCP 36h ИМЯ ГОТОВО АКТУАЛЬНО ДОСТУПНО ВОЗРАСТ развертывание.apps/kube-fledged-controller 1/1 1 1 36h развертывание.apps/kube-fledged-webhook-server 1/1 1 1 36h развертывание.apps/kubefledged-controller 1/1 1 1 36h развертывание.apps/kubefledged-webhook-server 1/1 1 1 36h ИМЯ ЖЕЛАЕМЫЙ НАСТОЯЩИЙ ВОЗРАСТ ГОТОВНОСТИ Replicate.apps/kube-fledged-controller-df69f6565 1 1 1 36h Replicate.apps/kube-fledged-webhook-server-7bcd589bc4 1 1 1 36h Replicate.apps/kubefledged-controller-55f848cc67 1 1 1 36h Replicate.apps/kubefledged-webhook-server-597dbf4ff5 1 1 1 36h
Проверьте успешную установку
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged] └─$kubectl get pods -n kube-fledged -l app=kubefledged ИМЯ ГОТОВ СТАТУС ПЕРЕЗАПУСК ВОЗРАСТ kubefledged-controller-55f848cc67-klxlm 1/1 Выполняется 0 16ч kubefledged-webhook-server-597dbf4ff5-ktbsh 1/1 Выполняется 0 16ч ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged] └─$kubectl get imagecaches -n kube-fledged В пространстве имен Kube не найдено ресурсов.
Использование kubefledged
Создать объект кэша изображений
Создайте объект кэша изображений на основе файла. Demo
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged] └─$cd Deploy/ ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$cat kubefledged-imagecache.yaml --- apiVersion: kubefledged.io/v1alpha2 вид: ImageCache метаданные: # Имя кэша изображений. Кластер может иметь несколько объектов кэша изображений. имя: imagecache1 пространство имен: kube-оперившийся # Пространство имен kubernetes, которое будет использоваться для этого кеша изображений. Вы можете выбрать другое пространство имен по своему усмотрению. этикетки: приложение: kubefledged kubefledged: imagecache спецификация: # Поле «cacheSpec» позволяет пользователю определить список изображений и указать, на каких рабочих узлах эти изображения должны быть кэшированы (т. е. предварительно извлечены). Спецификация кэша: # Указывает список изображений (nginx:1.23.1) без селектора узлов, поэтому эти изображения будут кэшироваться на всех узлах кластера. - изображений: - ghcr.io/jitesoft/nginx:1.23.1 # Указывает список изображений (cassandra:v7 и etcd:3.5.4-0) с селектором узлов, следовательно, эти изображения будут кэшироваться только на узлах, выбранных селектором узлов. - изображений: - us.gcr.io/k8s-artifacts-prod/cassandra:v7 - us.gcr.io/k8s-artifacts-prod/etcd:3.5.4-0 Селектор узла: уровень: бэкэнд # Указывает список секретов извлечения изображений для извлечения изображений из частных репозиториев в кеш изображениеPullSecrets: - имя: myregistrykey
Соответствующее изображение в официальной демо-версии невозможно удалить, поэтому измените его.
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$docker pull us.gcr.io/k8s-artifacts-prod/cassandra:v7 Ответ об ошибке от демона: получите «https://us.gcr.io/v2/»: net/http: запрос отменен во время ожидания соединения (превышено время ожидания Client.Timeout во время ожидания заголовков) ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$
Чтобы протестировать использование тегов селектора, мы находим тег узла и отдельно кэшируем изображения.
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$kubectl get nodes --show-labels
При этом мы тянем изображение прямо из публичного хранилища, поэтому никакой объект не нужен imagePullSecrets
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$vim kubefledged-imagecache.yaml
измененный файл yaml
-
Добавлен кэш изображений liruilong/my-busybox:latest для всех узлов.
-
Добавлен зеркальный кэш , соответствующий селектору тегов.
kubernetes.io/hostname: vms105.liruilongs.github.io
liruilong/hikvision-sdk-config-ftp:latest
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$cat kubefledged-imagecache.yaml --- apiVersion: kubefledged.io/v1alpha2 вид: ImageCache метаданные: # Имя кэша изображений. Кластер может иметь несколько объектов кэша изображений. имя: imagecache1 пространство имен: kube-оперившийся # Пространство имен kubernetes, которое будет использоваться для этого кеша изображений. Вы можете выбрать другое пространство имен по своему усмотрению. этикетки: приложение: kubefledged kubefledged: imagecache спецификация: # Поле «cacheSpec» позволяет пользователю определить список изображений и указать, на каких рабочих узлах эти изображения должны быть кэшированы (т. е. предварительно извлечены). Спецификация кэша: # Указывает список изображений (nginx:1.23.1) без селектора узлов, поэтому эти изображения будут кэшироваться на всех узлах кластера. - изображений: - liruilong/my-busybox: последний # Указывает список изображений (cassandra:v7 и etcd:3.5.4-0) с селектором узлов, следовательно, эти изображения будут кэшироваться только на узлах, выбранных селектором узлов. - изображений: - liruilong/hikvision-sdk-config-ftp: последний Селектор узла: kubernetes.io/имя хоста: vms105.liruilongs.github.io # Указывает список секретов извлечения изображений для извлечения изображений из частных репозиториев в кеш #imagePullSecrets: #- имя: myregistrykey ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$
Создал напрямую и сообщил об ошибке
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$kubectl create -f kubefledged-imagecache.yaml Ошибка сервера (InternalError): ошибка при создании «kubefledged-imagecache.yaml»: произошла внутренняя ошибка: не удалось вызвать веб-перехватчик «validate-image-cache.kubefledged.io»: не удалось вызвать веб-перехватчик: Сообщение «https://kubefledged-» webhook-server.kube-fledged.svc:3443/validate-image-cache?timeout=1s": x509: сертификат, подписанный неизвестным центром сертификации (возможно, из-за "crypto/rsa: ошибка проверки" при попытке проверить сертификат кандидата центра сертификации " kubefledged.io") ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$kubectl get imagecaches -n kube-fledged В пространстве имен Kube не найдено ресурсов. ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$
Решение — удалить соответствующий объект и создать его заново.
Я нашел решение в одном из моих текущих проектов https://github.com/senthilrch/kube-fledged/issues/76. issues
Похоже, это жестко запрограммировано, но при запуске сервера создается новый пакет CA и обновляется конфигурация веб-перехватчика. Когда происходит другое развертывание, исходный пакет CA применяется повторно, и запросы веб-перехватчика начинают завершаться сбоем, пока компонент веб-перехватчика не будет перезапущен снова для исправления init-сервера пакета. Webhook CA
webhook
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged] └─$make Remove-kubefledged-and-operator # Удалить kubefledged kubectl delete -f Deploy/kubefledged-operator/deploy/crds/charts.helm.kubefledged.io_v1alpha2_kubefledged_cr.yaml ошибка: не найдено сопоставление ресурсов для имени: "kube-fledged" пространство имен: "kube-fledged" из "deploy/kubefledged-operator/deploy/crds/charts.helm.kubefledged.io_v1alpha2_kubefledged_cr.yaml": нет совпадений для типа "KubeFledged" " в версии "charts.helm.kubefledged.io/v1alpha2" сначала убедитесь, что CRD установлены
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged] └─$make Deploy-using-yaml kubectl apply -f Deploy/kubefledged-namespace.yaml пространство имен/kube-fledged создано kubectl apply -f Deploy/kubefledged-crd.yaml customresourcedefinition.apiextensions.k8s.io/imagecaches.kubefledged.io без изменений ............ Статус развертывания kubectl развертывание kubefledged-webhook-server -n kube-fledged --watch Ожидание завершения развертывания "kubefledged-webhook-server": доступны 0 из 1 обновленных реплик... развертывание «kubefledged-webhook-server» успешно развернуто kubectl get pods -n kube-fledged ИМЯ ГОТОВ СТАТУС ПЕРЕЗАПУСК ВОЗРАСТ kubefledged-controller-55f848cc67-76c4v 1/1 Выполняется 0 112 с kubefledged-webhook-server-597dbf4ff5-56h6z 1/1 Выполняется 0 66 с
Воссоздайте объект кэша и создайте его успешно.
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$kubectl create -f kubefledged-imagecache.yaml imagecache.kubefledged.io/imagecache1 создано ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$kubectl get imagecaches -n kube-fledged НАЗОВИТЕ ВОЗРАСТ кэш изображения1 10 с ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$
Просмотр текущего кэша управляемых изображений
┌──[[email protected]]-[~/ansible/kube-fledged] └─$kubectl get imagecaches imagecache1 -n kube-fledged -o json { "apiVersion": "kubefledged.io/v1alpha2", "kind": "ImageCache", "метаданные": { "creationTimestamp": "2024-03-01T15:08:42Z", «поколение»: 83, "ярлыки": { "приложение": "kubefledged", "kubefledged": "imagecache" }, "имя": "imagecache1", "namespace": "kube-оперившийся", "resourceVersion": "20169836", "uid": "3a680a57-d8ab-444f-b9c9-4382459c5c72" }, "спецификация": { "Спецификация кэша": [ { "изображений": [ "liruilong/my-busybox:последний" ] }, { "изображений": [ "liruilong/hikvision-sdk-config-ftp: последний" ], "nodeSelector": { "kubernetes.io/hostname": "vms105.liruilongs.github.io" } } ] }, "положение дел": { "completionTime": "2024-03-02T01:06:47Z", "message": "Все запрошенные изображения успешно перенесены в соответствующие узлы", "причина": "ImageCacheRefresh", "startTime": "2024-03-02T01:05:33Z", "статус": "Успешно" } } ┌──[[email protected]]-[~/ansible/kube-fledged] └─$
Проверьте через ansible
┌──[[email protected]]-[~/ansible] └─$ansible all -mshell -a "docker images | grep liruilong/my-busybox" -i host.yaml 192.168.26.102 | ИЗМЕНЕНО | rc=0 >> liruilong/my-busybox последняя версия 497b83a63aad 11 месяцев назад 1,24 МБ 192.168.26.101 | ИЗМЕНЕНО | rc=0 >> liruilong/my-busybox последняя версия 497b83a63aad 11 месяцев назад 1,24 МБ 192.168.26.103 | ИЗМЕНЕНО | rc=0 >> liruilong/my-busybox последняя версия 497b83a63aad 11 месяцев назад 1,24 МБ 192.168.26.105 | ИЗМЕНЕНО | rc=0 >> liruilong/my-busybox последняя версия 497b83a63aad 11 месяцев назад 1,24 МБ 192.168.26.100 | ИЗМЕНЕНО | rc=0 >> liruilong/my-busybox последняя версия 497b83a63aad 11 месяцев назад 1,24 МБ 192.168.26.106 | ИЗМЕНЕНО | rc=0 >> liruilong/my-busybox последняя версия 497b83a63aad 11 месяцев назад 1,24 МБ ┌──[[email protected]]-[~/ansible] └─$
┌──[[email protected]]-[~/ansible] └─$ansible all -mshell -a "docker images | grep liruilong/hikvision-sdk-config-ftp" -i host.yaml 192.168.26.102 | НЕУДАЧА | RC=1 >> ненулевой код возврата 192.168.26.100 | НЕУДАЧА | RC=1 >> ненулевой код возврата 192.168.26.103 | НЕУДАЧА | RC=1 >> ненулевой код возврата 192.168.26.105 | ИЗМЕНЕНО | rc=0 >> liruilong/hikvision-sdk-config-ftp последняя версия a02cd03b4342 4 месяца назад 830 МБ 192.168.26.101 | НЕУДАЧА | RC=1 >> ненулевой код возврата 192.168.26.106 | НЕУДАЧА | RC=1 >> ненулевой код возврата ┌──[[email protected]]-[~/ansible] └─$
Включить автоматическое обновление
┌──[[email protected]]-[~/ansible] └─$kubectl annotate imagecaches imagecache1 -n kube-fledged kubefledged.io/refresh-imagecache= imagecache.kubefledged.io/imagecache1 с аннотациями ┌──[[email protected]]-[~/ansible] └─$
Добавить кеш изображений
Добавить новый кэш изображений
┌──[[email protected]]-[~/ansible] └─$kubectl get imagecaches.kubefledged.io -n kube-fledged imagecache1 -o json { "apiVersion": "kubefledged.io/v1alpha2", "kind": "ImageCache", "метаданные": { "creationTimestamp": "2024-03-01T15:08:42Z", «поколение»: 92, "ярлыки": { "приложение": "kubefledged", "kubefledged": "imagecache" }, "имя": "imagecache1", "namespace": "kube-оперившийся", "resourceVersion": "20175233", "uid": "3a680a57-d8ab-444f-b9c9-4382459c5c72" }, "спецификация": { "Спецификация кэша": [ { "изображений": [ "liruilong/my-busybox: последний", "liruilong/jdk1.8_191: последний" ] }, { "изображений": [ "liruilong/hikvision-sdk-config-ftp: последний" ], "nodeSelector": { "kubernetes.io/hostname": "vms105.liruilongs.github.io" } } ] }, "положение дел": { "completionTime": "2024-03-02T01:43:32Z", "message": "Все запрошенные изображения успешно перенесены в соответствующие узлы", "причина": "ImageCacheUpdate", "startTime": "2024-03-02T01:40:34Z", "статус": "Успешно" } } ┌──[[email protected]]-[~/ansible] └─$
Подтвердить через ansible
┌──[[email protected]]-[~/ansible] └─$ansible all -mshell -a "docker images | grep liruilong/jdk1.8_191" -i host.yaml 192.168.26.101 | НЕУДАЧА | RC=1 >> ненулевой код возврата 192.168.26.100 | НЕУДАЧА | RC=1 >> ненулевой код возврата 192.168.26.102 | НЕУДАЧА | RC=1 >> ненулевой код возврата 192.168.26.103 | НЕУДАЧА | RC=1 >> ненулевой код возврата 192.168.26.105 | НЕУДАЧА | RC=1 >> ненулевой код возврата 192.168.26.106 | НЕУДАЧА | RC=1 >> ненулевой код возврата ┌──[[email protected]]-[~/ansible] └─$ansible all -mshell -a "docker images | grep liruilong/jdk1.8_191" -i host.yaml 192.168.26.101 | ИЗМЕНЕНО | rc=0 >> liruilong/jdk1.8_191 последняя версия 17dbd4002a8c 5 лет назад 170 МБ 192.168.26.102 | ИЗМЕНЕНО | rc=0 >> liruilong/jdk1.8_191 последняя версия 17dbd4002a8c 5 лет назад 170 МБ 192.168.26.100 | ИЗМЕНЕНО | rc=0 >> liruilong/jdk1.8_191 последняя версия 17dbd4002a8c 5 лет назад 170 МБ 192.168.26.103 | ИЗМЕНЕНО | rc=0 >> liruilong/jdk1.8_191 последняя версия 17dbd4002a8c 5 лет назад 170 МБ 192.168.26.105 | ИЗМЕНЕНО | rc=0 >> liruilong/jdk1.8_191 последняя версия 17dbd4002a8c 5 лет назад 170 МБ 192.168.26.106 | ИЗМЕНЕНО | rc=0 >> liruilong/jdk1.8_191 последняя версия 17dbd4002a8c 5 лет назад 170 МБ ┌──[[email protected]]-[~/ansible] └─$
Удалить кэш изображений
┌──[[email protected]]-[~/ansible] └─$kubectl edit imagecaches imagecache1 -n kube-fledged imagecache.kubefledged.io/imagecache1 отредактировано ┌──[[email protected]]-[~/ansible] └─$kubectl get imagecaches.kubefledged.io -n kube-fledged imagecache1 -o json { "apiVersion": "kubefledged.io/v1alpha2", "kind": "ImageCache", "метаданные": { "creationTimestamp": "2024-03-01T15:08:42Z", «поколение»: 94, "ярлыки": { "приложение": "kubefledged", "kubefledged": "imagecache" }, "имя": "imagecache1", "namespace": "kube-оперившийся", "resourceVersion": "20175766", "uid": "3a680a57-d8ab-444f-b9c9-4382459c5c72" }, "спецификация": { "Спецификация кэша": [ { "изображений": [ "liruilong/jdk1.8_191: последний" ] }, { "изображений": [ "liruilong/hikvision-sdk-config-ftp: последний" ], "nodeSelector": { "kubernetes.io/hostname": "vms105.liruilongs.github.io" } } ] }, "положение дел": { "message": "Кэш изображений обновляется. Пожалуйста, просмотрите статус через некоторое время", "причина": "ImageCacheUpdate", "startTime": "2024-03-02T01:48:03Z", "status": "Обработка" } }
Благодаря подтверждению Ansible вы можете увидеть, что независимо от того, является ли это узлом на главном или рабочем узле, соответствующий кеш изображения был очищен.
┌──[[email protected]]-[~/ansible] └─$ansible all -mshell -a "docker images | grep liruilong/my-busybox" -i host.yaml 192.168.26.102 | ИЗМЕНЕНО | rc=0 >> liruilong/my-busybox последняя версия 497b83a63aad 11 месяцев назад 1,24 МБ 192.168.26.101 | ИЗМЕНЕНО | rc=0 >> liruilong/my-busybox последняя версия 497b83a63aad 11 месяцев назад 1,24 МБ 192.168.26.105 | НЕУДАЧА | RC=1 >> ненулевой код возврата 192.168.26.100 | ИЗМЕНЕНО | rc=0 >> liruilong/my-busybox последняя версия 497b83a63aad 11 месяцев назад 1,24 МБ 192.168.26.103 | НЕУДАЧА | RC=1 >> ненулевой код возврата 192.168.26.106 | НЕУДАЧА | RC=1 >> ненулевой код возврата ┌──[[email protected]]-[~/ansible] └─$ansible all -mshell -a "docker images | grep liruilong/my-busybox" -i host.yaml 192.168.26.105 | НЕУДАЧА | RC=1 >> ненулевой код возврата 192.168.26.102 | НЕУДАЧА | RC=1 >> ненулевой код возврата 192.168.26.103 | НЕУДАЧА | RC=1 >> ненулевой код возврата 192.168.26.101 | НЕУДАЧА | RC=1 >> ненулевой код возврата 192.168.26.100 | НЕУДАЧА | RC=1 >> ненулевой код возврата 192.168.26.106 | НЕУДАЧА | RC=1 >> ненулевой код возврата ┌──[[email protected]]-[~/ansible] └─$
Здесь следует отметить, что если все кэши изображений очищены, следующий массив необходимо записать как «». images
┌──[[email protected]]-[~/ansible] └─$kubectl edit imagecaches imagecache1 -n kube-fledged imagecache.kubefledged.io/imagecache1 отредактировано ┌──[[email protected]]-[~/ansible] └─$ansible all -mshell -a "docker images | grep liruilong/jdk1.8_191" -i host.yaml 192.168.26.102 | НЕУДАЧА | RC=1 >> ненулевой код возврата 192.168.26.101 | НЕУДАЧА | RC=1 >> ненулевой код возврата 192.168.26.100 | НЕУДАЧА | RC=1 >> ненулевой код возврата 192.168.26.105 | НЕУДАЧА | RC=1 >> ненулевой код возврата 192.168.26.103 | НЕУДАЧА | RC=1 >> ненулевой код возврата 192.168.26.106 | НЕУДАЧА | RC=1 >> ненулевой код возврата ┌──[[email protected]]-[~/ansible] └─$kubectl get imagecaches.kubefledged.io -n kube-fledged imagecache1 -o json { "apiVersion": "kubefledged.io/v1alpha2", "kind": "ImageCache", "метаданные": { "creationTimestamp": "2024-03-01T15:08:42Z", «поколение»: 98, "ярлыки": { "приложение": "kubefledged", "kubefledged": "imagecache" }, "имя": "imagecache1", "namespace": "kube-оперившийся", "resourceVersion": "20176849", "uid": "3a680a57-d8ab-444f-b9c9-4382459c5c72" }, "спецификация": { "Спецификация кэша": [ { "изображений": [ "" ] }, { "изображений": [ "liruilong/hikvision-sdk-config-ftp: последний" ], "nodeSelector": { "kubernetes.io/hostname": "vms105.liruilongs.github.io" } } ] }, "положение дел": { "completionTime": "2024-03-02T01:52:16Z", "message": "Все кэшированные изображения успешно удалены из соответствующих узлов", "причина": "ImageCacheUpdate", "startTime": "2024-03-02T01:51:47Z", "статус": "Успешно" } } ┌──[[email protected]]-[~/ansible] └─$
В случае удаления с помощью следующего метода непосредственно прокомментируйте соответствующий тег.
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$cat kubefledged-imagecache.yaml --- apiVersion: kubefledged.io/v1alpha2 вид: ImageCache метаданные: # Имя кэша изображений. Кластер может иметь несколько объектов кэша изображений. имя: imagecache1 пространство имен: kube-оперившийся # Пространство имен kubernetes, которое будет использоваться для этого кеша изображений. Вы можете выбрать другое пространство имен по своему усмотрению. этикетки: приложение: kubefledged kubefledged: imagecache спецификация: # Поле «cacheSpec» позволяет пользователю определить список изображений и указать, на каких рабочих узлах эти изображения должны быть кэшированы (т. е. предварительно извлечены). Спецификация кэша: # Указывает список изображений (nginx:1.23.1) без селектора узлов, поэтому эти изображения будут кэшироваться на всех узлах кластера. #- изображений: #- liruilong/my-busybox:latest # Указывает список изображений (cassandra:v7 и etcd:3.5.4-0) с селектором узлов, следовательно, эти изображения будут кэшироваться только на узлах, выбранных селектором узлов. - изображений: - liruilong/hikvision-sdk-config-ftp: последний Селектор узла: kubernetes.io/имя хоста: vms105.liruilongs.github.io # Указывает список секретов извлечения изображений для извлечения изображений из частных репозиториев в кеш #imagePullSecrets: #- имя: myregistrykey ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$
Затем будет сообщено о следующей ошибке
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$kubectl edit imagecaches imagecache1 -n kube-fledged ошибка: imagecaches.kubefledged.io «imagecache1» не удалось исправить: веб-перехватчик приема «validate-image-cache.kubefledged.io» отклонил запрос: несоответствие в номере. списков изображений Вы можете запустить kubectl replace -f /tmp/kubectl-edit-4113815075.yaml, чтобы попробовать это обновление еще раз.
Ссылка на часть сообщения в блоге
© Авторские права на ссылочные ссылки в этой статье принадлежат оригинальному автору. Если есть какие-либо нарушения, пожалуйста, сообщите нам. Если вы согласны с этим, не скупитесь на звезды:)
https://github.com/senthilrch/kube-fledged
Нажмите, чтобы подписаться и узнать о новых технологиях Huawei Cloud как можно скорее~
Товарищ-цыпленок «открыл исходный код» Deepin-IDE и наконец-то добился начальной загрузки! Хороший парень, Tencent действительно превратила Switch в «мыслящую обучающуюся машину». Обзор сбоев Tencent Cloud от 8 апреля и объяснение ситуации. Реконструкция запуска удаленного рабочего стола RustDesk. Веб-клиент . Терминальная база данных с открытым исходным кодом WeChat на основе SQLite. WCDB положила начало серьезному обновлению. Апрельский список TIOBE: PHP упал до рекордно низкого уровня, Фабрис Беллард, отец FFmpeg, выпустил инструмент сжатия звука TSAC , Google выпустил большую модель кода CodeGemma , она вас убьет? Это так хорошо, что это инструмент с открытым исходным кодом - инструмент для редактирования изображений и плакатов с открытым исходным кодом.