Как мне заставить Kubernetes, чтобы повторно выводить изображение?
у меня есть следующий контроллер репликации в Kubernetes на GKE:
apiVersion: v1
kind: ReplicationController
metadata:
name: myapp
labels:
app: myapp
spec:
replicas: 2
selector:
app: myapp
deployment: initial
template:
metadata:
labels:
app: myapp
deployment: initial
spec:
containers:
- name: myapp
image: myregistry.com/myapp:5c3dda6b
ports:
- containerPort: 80
imagePullPolicy: Always
imagePullSecrets:
- name: myregistry.com-registry-key
теперь, если я говорю
kubectl rolling-update myapp --image=us.gcr.io/project-107012/myapp:5c3dda6b
обновление прокатки выполняется, но не повторное вытягивание. Зачем?
5 ответов:
Kubernetes потянет на создание стручок, если (см. обновление-images doc):
- использование изображений с тегами
:latest
imagePullPolicy: Always
указаноэто здорово, если вы хотите всегда тянуть. Но что делать, если вы хотите это сделать по требованию: например, если вы хотите использовать
some-public-image:latest
но только хотите вытащить более новую версию вручную, когда вы попросите об этом. В настоящее время вы можете:
- Set
imagePullPolicy
доIfNotPresent
илиNever
и pre-pull: потяните вручную изображения на каждом узле кластера, чтобы последний кэшировался, а затем выполнитеkubectl rolling-update
или аналогичный перезапуск стручков (уродливый легко сломанный Хак!)- временно изменить
imagePullPolicy
, неkubectl apply
перезагрузите РМО (например,kubectl rolling-update
), вернутьimagePullPolicy
, вернутьkubectl apply
(некрасиво!)- тянуть и толкать
some-public-image:latest
в ваш личный репозиторий и сделатьkubectl rolling-update
(тяжело!)нет хорошего решения для на-demande тянуть. Если это изменится, пожалуйста, прокомментируйте; я обновлю этот anwser.
нужно сгруппироваться
imagePullPolicy
внутри данных контейнера вместо данных спецификации. Тем не менее, я подал вопрос об этом, потому что я нахожу это странным. Кроме того, нет никакого сообщения об ошибке.Итак, этот фрагмент спецификации работает:
spec: containers: - name: myapp image: myregistry.com/myapp:5c3dda6b ports: - containerPort: 80 imagePullPolicy: Always imagePullSecrets: - name: myregistry.com-registry-key
видимо, теперь при запуске Роллинг-обновление с
--image
аргумент тот же, что и существующий образ контейнера, вы также должны указать--image-pull-policy
. Следующая команда должна принудительно вытягивать изображение, когда оно совпадает с изображением контейнера:
kubectl rolling-update myapp --image=us.gcr.io/project-107012/myapp:5c3dda6b --image-pull-policy Always
команда rolling update, когда задан аргумент изображения,предполагает, что изображение отличается чем то, что в настоящее время существует в контроллере репликации.
мой Хак во время разработки, чтобы изменить мой манифест развертывания, чтобы добавить последний тег и всегда тянуть так
image: etoews/my-image:latest imagePullPolicy: Always
затем я удаляю стручок вручную
kubectl delete pod my-app-3498980157-2zxhd
поскольку это развертывание, Kubernetes автоматически воссоздаст стручок и вытащит последний образ.