自动化运维(k8s):一键获取指定命名空间镜像包脚本

news2024/11/19 1:50:08

前言:脚本写成并非一蹴而就,需要不断的调式和修改,这里也是改到了7版本才在 生产环境 中验证成功。

该命令 和 脚本适用于以下场景:在某些项目中,由于特定的安全或政策要求,不允许连接到你的镜像仓库。然而,项目团队仍需获取特定命名空间下的部分 或者 所有 Docker 镜像。此命令和脚本能够协助您在本地环境拉取并保存所需命名空间中的镜像,以便安全地提供给项目团队,满足他们的部署和测试需求,同时确保遵守相关的安全规定和访问限制。

一、命令获取指定pod镜像
命令-查询镜像版本号:
kubectl get pods -n <namespace> -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{range .spec.containers[*]}{.image}{"\n"}{end}{end}' | grep -E "(<pod-name1>|<pod-name2>|<pod-name3>|<pod-name......>)"
执行结果:

命令-save:
docker save -o namespace_images.tar <pod-name1结果......727> <pod-name2结果......21164728> <pod-name3结果......build_20241021181731> <pod-name......结果>
执行结果:

最后会生成一个tar包

二、自动化脚本获取指定命名空间下全量pod镜像
脚本内容:

#!/bin/bash

# 提示用户输入命名空间
echo -e "请输入命名空间:"
read -e NAMESPACE

# 获取当前脚本的绝对路径
SCRIPT_DIR=$(cd $(dirname $0) && pwd)

# 定义输出文件名,格式为 <命名空间>_images_<日期>.tar
OUTPUT_FILE="${NAMESPACE}_images_$(date +%Y%m%d).tar"

# 获取该命名空间下的所有 Pod 的名称和镜像
POD_NAMES=$(kubectl get pods -n $NAMESPACE -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}')
IMAGES=$(kubectl get pods -n $NAMESPACE -o jsonpath='{range .items[*]}{range .spec.containers[*]}{.image}{"\n"}{end}{end}' | sort | uniq)

# 拼接所有镜像名称成一个字符串
IMAGE_STRING=""
for IMAGE in $IMAGES; do
    IMAGE_STRING+="$IMAGE "
done

# 拉取所有镜像
echo "正在拉取所有镜像..."
for IMAGE in $IMAGES; do
    docker pull $IMAGE
done

# 保存所有镜像到一个文件
echo "正在将所有镜像保存到单个 tar 文件:$OUTPUT_FILE"
docker save $IMAGE_STRING -o $SCRIPT_DIR/$OUTPUT_FILE

echo "所有镜像已处理并保存到 $SCRIPT_DIR/$OUTPUT_FILE"

脚本执行后,等待执行结束会生成一个以 命名空间 和 当前日期 的tar包


以下是脚本的详细解析:

  1. 获取指定命名空间下所有 Pod 的镜像列表,并去重

    IMAGES=$(kubectl get pods -n $NAMESPACE -o jsonpath='{range .items[*]}{range .spec.containers[*]}{.image}{"\n"}{end}{end}' | sort | uniq)
    

    这行代码使用 kubectl 命令获取指定命名空间下所有 Pod 的镜像列表。jsonpath 参数用于提取镜像名称,然后通过管道传递给 sortuniq 命令,以确保列表中的镜像名称是唯一的(去重)。

  2. 将所有镜像名称拼接成一个字符串

    IMAGE_STRING=""
    for IMAGE in $IMAGES; do
        IMAGE_STRING+="$IMAGE "
    done
    

    这个循环遍历去重后的镜像列表 IMAGES,并将每个镜像名称添加到 IMAGE_STRING 变量中,镜像名称之间用空格分隔。

  3. 定义输出文件名,格式为 KaTeX parse error: Expected group after '_' at position 19: …MESPACE}_images_̲(date +%Y%m%d).tar

    OUTPUT_FILE="${NAMESPACE}_images_$(date +%Y%m%d).tar"
    

    这行代码定义了输出文件的名称,格式为 ${NAMESPACE}_images_<日期>.tar,其中 <日期>date +%Y%m%d 命令生成,表示当前日期的年月日。

  4. 拉取所有镜像

    for IMAGE in $IMAGES; do
        docker pull $IMAGE
    done
    

    这个循环遍历去重后的镜像列表 IMAGES,并对每个镜像执行 docker pull 命令,以确保本地有这些镜像的最新版本。

  5. 使用 docker save 命令将所有镜像保存到一个 tar 文件中

    docker save $IMAGE_STRING -o $SCRIPT_DIR/$OUTPUT_FILE
    

    这行代码使用 docker save 命令将所有镜像(由 IMAGE_STRING 变量指定)保存到一个 tar 文件中。-o 参数指定输出文件的路径和名称,该路径是脚本所在目录下的 $OUTPUT_FILE

  6. 输出保存完成的消息

    echo "All images have been processed and saved to $SCRIPT_DIR/$OUTPUT_FILE"
    

    这行代码输出一条消息,通知用户所有镜像已经被处理并保存到了指定的文件路径。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2243112.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HuggingFace:基于YOLOv8的人脸检测模型

个人操作经验总结 1、YOLO的环境配置 github 不论base环境版本如何&#xff0c;建议在conda的虚拟环境中安装 1.1、创建虚拟环境 conda create -n yolov8-face python3.9conda create &#xff1a;创建conda虚拟环境&#xff0c; -n &#xff1a;给虚拟环境命名的…

Unet++改进28:添加PPA(2024最新改进方法)|多分支特征提取策略,捕获不同尺度和层次的特征信息。

本文内容:添加PPA 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 红外小目标检测是一项重要的计算机视觉任务,涉及对红外图像中通常只有几个像素的微小目标进行识别和定位。然而,由于红外图像中物体的体积小,背景一般比较复杂,这给红外图像的识别带来…

CTF攻防世界小白刷题自学笔记13

1.fileinclude,难度&#xff1a;1,方向&#xff1a;Web 题目来源:宜兴网信办 题目描述:无 给一下题目链接&#xff1a;攻防世界Web方向新手模式第16题。 打开一看给了很多提示&#xff0c;什么language在index.php的第九行&#xff0c;flag在flag.php中&#xff0c;但事情显…

同三维T610UDP-4K60 4K60 DP或HDMI或手机信号采集卡

1路DP/HDMI/TYPE-C&#xff08;手机/平板等&#xff09;视频信号输入1路MIC1路LINE OUT,带1路HDMI环出&#xff0c;USB免驱&#xff0c;分辨率4K60&#xff0c;可采集3路信号中其中1路&#xff0c;按钮切换&#xff0c;可采集带TYPE-C接口的各品牌手机/平板/笔记本电脑等 同三维…

小程序如何完成订阅

小程序如何完成订阅 参考相关文档实践问题处理授权弹窗不再触发引导用户重新授权 参考相关文档 微信小程序实现订阅消息推送的实现步骤 发送订阅消息 小程序订阅消息&#xff08;用户通过弹窗订阅&#xff09;开发指南 实践 我们需要先选这一个模板&#xff0c;具体流程参考…

解决Xeyes: Error can‘t open display,远程X无法连通问题。

一、问题分析 提前申明&#xff1a; 本次实验使用REHL 8 进行操作&#xff01; 客户机 A 为X-Client &#xff0c;即远程X的客户端。 服务机 B 为X-Server&#xff0c;即远程X的服务端。 问题的所有操作均在已经配置好Xorg的前提下进行的&#xff0c;不知道不配置会有什么影响&…

JS学习日记(jQuery库)

前言 今天先更新jQuery库的介绍&#xff0c;它是一个用来帮助快速开发的工具 介绍 jQuery是一个快速&#xff0c;小型且功能丰富的JavaScript库&#xff0c;jQuery设计宗旨是“write less&#xff0c;do more”&#xff0c;即倡导写更少的代码&#xff0c;做更多的事&#xf…

华为HCIP——MSTP/RSTP与STP的兼容性

一、MSTP/RSTP与STP的兼容性的原理&#xff1a; 1.BPDU版本号识别&#xff1a;运行MSTP/RSTP协议的交换机会根据收到的BPDU&#xff08;Bridge Protocol Data Unit&#xff0c;桥协议数据单元&#xff09;版本号信息自动判断与之相连的交换机的运行模式。如果收到的是STP BPDU…

基于YOLOv8深度学习的智慧课堂学生专注度检测系统(PyQt5界面+数据集+训练代码)

本研究提出了一种基于YOLOv8深度学习的智慧课堂学生专注度检测系统&#xff0c;旨在实现对课堂中学生专注度的实时分析与评估。随着智慧教育的快速发展&#xff0c;学生的课堂表现和专注度成为评估学习效果的重要因素之一。然而&#xff0c;传统的专注度评估方法往往依赖于主观…

【汇编】c++游戏开发

由一起学编程创作的‘C/C项目实战&#xff1a;2D射击游戏开发&#xff08;简易版&#xff09;&#xff0c; 440 行源码分享来啦~’&#xff1a; C/C项目实战&#xff1a;2D射击游戏开发&#xff08;简易版&#xff09;&#xff0c; 440 行源码分享来啦~_射击c-CSDN博客文章浏览…

QT_CONFIG宏使用

时常在Qt代码中看到QT_CONFIG宏&#xff0c;之前以为和#define、DEFINES 差不多&#xff0c;看了定义才发现不是那么回事&#xff0c;定义如下&#xff1a; 看注释就知道了QT_CONFIG宏&#xff0c;其实是&#xff1a;实现了一个在编译时期安全检查&#xff0c;检查指定的Qt特性…

Area-Composition模型部署指南

一、介绍 本模型可以通过输入不同的提示词&#xff0c;然后根据各部分提示词进行融合生成图片。如下图&#xff1a; 此图像包含 4 个不同的区域&#xff1a;夜晚、傍晚、白天、早晨 二、部署 环境要求&#xff1a; 最低显存&#xff1a;10G 1. 部署ComfyUI 本篇的模型部署…

计算机网络 (1)互联网的组成

一、互联网的边缘部分 互联网的边缘部分由所有连接在互联网上的主机组成&#xff0c;这些主机又称为端系统&#xff08;end system&#xff09;。端系统可以是各种类型的计算机设备&#xff0c;如个人电脑、智能手机、网络摄像头等&#xff0c;也可以是大型计算机或服务器。端系…

构建SSH僵尸网络

import argparse import paramiko# 定义一个名为Client的类&#xff0c;用于表示SSH客户端相关操作 class Client:# 类的初始化方法&#xff0c;接收主机地址、用户名和密码作为参数def __init__(self, host, user, password):self.host hostself.user userself.password pa…

永磁同步电机负载估计算法--直接计算法

一、原理介绍 本文采用直接计算法估计负载转矩并将估计值前馈至转速环输出&#xff0c;来提高PI调节器应对负载扰动的性能。直接计算法是一种将 PMSM 的运动方程中的负载转矩项直接作为观测量&#xff0c;通过公式的逆向推导整理&#xff0c;将负载转矩项提取出来移到等式的一…

Java:什么是RPC框架?

RPC 远程调用的通信&#xff08;RPC&#xff09; RPC&#xff08;Remote Procedure Call Protocol&#xff09;是指远程过程调用协议。 通俗描述 客户端在不知道调用细节的情况下&#xff0c;可以像调用本地应用程序中的对象一样&#xff0c;调用存在于远程计算机上的某个对…

HTML之列表学习记录

练习题&#xff1a; 图所示为一个问卷调查网页&#xff0c;请制作出来。要求&#xff1a;大标题用h1标签&#xff1b;小题目用h3标签&#xff1b;前两个问题使用有序列表&#xff1b;最后一个问题使用无序列表。 代码&#xff1a; <!DOCTYPE html> <html> <he…

【设计模式】行为型模式(五):解释器模式、访问者模式、依赖注入

《设计模式之行为型模式》系列&#xff0c;共包含以下文章&#xff1a; 行为型模式&#xff08;一&#xff09;&#xff1a;模板方法模式、观察者模式行为型模式&#xff08;二&#xff09;&#xff1a;策略模式、命令模式行为型模式&#xff08;三&#xff09;&#xff1a;责…

基于Java Springboot二手家电管理平台

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

利用SSH中的弱私钥

import paramiko import argparse import os from threading import Thread, BoundedSemaphore # 设置最大连接数 maxConnections 5 # 创建一个有界信号量&#xff0c;用于控制同时进行的连接数 connection_lock BoundedSemaphore(valuemaxConnections) # 用于控制是否停止所…