从 Azure 容器注册表中提取后,映像存储在 Azure Kubernetes 群集中的什么位置?



我正在使用 Kubernetes 来部署 Azure Kubernetes Services 提供的所有微服务。

每当我发布上个月频繁发布的微服务更新时,它都会从 Azure 容器注册表中提取新映像。

我试图弄清楚这些图像在集群中的位置?

就像Docker商店一样,/var/lib/docker 中的拉取镜像,由于 Kubernetes 在后台使用 Docker,它可能也将镜像存储在某个地方。

但是如果是这种情况,如何从集群中删除不再使用的旧映像?

在 Kubernetes v1.19 或更高版本上创建的具有 Linux 节点池的集群,其容器运行时默认为 containerd(容器运行时配置)。

要手动删除运行 containerd 的节点上未使用的映像,请执行以下操作:

标识节点名称:

kubectl get nodes

在节点上启动交互式调试容器(使用 SSH 连接到 Azure Kubernetes 服务):

kubectl debug node/aks-agentpool-11045208-vmss000003 -it --image=mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11

调试容器上的安装程序crictl(检查 crictl 的较新版本):

主机节点的文件系统在/host可用,因此请crictl配置为使用主机节点的containerd.sock

curl -sL https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.23.0/crictl-v1.23.0-linux-amd64.tar.gz | tar xzf - -C /usr/local/bin 
&& export CONTAINER_RUNTIME_ENDPOINT=unix:///host/run/containerd/containerd.sock IMAGE_SERVICE_ENDPOINT=unix:///host/run/containerd/containerd.sock

删除节点上未使用的映像:

crictl rmi --prune

您猜测它主要取决于 Docker,或者更确切地说是取决于活动 CRI 插件是什么。当磁盘空间不足时,Kubelet 会自动清理旧映像,因此您很少需要直接触摸它,但如果您这样做了(并且使用 Docker 作为运行时),那么它将与正常情况下的docker image命令相同。

我试图弄清楚这些图像驻留在 簇?

通过测试和检查,结果显示 AKS 群集中的每个节点都安装了 Docker 服务器,并且存储的映像像 Docker 一样,正如你所说的映像层存储在目录/var/lib/docker/中一样。

如何从集群中删除未使用的旧镜像 了?

您可以通过节点内的 Docker 命令执行此操作。按照使用 SSH 连接到 Azure Kubernetes 服务 (AKS) 群集节点中的步骤与节点建立连接,然后可以通过 Docker CLIdocker rmi image_name:tag删除映像,但要小心使用它,确保映像确实不再有用。

最新更新