¿Cómo fuerzo a Kubernetes a volver a extraer una imagen?
Tengo el siguiente controlador de replicación en Kubernetes en 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
Ahora, si digo
kubectl rolling-update myapp --image=us.gcr.io/project-107012/myapp:5c3dda6b
Se realiza la actualización continua, pero no se vuelve a tirar. ¿Por qué?
5 answers
Kubernetes tirará sobre la creación del Pod si cualquiera (véase updating-images doc):
- Usando imágenes etiquetadas
:latest
-
imagePullPolicy: Always
se especifica
Esto es genial si quieres tirar siempre. Pero, ¿qué pasa si quieres hacerlo on demand: Por ejemplo, si quieres usar some-public-image:latest
pero solo quieres extraer una versión más reciente manualmente cuando lo pidas? Usted puede actualmente:
- Set
imagePullPolicy
aIfNotPresent
oNever
y pre-pull: Tire manualmente las imágenes en cada nodo del clúster para que el último se almacena en caché, a continuación, hacer unkubectl rolling-update
o similar a reiniciar Pods(feo hack fácilmente roto!) -
Temporalmente cambiar
imagePullPolicy
, hacer unkubectl apply
, reiniciar el pod (por ejemplo,kubectl rolling-update
), revertirimagePullPolicy
, rehacer unkubectl apply
(feo!) -
Tirar y empujar
some-public-image:latest
a su repositorio privado y hacer unkubectl rolling-update
(pesado!)
No hay una buena solución para el pull on-demande. Si eso cambia, por favor comente; Actualizaré este anwser.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-11 13:21:34
Uno tiene que agrupar imagePullPolicy
dentro de los datos del contenedor en lugar de dentro de los datos de especificaciones. Sin embargo, presenté un problema sobre esto porque lo encuentro extraño. Además, no hay ningún mensaje de error.
Por lo tanto, este fragmento de especificación funciona:
spec:
containers:
- name: myapp
image: myregistry.com/myapp:5c3dda6b
ports:
- containerPort: 80
imagePullPolicy: Always
imagePullSecrets:
- name: myregistry.com-registry-key
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-14 09:46:03
Aparentemente ahora, cuando ejecuta una actualización continua con el argumento --image
igual que la imagen contenedor existente, también debe especificar un --image-pull-policy
. El siguiente comando debe forzar una extracción de la imagen cuando es la misma que la imagen contenedor:
kubectl rolling-update myapp --image=us.gcr.io/project-107012/myapp:5c3dda6b --image-pull-policy Always
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-19 23:06:05
El comando actualización continua, cuando se le da un argumento de imagen, asume que la imagen es diferente de lo que existe actualmente en el controlador de replicación.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-14 03:07:02
Mi truco durante el desarrollo es cambiar mi manifiesto de implementación para agregar la última etiqueta y siempre tirar así
image: etoews/my-image:latest
imagePullPolicy: Always
Luego borro el pod manualmente
kubectl delete pod my-app-3498980157-2zxhd
Debido a que se trata de una implementación, Kubernetes recreará automáticamente el pod y extraerá la última imagen.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-27 16:53:01