首页 > 其他分享 >Kubernetes 集群中 Pod 使用镜像的批量导出脚本

Kubernetes 集群中 Pod 使用镜像的批量导出脚本

时间:2024-07-29 10:21:03浏览次数:12  
标签:name Kubernetes namespace 命名 镜像 Pod config logger

目录

动机

最近,由于 Docker Hub 镜像的失效,在重新启动 Pod 时,拉取镜像失败,导致 Pod 无法正常启动。因此,我需要批量检查集群中有哪些 Pod 使用了官方的 Docker Hub 镜像,并将这些镜像保存到本地的 Harbor 仓库中。为此,通过python编写了一个脚本,可以导出所有命名空间中的镜像信息,或者根据需要导出特定命名空间中的镜像信息。

脚本

import sys
import logging
import argparse
from kubernetes import client, config
from kubernetes.config.config_exception import ConfigException


logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger()

config_file_path = "config路径"
logger.info(f"使用的 kubeconfig 文件路径: {config_file_path}")

def load_kube_config(config_file_path):
    """加载kubeconfig文件"""
    try:
        config.load_kube_config(config_file=config_file_path)
        logger.info("kubeconfig 加载成功")
    except ConfigException as e:
        logger.error(f"加载kubeconfig失败: {e}")
        sys.exit(1)

def get_namespaces(namespace_name):
    """根据命名空间名称获取命名空间列表"""
    if namespace_name == 'all':
        try:
            namespaces = client.CoreV1Api().list_namespace().items
        except client.rest.ApiException as e:
            logger.error(f"获取命名空间失败: {e}")
            sys.exit(1)
    else:
        try:
            namespaces = [client.CoreV1Api().read_namespace(name=namespace_name)]
        except client.rest.ApiException as e:
            logger.error(f"读取命名空间失败: {e}")
            sys.exit(1)
    return namespaces

def get_pods(namespace):
    """获取指定命名空间的Pod列表"""
    try:
        return client.CoreV1Api().list_namespaced_pod(namespace).items
    except client.rest.ApiException as e:
        logger.error(f"获取{namespace}命名空间的Pod失败: {e}")
        sys.exit(1)

#打印命名空间、pod名称、镜像名称
def print_pod_images(namespaces):
    """打印Pod及其使用的镜像"""
    print("namespace,pod,container,image")
    for ns in  namespaces:
        ns_name = ns.metadata.name
        pods = get_pods(ns_name)
        for pod in pods:
            for container in pod.spec.containers:
                print(f"命名空间:{ns_name},pod名称:{pod.metadata.name},容器名称:{container.name},镜像名称:{container.image}")

def validate_namespace(namespace):
    """验证命名空间是否有效。"""
    if namespace == "all":
        return True
    return True

def  main():
    # 命令行参数解析
    parser = argparse.ArgumentParser(description='列出Kubernetes集群中指定命名空间的Pod镜像。')
    #提示用户需要输入的传输必须是namespace的名称和all
    parser.add_argument('namespace', help='<namespace>|all', type=str)
    #解析参数
    args = parser.parse_args()
    #接收namespace的参数,也就是用户传入的参数
    namespace = args.namespace

    if not validate_namespace(namespace):
        logger.error(f"无效的命名空间'{namespace}'")
        sys.exit(1)

    logger.info(f"开始查询命名空间'{namespace}'的Pod镜像")

    try:
        load_kube_config()
        namespaces = get_namespaces(namespace)
        print_pod_images(namespaces)
    except Exception as e:
        logger.error(f"查询过程中遇到错误: {e}")
        sys.exit(1)
    logger.info("查询完成")

if __name__ == "__main__":
    main()

使用实例

python3 get_images_list.py  namespace|all

获取指定命名空间

python3 get_images_list.py  kube-system

image.png

获取所有命名空间

python3 get_images_list.py  all

image.png

生成csv文件

python3 get_images_list.py  all > pod_images.csv

image.png

标签:name,Kubernetes,namespace,命名,镜像,Pod,config,logger
From: https://www.cnblogs.com/Unstoppable9527/p/18329471

相关文章

  • Node.js 使用淘宝 NPM 镜像
    在中国大陆地区,由于网络问题,直接使用官方的npm仓库可能会遇到速度慢或者连接超时的情况。为了提高下载速度,可以使用国内镜像源,比如淘宝提供的NPM镜像。以下是使用淘宝NPM镜像的方法:1.配置npm镜像源你可以通过设置npm的registry配置来指定使用淘宝NPM镜像......
  • OpenStack项目三--镜像服务安装(glance)
    这是本人的一些学习笔记,如果有错误的地方或者更好的解决方法,欢迎提出!!glance是openstack镜像服务,主要用来注册,登陆和检索虚拟机镜像1.glance服务的安装[root@openstack01~]#yuminstall-yopenstack-glance验证glance镜像服务是否正确安装root@openstack01~]#cat/et......
  • macOS Sequoia 15 beta 4 (24A5298h) Boot ISO 原版可引导镜像下载
    macOSSequoia15beta4(24A5298h)BootISO原版可引导镜像下载iPhone镜像、Safari浏览器重大更新、备受瞩目的游戏和AppleIntelligence等众多全新功能令Mac使用体验再升级请访问原文链接:https://sysin.org/blog/macOS-Sequoia-boot-iso/,查看最新版。原创作品,转载请保......
  • 征服 Docker 镜像访问限制:KubeSphere v3.4.1 成功部署全攻略
    近期,KubeSphere社区的讨论中频繁出现关于Docker官方镜像仓库访问受限的问题。本文旨在为您提供一个详细的指南,展示在Docker官方镜像访问受限的情况下,如何通过KubeKeyv3.1.2一次性成功部署KubeSpherev3.4.1以及Kubernetesv1.28.8集群。这将帮助您克服访问限制,确保......
  • Vulfocus靶场搭建以及镜像管理界面没有镜像可以拉取的解决办法
    Vulfocus靶场搭建1.拉取vulfocue镜像dockerpullvulfocus/vulfocus:latest拉取成功2.开启靶场首先使用ifconfig查看一下虚拟机的IP,发现为x.x.x.x然后使用物理机去ping一下这个IP地址看看是否能ping通若能ping通则继续下面的操作生成docker容器dockercreate-p80:80......
  • 运行 Github Action 测试 Docker 镜像时退出代码 137
    我正在学习Testdriven.io:使用FastAPI和Docker进行测试驱动开发课程,目前正在学习持续集成部分。在本节中,您将使用github操作来构建docker映像并运行测试和linting等。在流程的测试Docker映像步骤中,当尝试进行pytest时,我收到以下错误:错误:进程已完成并退出代码......
  • pods驱逐
    您好,如附件,在运维管理这里,有一个事件中心,是可以查询最近一个小时的情况,超出的,有一个pod事件监控您选择事件以及输入pod名称就可以查询,但是前提是您安装一下npd组件,把事件采集到sls才可以持久化查询到image.png internet-deploy-5df788c7c4-fdd2b         0/1 ......
  • 【Kubernetes】初识K8S基础
    目录一.K8S概述1.K8S背景物理机的缺点虚拟机特点(解决了物理机的缺点)虚拟机缺点容器化特点(解决了虚拟机的缺点)容器化缺点2.K8S基本概念2.1.作用2.2.特点二.K8S 集群架构与组件1.集群架构介绍2.核心组件2.1.Master组件Kube-apiserver:是所有服务请求的统一访问入......
  • npm 镜像源查看,设置淘宝镜像
    1.查看当前镜像源#查看当前镜像源npmconfiggetregistry默认情况下是官方默认全局镜像源: https://registry.npmjs.org2.设置淘宝镜像淘宝最新镜像源地址:https://registry.npmmirror.com/#设置淘宝镜像源npmconfigsetregistryhttps://registry.npmmirror.c......
  • centos 使用国内镜像源 安装 docker
    在CentOS上使用国内镜像源安装Docker,可以按照以下步骤操作:移除当前的Docker包(如果已安装): sudoyumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\docker-engine......