如何在Azure集群中获取Pod镜像并完成类似docker diff的对比操作
Azure环境替代docker diff及获取容器镜像方案
背景说明
当前Azure Kubernetes服务(AKS)默认使用containerd作为容器运行时,未预装Docker,因此无法直接使用Docker相关命令。以下是等效实现方案:
方案1:直接查询容器与原始镜像的差异(等效docker diff)
需要登录Pod所在的Azure节点执行操作:
- 首先获取Pod调度的节点名称:
kubectl get pod <目标Pod名> -n <命名空间> -o jsonpath='{.spec.nodeName}' - 登录对应节点后,获取目标容器ID:
crictl ps | grep <Pod名称/原始镜像名> - 执行差异查询命令,直接输出容器可写层和原始镜像的差异:
crictl diff <容器ID>
方案2:导出原始镜像和运行中容器完整文件系统做对比
如果需要全量对比两个文件系统,可通过以下步骤导出两份文件:
- 导出原始镜像
- 查询Pod使用的原始镜像地址:
kubectl get pod <目标Pod名> -n <命名空间> -o jsonpath='{.spec.containers[*].image}' - 节点上拉取并导出原始镜像包:
crictl pull <原始镜像地址> && crictl save <原始镜像地址> -o original-image.tar
- 导出运行中容器的完整文件系统
crictl export <容器ID> -o running-container.tar - 本地解压两个tar包后即可进行任意维度的内容对比
轻量替代方案(无需登录节点)
如果仅需要获取容器内的变更文件,无需全量对比:
- 通过kubectl exec进入容器,筛选出创建/修改时间晚于容器启动时间的文件,即为变更内容
- 拷贝指定变更文件到本地:
kubectl cp <命名空间>/<目标Pod名>:<容器内文件路径> <本地存储路径>
注意:crictl是containerd运行时官方配套的CLI工具,Azure节点默认预装,无需额外部署。
内容的提问来源于stack exchange,提问作者Celestial
相关产品推荐
相关产品推荐

