加速 Kubernetes 镜像拉取
从镜像拉取的过程来看,我们可以从以下三个方面来加速镜像拉取:
缩减镜像大小:
使用较小的基础镜像、移除无用的依赖、减少镜像 layer 、使用多阶段构建等等。
推荐使用 docker-slim
加快镜像仓库与 k8s 节点之间的网络传输速度。
主动缓存镜像:Pre-pulled
预拉取镜像,以便后续直接使用本地缓存,比如可以使用 daemonset
定期同步仓库中的镜像到 k8s
节点本地。
本地缓存的镜像一定会占用节点的磁盘空间,也就是说缓存的镜像越多,占用的磁盘空间越大,并且缓存的镜像默认一直存在,并没有 TTL 机制(比如说多长时间以后自动过期删除)。
但是,k8s 的 GC 机制会自动清理掉镜像。当节点的磁盘使用率达到 HighThresholdPercent
高百分比阈值时(默认 85% )会触发垃圾回收,此时 kubelet 会根据使用情况删除最旧的不再使用的镜像,直到磁盘使用率达到 LowThresholdPercent(默认 80% )。
题外话 2:镜像 layer 层数真的越少越好吗?
【加速 Kubernetes 镜像拉取】我们经常会看到一些文章说在 Dockerfile
里使用更少的 RUN 命令之类的减少镜像的 layer 层数然后缩减镜像的大小,layer 越少镜像越小这确实没错,但是某些场景下得不偿失。首先,如果你的 RUN 命令很大,一旦你修改了其中某一个小的部分,那么这个 layer 在构建的时候就只能重新再来,无法使用任何缓存;其次,镜像的 layer 在上传和下载的过程中是可以并发的,而单独一个大的层无法进行并发传输。
推荐阅读
- kubernetes|2021超全整理,128道kubenetes高频面试题汇总(带答案)
- Kubernetes|Kubernetes 中的服务发现与负载均衡
- Kubernetes|k8s 1.20.2 coredns解析问题
- kubernetes|Kubernetes(k8s)---(1)集群部署
- 中间件|解构云原生,从概念到落地(阿里云、声网、微博、好未来、CNCF 的专家们怎么看())
- Kubernetes|[Kubernetes]PV,PVC,StorageClass之间的关系详解
- k8s|实战(本地存储-2022.3.1(更新版))
- Kubernetes|Kubernetes核心概念理解—StorageClass
- #|Helm包管理系统的基本概念与应用(一)