V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
vmoewill

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

  •  
  •   vmoewill · Mar 26, 2023 · 3620 views
    This topic created in 1130 days ago, the information mentioned may be changed or developed.

    由于私有的镜像太大了,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

    Supplement 1  ·  Mar 26, 2023
    目前临时的方法是在 rancher 滚动更新前,jenkins 先通知 worker 拉镜像,拉完在更。后续有更好的解决方法再说吧,此贴完结-。-
    15 replies    2023-03-27 11:32:11 +08:00
    tomqin
        1
    tomqin  
       Mar 26, 2023 via Android
    换一种思路,直接 docker save 然后 scp 过去在 worker 上 docker load ?
    Phasma
        2
    Phasma  
       Mar 26, 2023
    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
       Mar 26, 2023
    @hymzhek ChatGPT 我也问过了,很多参数根本不存在,还浪费很多的时间...
    vmoewill
        4
    vmoewill  
    OP
       Mar 26, 2023
    @tomqin 因为我是在 rancher 上部署的,流程大概是 jenkins 编译打包镜像 -> 推送 Harbor -> 通知 Rancher ,镜像都是带 tag 的,当然也可以让 worker 提前得到镜像,但我觉得应该是有配置这个参数的,谢谢你的回复。
    drizztdu
        5
    drizztdu  
       Mar 26, 2023 via iPhone
    https://github.com/rancher-sandbox/rancher-desktop/issues/2303 看样子是 rancher 魔改了 k3s ,导致部分 kubelet 配置参数 runtime-request-timeout 失效了。
    feedcode
        6
    feedcode  
       Mar 26, 2023
    那个 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  
       Mar 26, 2023
    也可以提前到节点上用 crictl 把镜像拉到本地,多节点的话可以用 nodeSelector 之类的再指定到那个节点部署
    liuxingdeyu
        8
    liuxingdeyu  
       Mar 26, 2023
    个人觉得,看你镜像里面是啥,如果是每次变动都很大的东西,比如模型啥的,那就最好是拷过去,cp 或者物理拷,如果是变动小的,就先拷个基础镜像啥的,然后再拉
    vmoewill
        9
    vmoewill  
    OP
       Mar 26, 2023
    @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  
       Mar 26, 2023
    看讨论应该是 docker 的锅 https://github.com/k3s-io/k3s/issues/6482
    建议从私有仓库入手 毕竟拉取超过三分钟不正常
    dislazy2023
        11
    dislazy2023  
       Mar 26, 2023
    现在拉镜像也不容易了 最靠谱的方案是通过 github action 啥的 把镜像 重新 推到自己的私仓(阿里云私仓)啥的 然后直接用私仓来下来对应的镜像
    swulling
        12
    swulling  
       Mar 26, 2023
    这个和 K3s 无关,Docker 直接写死了,现在只有两种办法
    1. 换成 containerd
    2. 修改 docker 代码
    vmoewill
        13
    vmoewill  
    OP
       Mar 26, 2023
    @Firxiao
    @dislazy2023
    @swulling
    感谢回复,目前临时的方法是在 rancher 滚动更新前,jenkins 先通知 worker 拉镜像,拉完在更。后续有更好的解决方法再说吧,此贴完结-。-
    julyclyde
        14
    julyclyde  
       Mar 26, 2023
    你的 jenkins 是负责 build 吗?
    push 到哪儿去了?搞个内网服务器存放呗
    zzl22100048
        15
    zzl22100048  
       Mar 27, 2023
    k3s 默认 runtime 不是 containerd 吗?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5716 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 01:58 · PVG 09:58 · LAX 18:58 · JFK 21:58
    ♥ Do have faith in what you're doing.