您的位置 首页 kubesphere

k8s 中获取所有ImagePullBackOff 的容器信息,包含镜像名称+所在节点

场景, 重启某个节点,或者下掉某个节点后,因为镜像的原因不能快速的拉去,所以有了这个脚本,可以获取所有拉去镜像失败的 pod 信息,包含镜像名称,以及所在节点。

脚本如下:

只列出:节点+镜像:

checkall-k8s-images-fail.sh

#!/bin/bash

# 获取所有 Pod 的详细信息
pods=$(kubectl get pods --all-namespaces -o json)

# 使用 jq 解析 JSON 数据,提取 ImagePullBackOff 的容器信息,包括镜像名称和所在节点
failed_containers=$(echo "$pods" | jq -r '
.items[] |
{
    namespace: .metadata.namespace,
    pod: .metadata.name,
    node: .spec.nodeName,
    containers: .status.containerStatuses[] |
    select(.state.waiting.reason == "ImagePullBackOff") |
    {
        container: .name,
        image: .image,
        message: .state.waiting.message
    }
} |
select(.containers != null) |
" Node: \(.node),  Image: \(.containers.image)"
')

# 检查是否有失败的容器
if [ -z "$failed_containers" ]; then
    echo "没有找到处于 ImagePullBackOff 状态的容器。"
else
    echo "处于 ImagePullBackOff 状态的容器信息:"
    echo "$failed_containers"
fi

checkall-k8s-images-fail.sh

列出其他容器信息

#!/bin/bash

# 获取所有 Pod 的详细信息
pods=$(kubectl get pods --all-namespaces -o json)

# 使用 jq 解析 JSON 数据,提取 ImagePullBackOff 的容器信息,包括镜像名称和所在节点
failed_containers=$(echo "$pods" | jq -r '
.items[] |
{
    namespace: .metadata.namespace,
    pod: .metadata.name,
    node: .spec.nodeName,
    containers: .status.containerStatuses[] |
    select(.state.waiting.reason == "ImagePullBackOff") |
    {
        container: .name,
        image: .image,
        message: .state.waiting.message
    }
} |
select(.containers != null) |
"Namespace: \(.namespace), Pod: \(.pod), Node: \(.node), Container: \(.containers.container), Image: \(.containers.image), Message: \(.containers.message)"
')

# 检查是否有失败的容器
if [ -z "$failed_containers" ]; then
    echo "没有找到处于 ImagePullBackOff 状态的容器。"
else
    echo "处于 ImagePullBackOff 状态的容器信息:"
    echo "$failed_containers"
fi

 

 

2- 批量拉去镜像:

方式1:定义个列表

bulk_pullimages_lists.sh

#!/bin/bash
# 传入目标标签前缀
URL=docker.m.daocloud.io
#URL=hub.baimeidashu.com

# 定义源镜像列表
#SOURCE_IMAGES=("image1" "image2" "image3")  # 你可以根据需要修改这个列表
SOURCE_IMAGES=("kubesphere/ks-installer:v3.3.2" "kubesphere/kube-rbac-proxy:v0.11.0")  # 你可以根据需要修改这个列表

for SOURCE_IMAGE in "${SOURCE_IMAGES[@]}"; do
    FULL_SOURCE_IMAGE="$URL/$SOURCE_IMAGE"
    echo "Pulling image: $FULL_SOURCE_IMAGE"
    docker pull "$FULL_SOURCE_IMAGE"
    
    TARGET_TAG="${SOURCE_IMAGE}"
    echo "Tagging image: $FULL_SOURCE_IMAGE as $TARGET_TAG"
    docker tag "$FULL_SOURCE_IMAGE" "$TARGET_TAG"
    
    echo "$TARGET_TAG is success"
done

 

方式2: 镜像名称在txt中

sh 2_bulk_pullimages_txt.sh images.txt

2_bulk_pullimages_txt.sh

内容如下:

#!/bin/bash
# 传入源镜像文件和目标标签前缀
URL=docker.m.daocloud.io
#URL=hub.baimeidashu.com
SOURCE_IMAGE_FILE=$1

# 检查文件是否存在
if [[ ! -f "$SOURCE_IMAGE_FILE" ]]; then
    echo "File $SOURCE_IMAGE_FILE not found!"
    exit 1
fi

# 读取文件中的每一行并处理
while IFS= read -r SOURCE_IMAGE; do
    FULL_SOURCE_IMAGE="$URL/$SOURCE_IMAGE"
    echo "Pulling image: $FULL_SOURCE_IMAGE"
    docker pull "$FULL_SOURCE_IMAGE"
    
    TARGET_TAG="${SOURCE_IMAGE}"
    echo "Tagging image: $FULL_SOURCE_IMAGE as $TARGET_TAG"
    docker tag "$FULL_SOURCE_IMAGE" "$TARGET_TAG"
    
    echo "$TARGET_TAG is success"
done < "$SOURCE_IMAGE_FILE"

images.txt

欢迎来撩 : 汇总all

白眉大叔

关于白眉大叔linux云计算: 白眉大叔

热门文章