2017-01-19 2 views
3

Je suis très nouveau à Kubernetes et en utilisant k8s v1.4, Minikube v0.15.0 et Spotify maven Docker plugin.
Le processus de construction de mon projet crée une image Docker et la place directement dans le moteur Docker de Minikube.Mettre à jour une image de déploiement dans Kubernetes

Les modules sont créés par le déploiement que j'ai créé (à l'aide du jeu de réplicas) et la stratégie a été définie sur type: RollingUpdate.

J'ai vu cela dans la documentation:

Remarque: le déploiement d'un déploiement est déclenchée si et seulement si le modèle de pod du déploiement (à savoir .spec.template) est modifié.


Je cherche un moyen/solution facile à automatiser le flux: déclenché Construire> une nouvelle image Docker est poussé (version withoud changement)> Déploiement mettra à jour le pod> Service exposera le nouveau pod .

+0

Si vous ne changez pas l'image du tout, alors il n'y a aucun moyen de vous assurer que vous obtenez la nouvelle image dans chaque module, sauf si vous définissez 'ImagePullPolicy: Toujours »et tuez chaque pod et demandez au déploiement de le recréer. Cependant, si vous créez une nouvelle image docker à chaque fois, il serait logique de mettre à jour la balise. –

+0

@AnirudhRamanathan Comme je ne crée pas une "nouvelle" image à chaque fois, juste en mettant à jour l'image, je vais aller avec la première approche, donc il y a un moyen de tuer automatiquement les anciens pods? –

+0

'ImagePullPolicy: Always' ne fonctionne pas avec les images locales, donc pendant ce temps, je supprime manuellement les pods avec une étiquette spécifique, puis le jeu de réplicas les crée avec l'image mise à jour. se demandant s'il y a un moyen de le faire automatiquement. –

Répondre

3

lorsqu'ils ne sont pas en changeant le nom de l'image contenant ou de vous simplement l'échelle de votre application à 0 et revenir à la taille originale avec STH comme:

kubectl scale --replicas=0 deployment application 
kubectl scale --replicas=1 deployment application 

Comme mentionné dans les commentaires déjà ImagePullPolicy: Always est alors nécessaire dans votre configuration.

Lorsque vous changez l'image que je trouve que ce soit la voie à suivre plus directement à jour le

kubectl set image deployment/application app-container=$IMAGE 

pas changer l'image a l'downsite que vous aurez rien à revenir à en cas de problèmes. Par conséquent, je ne suggérerais pas d'utiliser ceci en dehors d'un environnement de développement. Edit: petit bonus - garder l'échelle en synchro avant et après pourrait ressembler à sth. comme:

replica_spec=$(kubectl get deployment/applicatiom -o jsonpath='{.spec.replicas}') 
kubectl scale --replicas=0 deployment application 
kubectl scale --replicas=$replica_spec deployment application 

Vive

+0

il y a un moyen de faire la même chose avec Kubernetes API? –

+0

Bonjour à nouveau - voir: http://stackoverflow.com/questions/41792851/manage-replicas-count-for-deployment-using-kubernetes-api/41795286#41795286 – pagid