Подробное объяснение управления кэшем изображений K8s на платформе kube

Эта статья опубликована 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 , она вас убьет? Это так хорошо, что это инструмент с открытым исходным кодом - инструмент для редактирования изображений и плакатов с открытым исходным кодом.
{{o.name}}
{{m.name}}

рекомендация

отmy.oschina.net/u/4526289/blog/11052468