kubernetes kubectl rollout restart deployment< deployment-name>无法获取最新镜像

dojqjjoe  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(2)|浏览(138)

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

zpf6vheq

zpf6vheq1#

tl;dr

我只是想在这里添加一个关于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 bug之类的。
但结果是我不得不再次运行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
从此以后,我过着幸福快乐的生活。
希望这对你有帮助,也希望你从此过上幸福的生活。

kmbjn2e3

kmbjn2e32#

如果您有一个重用/替换现有标记的图像标记命名约定,则可以使用这种方法。
您将希望容器imagePullPolicy: Always使用这种方法。
如果您的部署yaml没有更改,但您只需要使用相同标记(与当前运行的标记相同)获取发布的映像,则可以使用以下命令-

kubectl scale --replicas=0 deployment my-deployment-name

# then
kubectl scale --replicas=1 deployment my-deployment-name
# or
kubectl apply -f my-deployment-name.yaml

只需相应地更改目标副本计数或重新应用原始部署yaml清单。
你也可以把它们串在一起-

kubectl scale --replicas=0 deployment my-deployment-name && kubectl scale --replicas=1 deployment my-deployment-name

相关问题