3 votes

Comment mettre à jour un déploiement Kubernetes sur Google Container Engine?

J'ai suivi quelques guides, et j'ai mis en place CI avec Google Container Engine et Google Container Registry. Le problème est que mes mises à jour ne sont pas appliquées au déploiement.

Voici donc mon deployment.yml qui contient un Service et un Déploiement Kubernetes :

apiVersion: v1
kind: Service 
metadata:
  name: my_app
  labels:
    app: my_app
spec:
  type: LoadBalancer 
  ports:
    - port: 80
      targetPort: 3000
  selector:
    app: my_app
--- 
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my_app
spec:
  replicas: 1 
  template: 
    metadata:
      labels:
        app: my_app
    spec:
      containers:
        - name: node 
          image: gcr.io/me/my_app:latest
          ports:
            - containerPort: 3000
          resources:
            requests:
              memory: 100

        - name: phantom
          image: docker.io/wernight/phantomjs:2.1.1
          command: ["phantomjs", "--webdriver=8910", "--web-security=no", "--load-images=false", "--local-to-remote-url-access=yes"]
          ports: 
            - containerPort: 8910
          resources:
            requests:
              memory: 1000

Dans le cadre de mon processus CI, j'exécute un script qui met à jour l'image dans le registre Google Cloud, puis exécute kubectl apply -f /deploy/deployment.yml. Les deux tâches réussissent, et je suis notifié que le Déploiement et le Service ont été mis à jour :

2016-09-28T14:37:26.375Zgoogleclouddeploymentservice "my_app" configuré
2016-09-28T14:37:27.370Zgoogleclouddeploymentdeployment "my_app" configuré

Étant donné que j'ai inclus l'étiquette :latest sur mon image, je pensais que l'image serait téléchargée à chaque fois que le déploiement est mis à jour. Selon les docs, un RollingUpdate devrait également être la stratégie par défaut.

Cependant, lorsque j'exécute mon script CI qui met à jour le déploiement, l'image mise à jour n'est pas téléchargée et les changements ne sont pas appliqués. Que me manque-t-il? Je suppose que puisqu'il n'y a pas de changement dans deployment.yml, aucune mise à jour n'est appliquée. Comment puis-je faire en sorte que Kubernetes télécharge mon image mise à jour et utilise un RollingUpdate pour la déployer?

2voto

Sam P Points 660

Vous pouvez forcer une mise à jour d'un déploiement en changeant n'importe quel champ, tel qu'une étiquette. Ainsi, dans mon cas, j'ai simplement ajouté ceci à la fin de mon script CI :

kubectl patch deployment fb-video-extraction -p \
  "{\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"date\":\"`date +'%s'`\"}}}}}"

0voto

errordeveloper Points 1649

Nous avons récemment publié un aperçu technique de la manière dont l'approche que nous appelons l'approche GitOps peut être implémentée dans GKE.

Tout ce que vous avez à faire est de configurer le constructeur GCR pour récupérer les modifications de code depuis Github et exécuter les builds, puis d'installer l'agent Weave Cloud dans votre cluster et de le connecter à un dépôt où les fichiers YAML sont stockés, et l'agent se chargera de mettre à jour le dépôt avec de nouvelles images et d'appliquer les modifications au cluster.

Pour un aperçu plus général, voir aussi :


Déni de responsabilité : Je suis un contributeur de Kubernetes et un employé de Weaveworks. Nous développons des outils open source et commerciaux qui aident les gens à mettre en production Kubernetes plus rapidement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X