为什么kubectl rollout restart <deployment-name>没有收到我的最新图片?我已经重建了我的镜像,但是kubernetes似乎没有用最新的镜像更新我的部署。
kubectl rollout restart <deployment-name>
zpf6vheq1#
我只是想在这里添加一个关于kubectl rollout restart deployment [my-deployment-name]失败的答案。我的问题是我更改了映像名称,没有先运行kubectl apply -f [my-deployment-filename>.yaml。
kubectl rollout restart deployment [my-deployment-name]
kubectl apply -f [my-deployment-filename>.yaml
所以我以前的图像名称是microservices/posts,这是在我的本地,看起来像这样。
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看起来像这样。
[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。那它运行得很好只是分享,可能会改变一个人的生活。;)
kubectl rollout restart deployment posts-depl
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!从此以后,我过着幸福快乐的生活。希望这对你有帮助,也希望你从此过上幸福的生活。
posts-depl
kubectl rollout restart deployment <deployment name>
kubectl apply -f <my deployment filename>.yaml
kmbjn2e32#
如果您有一个重用/替换现有标记的图像标记命名约定,则可以使用这种方法。您将希望容器imagePullPolicy: Always使用这种方法。如果您的部署yaml没有更改,但您只需要使用相同标记(与当前运行的标记相同)获取新发布的映像,则可以使用以下命令-
imagePullPolicy: Always
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
2条答案
按热度按时间zpf6vheq1#
tl;dr
我只是想在这里添加一个关于
kubectl rollout restart deployment [my-deployment-name]
失败的答案。我的问题是我更改了映像名称,没有先运行kubectl apply -f [my-deployment-filename>.yaml
。长应答
所以我以前的图像名称是
microservices/posts
,这是在我的本地,看起来像这样。但是,由于我需要将其推送到Docker Hub,因此我使用新名称
[my docker hub username]/microservices_posts
重新构建映像,然后进行推。然后我更新了posts-depl.yaml
看起来像这样。显然,当我运行
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
!从此以后,我过着幸福快乐的生活。
希望这对你有帮助,也希望你从此过上幸福的生活。
kmbjn2e32#
如果您有一个重用/替换现有标记的图像标记命名约定,则可以使用这种方法。
您将希望容器
imagePullPolicy: Always
使用这种方法。如果您的部署yaml没有更改,但您只需要使用相同标记(与当前运行的标记相同)获取新发布的映像,则可以使用以下命令-
只需相应地更改目标副本计数或重新应用原始部署yaml清单。
你也可以把它们串在一起-