云原生开发工具DevOps容器编排【免费下载链接】devspaceDevSpace - The Fastest Developer Tool for Kubernetes ⚡ Automate your deployment workflow with DevSpace and develop software directly inside Kubernetes.项目地址https://gitcode.com/gh_mirrors/dev/devspace点击查看免费下载DevSpace 的devspace cleanup命令组负责回收开发过程中积累的冗余资源本篇以官方命令文档devspace cleanup为骨架结合当前仓库的源码实现完整讲解devspace cleanup images与devspace cleanup local-registry两个子命令的作用、执行流程、相关的全局标志以及它们背后对 Docker API 和 Kubernetes 资源的调用链帮助你在反复构建镜像、使用本地镜像仓库后安全地清理本地 Docker 守护进程和集群中的残留物。命令总览devspace cleanup 是什么devspace cleanup用于清理资源Cleans up resources它本身是一个父命令不接收位置参数也不直接执行删除动作。真正的清理逻辑由子命令承担。从命令注册源码 NewCleanupCmd 可以看到其结构// cmd/cleanup/cleanup.go cleanupCmd : cobra.Command{ Use: cleanup, Short: Cleans up resources, Args: cobra.NoArgs, } cleanupCmd.AddCommand(newImagesCmd(f, globalFlags)) // devspace cleanup images cleanupCmd.AddCommand(newLocalRegistryCmd(f, globalFlags)) // devspace cleanup local-registry // 允许插件注册 cleanup 分组下的扩展子命令 plugin.AddPluginCommands(cleanupCmd, plugins, cleanup)也就是说devspace cleanup提供两个内置子命令devspace cleanup images—— 删除本地 Docker 中由 DevSpace 构建的镜像并顺带清理 dangling悬空镜像devspace cleanup local-registry—— 删除 DevSpace 部署到集群中的本地镜像仓库Local Registry。同时该命令组还通过plugin.AddPluginCommands(cleanupCmd, plugins, cleanup)预留了插件扩展点已安装的 DevSpace 插件可以注册名为cleanup xxx的子命令可用devspace list plugins查看已注册的插件命令。全局与继承标志Global Inherited Flagsdevspace cleanup及其子命令继承了 DevSpace 的全部全局标志。以下按官方命令文档devspace cleanup --help完整列出这些标志对两个子命令同样生效标志说明-h, --help显示当前命令的帮助--config string指定要使用的 devspace 配置文件devspace.yaml路径--debug出错时打印堆栈stack trace--disable-profile-activation为 true 时忽略所有 profile 激活配置--inactivity-timeout int用户无鼠标/键盘交互多少分钟后 DevSpace 自动退出0 表示禁用。仅在 Windows 和 macOS 上支持默认 180--kube-context string指定要使用的 Kubernetes context-n, --namespace string指定要使用的 Kubernetes namespace--no-warn为 true 时切换到与上次不同的 namespace 或 kube-context 部署/操作时不再警告-p, --profile strings要应用的 DevSpace profile多个 profile 按指定顺序依次应用--profile-parent strings应先于指定 profile 应用的一个或多个父 profile如devspace dev --profile-parentbase1 --profile-parentbase2 --profilemy-profile--profile-refresh为 true 时会重新拉取并下载 profile 父级源--restore-vars为 true 时在加载配置前先从 Kubernetes 恢复变量--save-vars为 true 时在加载配置后将变量保存到 Kubernetes--silent静默运行除 panic 与 fatal 外不输出任何日志-s, --switch-context已废弃DEPRECATED切换并使用上次部署该项目所用的 kube context 和 namespace--var strings运行时覆盖变量如--varMYVARMYVALUE--vars-secret string启用--restore-vars或--save-vars时用于存取变量的 Secret 名称默认devspace-vars对清理命令而言最常用的通常是-n/--namespace、--kube-context决定去哪个命名空间查找本地 registry和--config指定配置文件位置。devspace cleanup images清理本地 Docker 镜像适用场景如果你经常通过devspace build构建镜像本地 Docker 守护进程里可能已经堆满了大量带不同 tag 的镜像例如带${devspace.git.commit}、random-####这类 schema 标签。devspace cleanup images会删除devspace.yaml中images配置段声明的所有镜像再清理所有 dangling 镜像。执行流程源码级解读核心逻辑位于 RunCleanupImages完整调用链如下定位项目通过configLoader.SetDevSpaceRoot(log)找到devspace.yaml所在的项目根目录如果找不到配置直接返回message.ConfigNotFound错误——因此该命令必须在包含devspace.yaml的项目目录下运行创建客户端先根据--kube-context/-n创建 kube 客户端再通过 docker.NewClientWithMinikube 创建 Docker 客户端且preferMinikubetrue——即如果当前集群是 minikube会优先把构建/删除操作落到 minikube 虚拟机内的 Docker 守护进程失败时回退到本机环境加载配置configLoader.Load(...)解析并合并出最终配置。若len(config.Images) 0直接输出No images found in config to delete并结束连通性检查client.Ping(ctx)失败时报错Docker seems to be not running: ...即要求本地或 minikube 内的Docker 守护进程处于运行状态逐镜像删除遍历config.Images对每个imageConfig.Image镜像仓库与名称调用 DeleteImageByName。底层删除的实现值得注意见 DeleteImageByFilter// pkg/devspace/docker/images.go func (c *client) DeleteImageByFilter(ctx context.Context, filter filters.Args, log log.Logger) ([]image.DeleteResponse, error) { summaries, err : c.ImageList(ctx, image.ListOptions{Filters: filter}) // ... for _, summary : range summaries { deleteResponse, err : c.ImageRemove(ctx, summary.ID, image.RemoveOptions{ PruneChildren: true, // 级联清理因删除该镜像而失效的子层/子镜像 Force: true, // 强制删除即使有容器依赖 }) // ... } }即先按reference过滤出镜像再逐个ImageRemove并且带Force与PruneChildren选项保证构建产生的中间层也会被连带回收。日志中会区分输出Deleted xxx真正删除与Untagged xxx仅移除 tag。循环清理 dangling 镜像// cmd/cleanup/images.go L111-L128 for { response, err : client.DeleteImageByFilter(ctx, filters.NewArgs(filters.Arg(dangling, true)), log) // ... if len(response) 0 { break } }命令以danglingtrue过滤反复删除悬空镜像直到一轮没有任何可删项为止最终输出Successfully cleaned up images。用法示例# 在包含 devspace.yaml 的项目目录下 devspace cleanup images # 指定配置文件 devspace cleanup images --config ./devspace.dev.yaml # 若镜像构建在 minikube 的 docker 中会优先清理 minikube 内的镜像 devspace cleanup images --kube-context minikube对应的镜像声明来自devspace.yaml的images段详见 images 配置参考images: backend: image: ghcr.io/org/project/image # cleanup images 会删除该镜像在本地的副本 tags: - latest - dev-${devspace.git.commit} dockerfile: ./Dockerfiledevspace cleanup local-registry删除集群中的本地镜像仓库背景Local Registry 是什么当本地环境没有目标镜像仓库的推送权限时DevSpace 的降级策略是如果目标是 KinD 集群则用kind load docker-image直接载入其他集群则由 DevSpace 在集群内部署一个本地镜像仓库Local Registry并把项目里的所有镜像地址透明改写为localhost:[NODE_PORT]/...不修改磁盘上的devspace.yaml。更多细节可参考 Local Registry 配置文档。这个本地 registry 默认以registry:2.8.1镜像、emptyDir卷 Deployment的方式部署启用persistence时改为StatefulSet 持久卷。当你要卸载它例如切换到有真实仓库权限的环境、或回收集群存储时就使用devspace cleanup local-registry。相关默认值定义在 localregistry 包的 Options// pkg/devspace/build/localregistry/options.go RegistryName registry // 资源默认名称 RegistryImage registry:2.8.1 BuildKitImage moby/buildkit:master-rootless RegistryPort 5000 RegistryDefaultStorage 5Gi // persistence 默认卷大小devspace.yaml中可通过localRegistry段覆盖这些默认值localRegistry: name: registry # 资源名默认 registry namespace: [KUBE CONTEXT NAMESPACE] # 部署命名空间 localbuild: false # true 时使用本地 docker/podman 构建再推送 image: registry:2.8.1 # registry 镜像 port: 5000 # 容器端口 persistence: enabled: true # true 时改为 StatefulSet PVC size: 10Gi storageClassName: # 为空则用集群默认 StorageClass执行流程源码级解读核心逻辑位于 RunCleanupLocalRegistry流程比cleanup images多了一层破坏性操作确认定位项目并加载配置同样要求存在devspace.yaml否则报ConfigNotFound同时通过LoadLocalCache()读取本地缓存用kubectl.CheckKubeContext校验当前 kube-context / namespace 是否与上次部署一致可用--no-warn关闭警告、-s/--switch-context自动切回上次上下文探测 registry 资源是否存在结合config.LocalRegistry与 NewDefaultOptions 得到资源名与命名空间然后分别Get该命名空间下同名的StatefulSet、Deployment和Service见 local_registry.go L97-L130三者都不存在时输出No local registry found.并安全退出任一存在则继续下一步交互确认由于删除 registry 会连同其中所有镜像一起消失命令会弹出确认问题This will delete your local registry and all the images it contains. Do you wish to continue? (Yes / No)选择No直接取消不产生任何删除动作按存在情况删除分别删除检测到的StatefulSet、Deployment、Service对IsNotFound错误做幂等容错并发或重复执行不会报错最终输出Successfully cleaned up local registry。用法示例# 删除默认命名空间中的本地 registry devspace cleanup local-registry # 明确指定 registry 所在命名空间与 context devspace cleanup local-registry -n dev --kube-context my-cluster # 使用特定配置 devspace cleanup local-registry --config devspace.yaml与其他清理类命令的关系devspace cleanup专注于镜像与本地 registry两类资源。DevSpace 文档的 Cleanup 指南 还介绍了其他几类互补的清理手段可与之搭配使用命令用途devspace reset pods还原devstart_dev注入 dev 容器后的改动恢复为原始部署形态devspace purge从集群中移除该项目的所有部署devspace reset vars重置你在 DevSpace 中设置过的变量值devspace cleanup images删除本地 Docker 中项目声明的镜像及 dangling 镜像devspace cleanup local-registry删除集群中的本地镜像仓库含其中全部镜像实践注意事项两个子命令都要求项目目录下存在devspace.yaml否则返回ConfigNotFound--config可用于显式指定配置文件。devspace cleanup images只删除images配置段声明的镜像名以及 dangling 镜像不会误删项目中未声明的其他本地镜像它要求 Docker 守护进程可达minikube 场景优先使用 VM 内的 Docker否则会报Docker seems to be not running。devspace cleanup local-registry是破坏性操作会删除 registry 内的全部镜像且命令内置了交互式确认它只会删除名为localRegistry.name默认registry的 StatefulSet/Deployment/Service不影响集群中其他资源。命名空间一致性很关键registry 部署在哪个 namespace清理时就需要用-n/--namespace或--switch-context切回指向同一命名空间否则可能探测不到资源。若确认目标无误可加--no-warn跳过上下文切换警告。子命令帮助文本可分别在 devspace_cleanup_images.md 与 devspace_cleanup_local-registry.md 中查阅父命令帮助见 devspace_cleanup.md。赞分享云原生开发工具DevOps容器编排【免费下载链接】devspaceDevSpace - The Fastest Developer Tool for Kubernetes ⚡ Automate your deployment workflow with DevSpace and develop software directly inside Kubernetes.项目地址https://gitcode.com/gh_mirrors/dev/devspace点击查看免费下载相关推荐DevSpace 清理本地 Docker 镜像devspace cleanup images 命令完整指南DevSpace 清理本地 Docker 镜像 devspace cleanup images 命令完整指南 devspace cleanup images云原生开发工具DevOps容器编排DevSpace cleanup local-registry 命令详解删除 Kubernetes 集群内本地镜像仓库的完整指南DevSpace cleanup local registry 命令详解删除 Kubernetes 集群内本地镜像仓库的完整指南 导读 devspace cl云原生开发工具DevOps容器编排devspace cleanup images 命令详解一键清理本地 Docker 构建镜像devspace cleanup images 命令详解一键清理本地 Docker 构建镜像 DevSpace 是面向 Kubernetes 的开发者工具它云原生开发工具DevOps容器编排创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?