Puede configurar su pod con un período de gracia (por ejemplo, 30 segundos o más, dependiendo del tiempo de inicio del contenedor y el tamaño de la imagen) y configurar "imagePullPolicy: "Always"
. Y uso kubectl delete pod pod_name
. Se creará un nuevo contenedor y se descargará automáticamente la última imagen, luego se cancelará el contenedor anterior.
Ejemplo:
spec:
terminationGracePeriodSeconds: 30
containers:
- name: my_container
image: my_image:latest
imagePullPolicy: "Always"
Actualmente estoy usando Jenkins para compilaciones automatizadas y etiquetado de imágenes y se parece a esto:
kubectl --user="kube-user" --server="https://kubemaster.example.com" --token=$ACCESS_TOKEN set image deployment/my-deployment mycontainer=myimage:"$BUILD_NUMBER-$SHORT_GIT_COMMIT"
Otro truco es ejecutar inicialmente:
kubectl set image deployment/my-deployment mycontainer=myimage:latest
y entonces:
kubectl set image deployment/my-deployment mycontainer=myimage
En realidad, activará la actualización continua, pero asegúrese de que también haya imagePullPolicy: "Always"
configurado.
Actualizar:
Otro truco que encontré, donde no tienes que cambiar el nombre de la imagen, es cambiar el valor de un campo que desencadenará una actualización continua, como terminationGracePeriodSeconds
. Para ello, puede utilizar kubectl edit deployment your_deployment
o kubectl apply -f your_deployment.yaml
o el uso de un parche de la siguiente manera:
kubectl patch deployment your_deployment -p \
'{"spec":{"template":{"spec":{"terminationGracePeriodSeconds":31}}}}'
Solo asegúrese de cambiar siempre el valor del número.
kubectl set image
comando, kubernetes realizará una actualización continua. Por ejemplo, supongamos que implementó "repo / myimage: latest". Mientras tanto, su imagen fue cambiada y empujada al repositorio con la etiqueta "v0.2". Puede realizar una actualización ejecutandokubectl set image deployment/my-deployment mycontainer=myimage:v0.2
Esta imagen también tendrá la etiqueta "más reciente".ACTUALIZACIÓN 2019-06-24
Según el comentario de @Jodiug, si tiene una
1.15
versión, puede usar el comando:Lea más sobre el tema:
https://github.com/kubernetes/kubernetes/issues/13488
Bueno, hay una discusión interesante sobre este tema en el proyecto Kubernetes GitHub. Vea el problema: https://github.com/kubernetes/kubernetes/issues/33664
De las soluciones descritas allí, sugeriría una de dos.
primero
1.Preparar el despliegue
2 desplegar
Segundo (un trazador de líneas):
Por supuesto,
imagePullPolicy: Always
se requiere en ambos casos.fuente
Esta es la forma actual de activar una actualización continua y dejar los viejos conjuntos de réplicas en su lugar para otras operaciones proporcionadas por
kubectl rollout
retrocesos similares.fuente
undo
comando o equivalente.Uso Gitlab-CI para construir la imagen y luego implementarla directamente en GCK. Si usa un pequeño truco para lograr una actualización continua sin cambiar ninguna configuración real del contenedor, que está cambiando una etiqueta al commit-short-sha actual.
Mi comando se ve así:
Donde puede usar cualquier nombre y cualquier valor para la etiqueta siempre que cambie con cada compilación.
¡Que te diviertas!
fuente
Parece que k8s espera que proporcionemos una etiqueta de imagen diferente para cada implementación. Mi estrategia por defecto sería hacer que el sistema de generación de EC y empujar las imágenes estibador, etiquetado con el número de compilación:
xpmatteo/foobar:456
.Para el desarrollo local, puede ser conveniente usar un script o un archivo MAKE, como este:
El
sed
comando reemplaza un marcador de posición en el documento de implementación con la etiqueta de imagen generada real.fuente
Estoy usando Azure DevOps para implementar las aplicaciones de contenedor, me las arreglo para superar este problema fácilmente usando el ID de compilación
Cada vez que compila y genera la nueva ID de compilación, utilizo esta ID de compilación como etiqueta para la imagen de acoplador. Aquí hay un ejemplo.
nombre de imagen: buildID
una vez que su imagen se compila (CI) con éxito, en la canalización de CD en el archivo yml de implementación, le doy el nombre de la imagen como
nombre de imagen: env: buildID
aquí evn: buildid es la variable de desarrollo azul que tiene el valor de ID de compilación.
así que ahora cada vez que tengo nuevos cambios para compilar (CI) e implementar (CD).
comente si necesita una definición de compilación para CI / CD.
fuente