K8S升级到1.24后,切换运行时导致 dind 构建镜像慢根因定位与解决

背景:

在aws部署没问题,dind 部署在腾讯云上,升级到1.24后,jenkins 构建速度特别慢,发现原来只占用10g的磁盘,升级后发现占用超过十倍的存储空间(取决于dockerfile中的层数)。

根因:

aws 中运行的dind 使用的 "storage-driver": "overlay2" ,腾讯云中运行的dind 使用的 "storage-driver": "vfs"

进入容器,执行命令 docker info 可以看到

Storage Driver: vfs (腾讯云)

以下是 vfs 和 overlay2 存储驱动的主要区别:

vfs (Virtual File System)

vfs 是一种非常简单的存储驱动,它将每个容器的文件系统作为一个独立的目录存储在主机文件系统中。

每个容器的文件系统都是一个完整的复制,而不是共享底层文件系统。

overlay2

overlay2 是一种更高级的存储驱动,基于 Linux 内核的 overlay 文件系统。

它使用分层机制,允许多个容器共享相同的镜像层,从而节省磁盘空间和提高启动速度。

看完差异就定位到原因了。

示例yaml

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: clean-ci
spec:
  containers:
  - name: dind
    image: 'docker:stable-dind'
    command:
    - dockerd
    - --host=unix:///var/run/docker.sock
    - --host=tcp://0.0.0.0:2376
    securityContext:
      privileged: true
    volumeMounts:
    - mountPath: /var/run
      name: cache-dir
    - mountPath: /var/lib # 挂载目录,使用主机的存储驱动,否则使用默认vfs驱动 或 /var/lib/docker
      name: host-lib
  - name: clean-ci
    image: 'docker:stable'
    command: ["/bin/sh"]
    args: ["-c", "docker info >/dev/null 2>&1; while [ $? -ne 0 ] ; do sleep 3; docker info >/dev/null 2>&1; done; docker pull library/busybox:latest; docker save -o busybox-latest.tar library/busybox:latest; docker rmi library/busybox:latest; while true; do sleep 86400; done"]
    volumeMounts:
    - mountPath: /var/run
      name: cache-dir
    - mountPath: /var/lib # 挂载目录,使用主机的存储驱动,否则使用默认vfs驱动  或 /var/lib/docker
      name: host-lib
  volumes:
  - name: cache-dir
    emptyDir: {}
  - name: host-lib
    hostPath:
      path: /data/lib
      type: ''
相关推荐
不知道累,只知道类20 小时前
记一次诡异的“偶发 404”排查:CDN 回源到 OSS 导致 REST API 失败
java·云原生
victory043120 小时前
progen2 docker镜像打包命令文档
运维·docker·容器
AKAMAI21 小时前
Akamai推出Akamai Inference Cloud (AI推理云),重新定义人工智能的应用场景与实现方式
人工智能·云原生·云计算
算是难了1 天前
Docker基础总结
运维·docker·容器
ityangs1 天前
GitLab 私服(基于 Docker)搭建方案
git·docker·容器·gitlab
沐雨风栉1 天前
告别设备限制!CodeServer+cpolar让VS Code随时随地在线编程
云原生·eureka·重构·pdf·开源
技术杠精1 天前
Docker Swarm 的负载均衡和平滑切换原理
docker·容器·负载均衡·1024程序员节
企鹅侠客1 天前
k8s-dashboard-v2.0.0-beta6部署
云原生·容器·kubernetes
奋斗的蛋黄1 天前
SRE 进阶:AI 驱动的集群全自动化排查指南(零人工干预版)
运维·人工智能·kubernetes·自动化
安卓开发者1 天前
使用Docker轻松搭建WordPress博客:完整指南
运维·docker·容器