问题现象:
打包时,在拉取基础镜像时,大的layer 出现 CPOYING… 一直卡住,时间在五分钟到十分钟,然后才能成功拉到基础镜像。
解决方案参考 issue: https://github.com/containers/buildah/issues/1849
实操过程:
安装buildah fuse-overlayfs 软件包。
dnf -y install buildah fuse-overlayfs --exclude container-selinux
修改buildah 配置文件 /etc/containers/storage.conf
:
[storage]
driver = "overlay"
runroot = "/run/containers/storage"
graphroot = "/var/lib/containers/storage"
[storage.options]
additionalimagestores = [
"/var/lib/shared",
]
pull_options = {enable_partial_images = "false", use_hard_links = "false", ostree_repos=""}
[storage.options.overlay]
mount_program = "/usr/bin/fuse-overlayfs"
mountopt = "nodev,fsync=0"
[storage.options.thinpool]
理论上问题已经决绝了,通过命令查看buildah 配置是否生效:
buildah info
出现下面内容是配置成功了。
store:
...
GraphDriverName: overlay
...
RunRoot: /var/run/containers/storage
VolumePath: /var/lib/containers/storage/volumes`
GraphDriverName: overlay 出现说明配置成功, GraphDriverName: vfs 出现说明未生效。
如果未生效,检查环境变量是否将配置覆盖了:
env | grep STORAGE_DRIVER
出现 STORAGE_DRIVER=vfs
就说明配置有误,手动将环境变量调整为 export STORAGE_DRIVER=overlay
,再次 执行 buildah info
,可以看到正确的配置已生效。
容器中可以考虑镜像打包时使用ENV 设置,k8s部署时也可以覆盖改配置,保证 STORAGE_DRIVER=overlay
即可。