kubernetes gcp кэширует старое изображение - PullRequest
0 голосов
/ 07 февраля 2020

Я использую кластер GKE, и есть развертывание, использующее образ, который я пу sh добавляю в Реестр контейнеров на GCP, проблема в том, что хотя я создаю образ и пу sh его с тегом latest, развертывание продолжает создавать новые модули со старым кэшированным - есть ли способ обновить его без повторного развертывания (иначе говоря, не уничтожив его первым)?

Существует известная проблема с kubernetes, что даже если вы измените конфигурационные карты, старая конфигурация останется, и вы можете либо повторно развернуть ее, либо обойти с помощью

kubectl patch deployment $deployment -n $ns -p \
  "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"date\":\"`date +'%s'`\"}}}}}"

, есть ли что-то похожее с кэшированными изображениями?

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

1) Вы должны изменить способ мышления. Уничтожать стручок не плохо. Простои приложений - это то, что плохо. Вы всегда должны планировать развертывание таким образом, чтобы он мог переносить смерть одного стручка. Используйте несколько реплик для приложений без сохранения состояния и кластеров для приложений с сохранением состояния. Используйте динамическое обновление Kubernetes для любых изменений в ваших развертываниях. У меняющихся обновлений есть множество чрезвычайно важных настроек, которые напрямую влияют на время работы ваших приложений. Прочитайте его внимательно.

2) Причина, по которой Kubernetes запускает старое изображение, заключается в том, что по умолчанию он использует imagePullPolicy: IfNotPresent. Используйте imagePullPolicy: Always, и он всегда будет пытаться получить последнюю версию при повторном развертывании.

1 голос
/ 07 февраля 2020

Я думаю, что вы ищете набор или патч kubectl, которые я нашел в документации kubernetes .

Чтобы обновить образ развертывания, вы можете использовать набор kubectl

kubectl set image deployment/name_of_deployment name_of_deployment=image:name_of_image

Для обновления изображения вашего модуля вы можете использовать kubectl patch

kubectl patch pod name_of_pod  -p '{"spec":{"containers":[{"name":"name_of_pod_from_yaml","image":"name_of_image"}]}}'

Вы всегда можете использовать kubectl edit , для редактирования которого позволяет напрямую редактировать любой ресурс API, который вы можете получить с помощью инструмента командной строки.

kubectl edit deployment name_of_deployment

Дайте мне знать, если у вас есть еще вопросы.

...