我有一个本地部署系统,它反映了我们的生产系统。两者都是通过调用kubectl apply -f deployments-f--f-and-services.yaml部署的
我用当前的git散列标记所有的构建,这意味着对于干净的部署到GKE,所有的服务都有一个新的docker镜像标签,这意味着apply将重新启动它们,但在minikube本地,标签通常不会改变,这意味着新的代码不会运行。在此之前,我通过调用kubectl delete和kubectl create来部署到minikube,但随着我部署的服务数量的增加,这开始将开发周期拉得太远。
理想情况下,我希望有一种更好的方法来告诉kubectl应用重启部署,而不是仅仅依赖于标签?
我很好奇人们是如何处理这个问题的。
此外,我使用bazel构建所有内容,这意味着我必须非常明确地设置我的构建命令。我在想,也许我应该切换到只删除/创建我正在处理的一个服务,而让其他服务继续运行。
但在这种情况下,也许我应该只看一下网真,然后一起运行我在minikube之外开发的服务?这里的最佳实践是什么?
发布于 2017-09-06 05:37:30
我不完全确定我是否理解了你的问题,但这很可能是我的阅读理解:)无论如何,在阅读这篇文章时,我突然想到了一些想法(同样,不确定你想要实现什么)
选项1:也许您正在寻找的是缩小和扩大规模,例如,将您的部署扩展到0,然后再进行备份,假设您使用的是配置映射,并且您可能只想对其进行更新,则命令应该是kubectl scale --replicas=0 -f foo.yaml,然后再返回到任何位置
选项2:例如,如果您想要应用部署而不终止任何pod,则可以使用cascade=false (google it)
选项3:查找rollout选项来管理部署,但不确定它是否适用于服务
最后,这只是我在说的,分享一些更多的细节,比如你使用的是哪个版本的k8s?也许可以提供一个实际的用例来更好地描述这个问题。
发布于 2019-07-16 19:38:39
Kubernetes,只有当某些东西发生变化时才会触发部署,如果你有镜像拉取策略,你可以删除你的pod来获得新的镜像,如果你想让kube处理部署,你可以更新kubernetes yaml文件,以包含一个不断变化的元数据字段(我使用的是从纪元开始的秒数),这将触发一个变化。理想情况下,您应该使用CI/CD管道中的唯一标记来标记您的图像,这些标记带有构建它们所依据的提交引用。这解决了这个问题,并允许您充分利用kubernetes回滚功能。
https://stackoverflow.com/questions/46060105
复制相似问题