k3s 如何解决 ErrImagePull 拉取镜像超时 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vmoewill
V2EX    Kubernetes

k3s 如何解决 ErrImagePull 拉取镜像超时

  •  
  •   vmoewill 2023-03-26 10:42:30 +08:00 3117 次点击
    是一个创建于 929 天前的主题,其中的信息可能已经有所发展或是发生改变。

    由于私有的镜像太大了,worker 节点的带宽很小,需要拉取将近 3 分钟左右,但是 k3s 每次都是在 2 分钟的时候报 ErrImagePull 错误。有什么方法能增大这个 2 分钟的限制吗?

    P.S.

    1. k3s 配置文件和 docker 的 daemon.json 快翻烂了,也没找到有关配置拉取时间的参数,临时的解决方法是手动在 worker 节点 pull 下镜像。我在 k3s 的 issue 中,发现有人回复说,这属于 docker 的问题,不属于 k3s 的范畴,但网上千篇一律的修改 dns 和镜像仓库加速似乎也不是解决镜像仓库的问题。

    2. daemon.json -> https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file

    3. docker version: 20.10.21 k3s version: v1.24.6+k3s1

    第 1 条附言    2023-03-26 19:46:24 +08:00
    目前临时的方法是在 rancher 滚动更新前,jenkins 先通知 worker 拉镜像,拉完在更。后续有更好的解决方法再说吧,此贴完结-。-
    15 条回复    2023-03-27 11:32:11 +08:00
    tomqin
        1
    tomqin  
       2023-03-26 11:10:39 +08:00 via Android
    换一种思路,直接 docker save 然后 scp 过去在 worker 上 docker load ?
    Phasma
        2
    Phasma  
       2023-03-26 11:13:11 +08:00
    K3s 允许你配置拉取镜像的超时时间。你可以在启动 K3s 时使用 --image-timeout 参数指定超时时间,例如:



    sudo k3s server --image-timeout 5m
    上面的命令将超时时间设置为 5 分钟。

    如果你正在使用 systemd 或者 OpenRC 来管理 K3s 服务,则可以编辑服务配置文件来设置超时时间。对于 systemd ,可以编辑 /etc/systemd/system/k3s.service 文件,在 [Service] 部分添加 --image-timeout 参数,例如:

    ExecStart=/usr/local/bin/k3s server --image-timeout 5m
    对于 OpenRC ,可以编辑 /etc/init.d/k3s 文件,在 start() 函数中添加 --image-timeout 参数,例如:


    start() {
    /usr/local/bin/k3s server --image-timeout 5m &
    }
    注意,超时时间的单位为秒或分钟,可以在参数值后面添加 s 或 m 来指定。如果未指定单位,默认为秒。



    不知道行不行 gpt 回答的
    vmoewill
        3
    vmoewill  
    OP
       2023-03-26 11:16:05 +08:00
    @hymzhek ChatGPT 我也问过了,很多参数根本不存在,还浪费很多的时间...
    vmoewill
        4
    vmoewill  
    OP
       2023-03-26 11:18:43 +08:00
    @tomqin 因为我是在 rancher 上部署的,流程大概是 jenkins 编译打包镜像 -> 推送 Harbor -> 通知 Rancher ,镜像都是带 tag 的,当然也可以让 worker 提前得到镜像,但我觉得应该是有配置这个参数的,谢谢你的回复。
    drizztdu
        5
    drizztdu  
       2023-03-26 11:25:38 +08:00 via iPhone
    https://github.com/rancher-sandbox/rancher-desktop/issues/2303 看样子是 rancher 魔改了 k3s ,导致部分 kubelet 配置参数 runtime-request-timeout 失效了。
    feedcode
        6
    feedcode  
       2023-03-26 11:49:30 +08:00
    那个 issue 是关于 rancher desktop 的,github 里的代码逻辑还是在的,
    https://github.com/k3s-io/kubernetes/blob/master/pkg/kubelet/kubelet.go#L319-L322

    ```
    remote.NewRemoteRuntimeService(kubeCfg.ContainerRuntimeEndpoint, kubeCfg.RuntimeRequestTimeout.Duration, kubeDeps.TracerProvider);
    ```
    dalamud
        7
    dalamud  
       2023-03-26 13:20:26 +08:00
    也可以提前到节点上用 crictl 把镜像拉到本地,多节点的话可以用 nodeSelector 之类的再指定到那个节点部署
    liuxingdeyu
        8
    liuxingdeyu  
       2023-03-26 13:34:59 +08:00
    个人觉得,看你镜像里面是啥,如果是每次变动都很大的东西,比如模型啥的,那就最好是拷过去,cp 或者物理拷,如果是变动小的,就先拷个基础镜像啥的,然后再拉
    vmoewill
        9
    vmoewill  
    OP
       2023-03-26 15:13:46 +08:00
    @drizztdu
    @feedcode
    `runtime-request-timeout` 这个参数我也测试过了,好像并不行。我是在 `/etc/rancher/k3s/config.yaml` 中添加了 `kubelet-arg: "--runtime-request-timeout=5m"` ,在 k3s 的启动日志中,也发现 kubelet `--runtime-request-timeout=5m`,但是到 2 分钟后依旧会报错。


    @dalamud
    @liuxingdeyu
    感谢回复
    Firxiao
        10
    Firxiao  
       2023-03-26 17:16:26 +08:00
    看讨论应该是 docker 的锅 https://github.com/k3s-io/k3s/issues/6482
    建议从私有仓库入手 毕竟拉取超过三分钟不正常
    dislazy2023
        11
    dislazy2023  
       2023-03-26 17:21:17 +08:00
    现在拉镜像也不容易了 最靠谱的方案是通过 github action 啥的 把镜像 重新 推到自己的私仓(阿里云私仓)啥的 然后直接用私仓来下来对应的镜像
    swulling
        12
    swulling  
       2023-03-26 17:24:58 +08:00
    这个和 K3s 无关,Docker 直接写死了,现在只有两种办法
    1. 换成 containerd
    2. 修改 docker 代码
    vmoewill
        13
    vmoewill  
    OP
       2023-03-26 19:46:11 +08:00
    @Firxiao
    @dislazy2023
    @swulling
    感谢回复,目前临时的方法是在 rancher 滚动更新前,jenkins 先通知 worker 拉镜像,拉完在更。后续有更好的解决方法再说吧,此贴完结-。-
    julyclyde
        14
    julyclyde  
       2023-03-26 21:04:15 +08:00
    你的 jenkins 是负责 build 吗?
    push 到哪儿去了?搞个内网服务器存放呗
    zzl22100048
        15
    zzl22100048  
       2023-03-27 11:32:11 +08:00
    k3s 默认 runtime 不是 containerd 吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2982 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 12:08 PVG 20:08 LAX 05:08 JFK 08:08
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86