我正在将几个服务部署到本地群集(minikube
)使用DevSpace tool。一旦有人对其中一个服务进行更改并将图像推送到我们的私有存储库,我需要这些更改在我的本地可用。我现在要做的是完全删除minikube
集群并启动一个新的集群。在这种情况下,所有具有相同标签的图像都将更新为最新版本,而不是缓存的
但是我相信有一些更优雅的方法来克服这个问题。所以,在重新部署服务之前,我需要从我的本地集群中清理/删除/删除过时的镜像。
有人能指出它们存储在哪里,我如何审查和删除它们?谢谢。
我正在将几个服务部署到本地群集(minikube
)使用DevSpace tool。一旦有人对其中一个服务进行更改并将图像推送到我们的私有存储库,我需要这些更改在我的本地可用。我现在要做的是完全删除minikube
集群并启动一个新的集群。在这种情况下,所有具有相同标签的图像都将更新为最新版本,而不是缓存的
但是我相信有一些更优雅的方法来克服这个问题。所以,在重新部署服务之前,我需要从我的本地集群中清理/删除/删除过时的镜像。
有人能指出它们存储在哪里,我如何审查和删除它们?谢谢。
4条答案
按热度按时间jjhzyzn01#
DevSpace维护者在这里。你需要的是两件事:
1.每次运行
devspace dev
时强制重新创建pod的东西。因此,如果您使用的是Deployment或StatefulSet,则可以添加标签之类的东西,例如包含DevSpace内置的timestamp变量作为pod模板的值。imagePullPolicy: Always
,以确保Kubernetes总是为每个新创建的pod拉取最新的镜像。否则Kubernetes将使用已经缓存的镜像。在
devspace.yaml
文件中,这可能看起来像这样(如果您使用的是组件图部署):$!{DEVSPACE_TIMESTAMP}
=$!{}
强制将此var的值放置为字符串(因为k8s只允许标签使用字符串值),而DEVSPACE_TIMESTAMP
是DevSpace中预定义变量的名称。更多详细信息请参见:https://devspace.sh/cli/docs/configuration/variables/basics#predefined-variablesbwitn5fc2#
您可以尝试以下命令
移除未标记的图片:
移除所有停止的容器:
(或)
您需要停止并禁用localkube服务:
之后,您可以停止并删除容器。
会移除所有图像
yks3o0rb3#
您可以执行滚动更新,而不是删除所有映像并重新创建群集(这是假设您正在使用部署,您应该这样做)。
这也是假设,您正在使用正确的版本控制标签。
或者,如果您使用带有
latest
标签的图像,您可以将ImagePullPolicy
更改为Always
,然后使用创建新pod时,将提取较新的映像。
如果你仍然想删除未使用的docker镜像,你可以使用
这将删除所有没有至少一个容器与之关联的图像。
rnmwe5a24#
阻塞/命令式方式
下面是我在构建脚本中使用的另一种方法。
主要优点是该命令是同步的,因此您可以将其包含在构建脚本之类的东西中,而不需要您的集群每次都下载映像,以便在重建期间偶尔进行更新。
一些设置
魔法在这里发生
这种方法基于以下几个事实:
一旦
kubectl
成功退出,minikube中的镜像就会更新。注意事项:这可以通过
DaemonSet
和kubectl wait
跨整个集群完成,但当您拥有完整的集群时,你的SDLC应该少关注如何写一个脚本来完成这个任务,多关注如何正确地标记东西,这样它们就不总是:latest
或:prod
了。这种转变对于允许可预测的回滚和在集群中同时运行多个版本非常重要。