【问题标题】:How to remove existing downloaded docker images from minikube如何从 minikube 中删除现有下载的 docker 镜像
【发布时间】:2021-10-13 17:30:41
【问题描述】:

我正在使用 DevSpace tool 将多个服务部署到我的本地集群 (minikube)。一旦有人对其中一项服务进行更改并将图像推送到我们的私人仓库,我需要这些更改在我的本地可用。我现在要做的是完全删除minikube 集群并启动一个新集群。在这种情况下,所有具有相同标签的图像都只是更新为最新版本,而不是缓存的。

但我相信有一些更优雅的方法可以克服这个问题。因此,我需要以某种方式从本地集群中清理/删除/删除过时的图像,然后再在那里重新部署服务。

有人可以指出它们的存储位置,我如何查看和删除它们?谢谢。

【问题讨论】:

    标签: docker kubernetes minikube devspace


    【解决方案1】:

    这里是 DevSpace 维护者。你需要的是两件事:

    1. 每次运行 devspace dev 时都会强制重新创建 pod。因此,如果您使用的是 Deployment 或 StatefulSet,则可以添加标签之类的内容,例如包含 DevSpace 内置时间戳变量作为 pod 模板的值。
    2. 在您的 pod 规范中添加一个 imagePullPolicy: Always,以确保 Kubernetes 始终为每个新创建的 pod 提取最新的映像。否则 Kubernetes 会使用已经缓存的镜像。

    结合起来,这在您的 devspace.yaml 文件中可能如下所示(如果您使用的是组件图表部署):

    deployments:
    - name: my-component
      helm:
        componentChart: true
        values:
          labels:
            timestamp: $!{DEVSPACE_TIMESTAMP}  # here is 1.
          containers:
          - image: "YOUR_IMAGE:latest"         # specify any tag here that you want
            imagePullPolicy: Always            # here is 2.
    

    $!{DEVSPACE_TIMESTAMP} = $!{} 强制将此 var 的值作为字符串放置(因为 k8s 只允许标签的字符串值),DEVSPACE_TIMESTAMP 是 DevSpace 中预定义变量的名称。更多细节在这里:https://devspace.sh/cli/docs/configuration/variables/basics#predefined-variables

    【讨论】:

    • imagePullPolicy: Always - 这解决了我的 minikube+DevSpace 问题。谢谢!
    【解决方案2】:

    你可以试试下面的命令

    删除未标记的图像

    docker image rm $(docker images | grep "^<none>" | awk "{print $3}")
    

    移除所有停止的容器

    docker container rm $(docker ps -a -q)
    

    (或)

    您需要停止并禁用 localkube 服务:

    systemctl disable localkube.service
    systemctl stop localkube.service
    

    之后,您可以停止和移除容器。

    docker system prune -a
    

    删除所有图片

    【讨论】:

    • 当我执行 docker images 时,我只是看不到任何部署到 minikube 的图像
    【解决方案3】:

    您可以执行滚动更新,而不是删除所有映像并重新创建集群(这是假设您正在使用部署)。

    kubectl set image deployments/<deployment-name>=<repository-name>/<image-name>:<image-tag>
    

    这也是假设,您正在使用带有标签的正确版本控制。

    或者,如果您使用带有latest 标签的图像,您可以将ImagePullPolicy 更改为Always,然后使用

    kubectl delete pod <pod-name> <pod2-name> ...
    

    在创建新 pod 时会拉取更新的图像。


    如果你仍然想删除未使用的 docker 镜像,你可以这样做

    docker image prune -a
    

    这将删除所有没有关联至少一个容器的图像。

    【讨论】:

    • @Lucas Gentele 下面写的对我有用
    猜你喜欢
    • 2022-12-26
    • 2019-05-14
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 2017-11-30
    • 2023-04-03
    相关资源
    最近更新 更多