failed to pull and unpack image”k8s.gcr.io/pause:3.2”

Kubernetes gitVersion:v1.21.1

出现以上问题大概率是磁盘使用率超时75%。K8S执行了镜像清理,将该镜像给删除了。

排查

1、在出现此异常的节点执行

df -lh

查看是否存在存储使用超过75%
2、查看k8s.gcr.io/pause的镜像版本

crictl images ls|grep pause
k8s.gcr.io/pause                                                   3.4.1                                 0f8457a4c2eca       301kB

检查是否只存在3.4.1的版本

解决

1、将sandbox_image版本改为3.4.1
检查是否存在/etc/containerd/config.toml,若是修改镜像版本即可,否则执行如下命名

mkdir /etc/containerd
cat > /etc/containerd/config.toml << 'EOF'
version = 2
[plugins]
  [plugins."io.containerd.grpc.v1.cri"]
    sandbox_image = "k8s.gcr.io/pause:3.4.1"
EOF

重新加载配置并重启containerd

systemctl daemon-reload && systemctl restart containerd

2、添加定时清理镜像任务

cat >> /etc/cron.hourly/clean-unuse-images.sh << 'EOF'
#!/usr/bin/env bash

main () {
    (crictl img | grep "<none>") && (crictl img | grep "<none>" | xargs crictl rmi)

    images=( $(crictl img | grep "dev.flyrise.cn" | awk '{print $3}') )
    pods=( $(crictl ps | grep -v IMAGE | awk '{print $2}') )

    for item in "${images[@]}"
    do
      if [[ ! " ${pods[@]} " =~ " $item " ]]; then
        crictl rmi $item
      fi
    done
}

main 2>&1 | tee /var/log/clean-unuse-images.log
EOF

# 必须添加执行权限,否则不会执行
chmod +x /etc/cron.hourly/clean-unuse-images.sh
bash /etc/cron.hourly/clean-unuse-images.sh
文档更新时间: 2024-07-19 13:37   作者:姚连洲