我正在使用 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
删除映像,但要小心使用它,确保映像确实不再有用。