J'ai créé une application en utilisant le service kubernates d'Azure. Dans mon yaml, j'ai spécifié «dernière» comme version d'image pour chaque image que j'utilise.
Y a-t-il une option à faire pour que, lorsque je mets à jour le registre d'images pour que les "dernières" modifications, kubernates le déploie automatiquement? Et tout est géré de manière à ne mettre à jour qu'un seul réplica, puis à évoluer pour que le service ne soit pas interrompu pendant le déploiement?
3 Réponses :
Kubernetes n'a pas connaissance des modifications apportées à votre registre, il ne surveille pas les nouvelles images de conteneurs. Vous devrez créer un processus qui se déclenche lorsqu'une nouvelle version est publiée et met à jour votre déploiement Kubernetes. Vous pouvez utiliser des outils CI / CD pour cela, ou des choses comme Azure Functions, Azure Automation, etc.
Pour un déploiement sans temps d'arrêt, vous voudrez consulter les mises à jour progressives.
vous devriez vraiment utiliser la gestion des versions pour cela ou quelque chose comme gitops qui déclencherait des mises à jour lorsqu'une nouvelle version du conteneur est disponible. utiliser Azure Functions \ Automation pour cela n'est tout simplement pas correct. Ce n'est pas fait pour ça, ce serait compliqué \ peu fiable.
Y a-t-il une option à faire pour que, lorsque je mets à jour le registre d'images pour que les "dernières" modifications, kubernates le déploie automatiquement?
Ce n'est pas le travail de Kubernetes de gérer cela. Il y a deux durs à travailler là-dessus:
Ajouter webhook sur le registre de docker, pour docker-hub, il est Docker Hub Webhooks . Lorsqu'une nouvelle image a été envoyée dans le registre, vous pouvez envoyer une requête POST
quelque part en guise de notification.
Déployez un CI / CD pour recevoir cette notification et mettre à jour votre application. Ou créez simplement un serveur HTTP simple pour gérer la demande de notification et faites quelque chose comme kubectl ...
.
Et tout est géré de manière à ne mettre à jour qu'une seule réplique, puis à évoluer pour que le service ne soit pas interrompu pendant le déploiement?
Kubernetes gère cela en mise à jour propagée . Pour Deployment
ou StatefulSet
, les pods de mise à jour automatique de kubernetes actuels par mise à jour progressive, il vous suffit de kubectl apply -f new-spec.yaml
.
Cela semble être un bon point de départ! Serait-il possible de toujours utiliser la balise "la plus récente"? Ou dois-je toujours incrémenter la version?
Bien sûr, définissez simplement imagePullPolicy = Always
, et docker vérifiera dans le registre si la dernière image est la même que locale.