首页 > 解决方案 > kubectl rollout 重启部署没有得到最新的图像

问题描述

为什么kubectl rollout restart <deployment-name>没有得到我的最新图像?我已经重建了我的镜像,但似乎 kubernetes 没有用最新的镜像更新我的部署。

标签: kuberneteskubectl

解决方案


tl;博士

我只是想在这里添加一个关于kubectl rollout restart deployment [my-deployment-name]. 我的问题是我更改了图像名称,而没有kubectl apply -f [my-deployment-filename>.yaml先运行。

长答案

所以我之前的图像名称是microservices/posts在我的本地,看起来像这样。

# This is a file named `posts-depl.yaml`
apiVersion: apps/v1
kind: Deployment
metadata:
  name: posts-depl
spec:
  replicas: 1
  selector:
    matchLabels:
      app: posts
  template:
    metadata:
      labels:
        app: posts
    spec:
      containers:
        - name: posts
          image: microservices/posts

但是,由于我需要将其推送到 Docker Hub,因此我使用新名称重建映像,[my docker hub username]/microservices_posts然后再推送。然后我更新了posts-depl.yaml看起来像这样。

# Still same file `posts-depl.yaml` but updated
apiVersion: apps/v1
kind: Deployment
metadata:
  name: posts-depl
spec:
  replicas: 1
  selector:
    matchLabels:
      app: posts
  template:
    metadata:
      labels:
        app: posts
    spec:
      containers:
        - name: posts
          image: [my docker hub username]/microservices_posts # Notice that I only change this part

显然,当我运行时kubectl rollout restart deployment posts-depl,它没有更新。然后我终于决定去 StackOverflow。我只是以为我犯了一个错误,或者可能遇到了 kubernetes 错误或其他什么。

但事实证明我不得不kubectl apply -f <your deployment filename>.yaml再次运行。然后它运行良好。

只是分享,可能会改变一个人的生活。;)

所以在这里回顾一下..

似乎我过去的部署是posts-depl用我之前的图像的图像名称缓存的microservices/posts,因为我构建了一个名为的新图像[my docker hub username]/microservices_posts,所以它不承认这一点。所以当我跑步时kubectl rollout restart deployment <deployment name>。它所做的是寻找microservices/posts我本地的图像!但是由于它没有更新,所以它没有做任何事情!

因此,我应该做的是再次重新运行kubectl apply -f <my deployment filename>.yaml,它已经用新的图像名称更新为 [my docker hub username]/microservices_posts

然后,我从此过上了幸福的生活。
希望对您有所帮助,愿您从此过上幸福的生活。


推荐阅读