registry 容器镜像测试

registry 封装容器部署环境测试

封装打包镜像

dockerfile

# 阶段 1:构建阶段(使用多阶段构建以减少最终镜像大小)
FROM golang:1.22-alpine AS builder
# 安装构建所需工具
RUN #apk add --no-cache git
# 设置工作目录
WORKDIR /app
# 将 go.mod 和 go.sum 复制到容器中
COPY go.mod ./
# 下载依赖
RUN go mod download
# 将项目代码复制到工作目录中
COPY . .
# 编译 Go 程序(静态编译)
RUN CGO_ENABLED=0 GOOS=linux go  build -o registry ./cmd/registry# 阶段 2:运行阶段
FROM alpine
# 安装运行时工具(用于调试或检查)
RUN apk add --no-cache bash ca-certificates
# 设置工作目录
WORKDIR /app
# 从构建阶段复制编译好的二进制文件和必要资源
COPY --from=builder /app/registry /app/registry
COPY --from=builder /app/tmp/data /app/tmp/data
# 暴露服务端口
EXPOSE 8081
# 启动应用程序
CMD ["/app/registry"]

​ 因为本地的 alpine 镜像是 1.21 版本的,封装时发现一些使用的依赖需要 1.22 版本以上兼容,所以需要更新镜像版本

image-20250213214305221

image-20250213214237787

image-20250213215531134

​ 封装镜像完成

image-20250213215641813

​ 部署测试发现环境崩溃了。。。。

image-20250214111447641

image-20250214113449222

image-20250214114528603

​ 因为服务器环境更新了,IP 分配也更改了,SSH 链接的公钥发生变化,所以需要更新本地的公钥然后重新 SSH 链接

image-20250217105723654

ssh-keygen -f "/home/public/.ssh/known_hosts" -R "172.110.0.109"

image-20250217105815581

image-20250217182651559

部署测试

​ 部署环境下载镜像

sudo ctr -n k8s.io image pull registry.cn-hangzhou.aliyuncs.com/leung_qw/registry:v1.0.0

​ 部署文件

apiVersion: apps/v1
kind: Deployment
metadata:name: registry-deploymentnamespace: testlabels:app: web
spec:replicas: 1  # 部署 1 个副本selector:matchLabels:app: webtemplate:metadata:labels:app: webspec:containers:- name: registryimage: registry.cn-hangzhou.aliyuncs.com/leung_qw/registry:v1.0.0ports:- containerPort: 8081
---
apiVersion: v1
kind: Service
metadata:labels:app: webname: registry-svcnamespace: test
spec:selector:app: webports:- protocol: TCPport: 3001  # Service 端口targetPort: 8081  # 目标 Pod 的端口type: ClusterIP  # 仅在集群内部访问,如需外部访问可改为 NodePort 或 LoadBalancer
接口测试

测试发现的一些问题:

​ 将镜像部署成服务时,每次访问服务接口,会有时断时续的链接问题,但是对于镜像本身的 pod 接口则没有这个问题

image-20250219180420913

image-20250219180600395

image-20250219182249027

image-20250219182351064

image-20250220135727527

接口测试命令:

/upload 接口 (这里引号是需要的,否则如果有多个参数,bash 会把连接符 & 识别为后台执行符号)
curl -X POST “10.110.59.35:3001/upload?fileName=1.txt” --data-binary @1.txt  -H "Content-Type: application/octet-stream"curl -X POST “10.110.59.35:3001/upload?fileName=1.txt&tag=v1.2.0” --data-binary @1.txt  -H "Content-Type: application/octet-stream"

image-20250219182503519

/query/exits 接口
curl "10.110.59.35:3001/query/exits?filename=1.txt&tag=v1.4"/query/list 接口
curl "10.110.59.35:3001/query/list"/delete 接口
curl "10.244.169.129:8081/delete?filename=1.txt"

image-20250219181140898

image-20250219181245747

image-20250219182754681

/download 接口
curl "10.244.169.129:8081/download?filename=1.txt&tag=v1.4"

image-20250219182649242

/forward 接口
curl -X POST "10.244.167.144:8081/forward?target=http://100.1.255.252:3001&filename=1.txt"      --data-binary @test-broker.txt      -H "Content-Type: application/octet-stream"

image-20250220142243570

image-20250220142758750

性能测试

​ 使用时间戳来记录衡量性能

echo "Request sent at: $(date +%s) ($(date -d @$(date +%s) '+%Y-%m-%d %H:%M:%S'))" && curl "10.244.169.129:8081/query/exits?filename=1.txt&tag=v1.4"

​ 这里要同步宿主机和容器的时间同步,因为容器镜像中封装的是 Linux 轻量版的 alpine,安装时区数据包,并设置时区

apk add tzdataln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtimedate

image-20250219193652022

​ 但是实际测试发现,部署后更改容器内部镜像时,容器接口接收到文件后记录的时间,依然是更改之前的时间,所以这里需要在部署时就同步时间,更新部署配置文件

apiVersion: apps/v1
kind: Deployment
metadata:name: registry-deploymentnamespace: testlabels:app: web
spec:replicas: 1  # 部署 1 个副本selector:matchLabels:app: webtemplate:metadata:labels:app: webspec:containers:- name: registryimage: registry.cn-hangzhou.aliyuncs.com/leung_qw/registry:v1.0.0ports:- containerPort: 8081volumeMounts:- name: time-zonemountPath: /etc/localtime  # 将容器的本地时间与宿主机同步readOnly: truevolumes:- name: time-zonehostPath:path: /usr/share/zoneinfo/Asia/Shanghai  # 设置时区为 Asia/Shanghaitype: File
---
apiVersion: v1
kind: Service
metadata:labels:app: webname: registry-svcnamespace: test
spec:selector:app: webports:- protocol: TCPport: 3001  # Service 端口targetPort: 8081  # 目标 Pod 的端口type: ClusterIP

​ 定义一个 大小为 500 MB 的文件,

# 查看文件详细信息
stat test.txt
# 查看文件信息
ls -l test.txt
# 定义指定大小的文件
truncate -s 500M test.txt
# 查看宿主机内存等性能信息
free -h

image-20250219195624008

image-20250219202128398

​ 这边测试发现,上传 upload 接口上传 500 MB大小的文件,耗时为 5s

echo "Request sent at: $(date +%s) ($(date -d @$(date +%s) '+%Y-%m-%d %H:%M:%S'))" && curl -X POST "1
0.244.167.144:8081/forward?target=http://100.1.255.252:3001&filename=broker.txt"      --data-binary @broker.txt  -H "Content-Type: app
lication/octet-stream"echo "Request sent at: $(date +%s) ($(date -d @$(date +%s) '+%Y-%m-%d %H:%M:%S'))" && curl "100.1.255.252:3001/query/exits?filename=broker.txt"

image-20250220143319882

​ 跨域测试大概为 6s

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python视频网站(Django框架)

有需要请加文章底部Q哦 可远程调试 Python视频网站(Django框架) 一 介绍 此Python视频网站基于Django框架开发,数据库mysql,前端jquery.js。系统角色分为用户和管理员。 技术栈:Python3(Django框架)MySQLjquery.jsPyCharmnavicat 二 功能 用户 1 注册…

多元数据直观表示(R语言)

一、实验目的: 通过上机试验,掌握R语言实施数据预处理及简单统计分析中的一些基本运算技巧与分析方法,进一步加深对R语言简单统计分析与图形展示的理解。 二、实验内容: bank.csv文件中数据来自1969-1971年美国一家银行的474名职…

在MacOS上打造本地部署的大模型知识库(一)

一、在MacOS上安装Ollama docker run -d -p 3000:8080 --add-hosthost.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main 最后停掉Docker的ollama,就能在webui中加载llama模…

Fiddler在Windows下抓包Https

文章目录 1.Fiddler Classic 配置2.配置浏览器代理自动代理手动配置浏览器代理 3.抓取移动端 HTTPS 流量(可选)解决抓取 HTTPS 失败问题1.Fiddler证书过期了 默认情况下,Fiddler 无法直接解密 HTTPS 流量。需要开启 HTTPS 解密: 1…

常用的AI文本大语言模型汇总

AI文本【大语言模型】 1、文心一言https://yiyan.baidu.com/ 2、海螺问问https://hailuoai.com/ 3、通义千问https://tongyi.aliyun.com/qianwen/ 4、KimiChat https://kimi.moonshot.cn/ 5、ChatGPThttps://chatgpt.com/ 6、魔塔GPT https://www.modelscope.cn/studios/iic…

(python)Arrow库使时间处理变得更简单

前言 Arrow库并不是简单的二次开发,而是在datetime的基础上进行了扩展和增强。它通过提供更简洁的API、强大的时区支持、丰富的格式化和解析功能以及人性化的显示,填补了datetime在某些功能上的空白。如果你需要更高效、更人性化的日期时间处理方式,Arrow库是一个不错的选择…

游戏引擎学习第127天

仓库:https://gitee.com/mrxiao_com/2d_game_3 为本周设定阶段 我们目前的渲染器已经实现了令人惊讶的优化,经过过去两周的优化工作后,渲染器在1920x1080分辨率下稳定地运行在60帧每秒。这个结果是意料之外的,因为我们没有预计会达到这样的…

leetcode 73. 矩阵置零

题目如下 数据范围 如果一个点m(i,j) 0其中i j都大于0那么按照题目要求对应的m[0][j] m[i][0]都要赋值为0. 所以我们可以令第一行和第一列作为标记是否对应的列和行需要置为0. 又因为我们没法判断第一行和第一列所以需要额外两个变量标记第一列和第二列。 这样就可以满足题…

deepseek-r1-centos-本地服务器配置方法

参考: 纯小白 Centos 部署DeepSeek指南_centos部署deepseek-CSDN博客 https://blog.csdn.net/xingxin550/article/details/145574080 手把手教大家如何在Centos7系统中安装Deepseek,一文搞定_centos部署deepseek-CSDN博客 https://blog.csdn.net/soso67…

机器学习:强化学习的epsilon贪心算法

强化学习(Reinforcement Learning, RL)是一种机器学习方法,旨在通过与环境交互,使智能体(Agent)学习如何采取最优行动,以最大化某种累积奖励。它与监督学习和无监督学习不同,强调试错…

比创达电子科技-EMC干货之防静电技术

EMC干货之防静电技术 什么是静电放电 两个具有不同静电电位的物体,由于直接接触或静电场感应引起两物体间的静电电荷的转移,静电电场的能量达到一定程度后,击穿其间介质而进行放电的现象就是静电放电,简称为ESD(Electro Static Discharge)。 静电产生的原…

JavaWeb-ServletContext应用域接口

文章目录 ServletContext接口简介获取一个ServletContext对象ServletContext接口中的相关方法获取应用域配置参数关于应用域参数的配置要求getContextPath获取项目路径getRealPath获取真实路径log系列方法添加相关日志增删查应用域属性 ServletContext接口简介 ServletContext…

C语言(15)-------------->一维数组

这篇文章介绍的是数组的定义、创建、初始化、使用,在数组中输入内容并输出数组中的内容,并探讨了数组在内存中的存储。里面有些内容建议大家参考下面的一些文章,有助于加深大家对于C语言的理解: C语言(2)-…

AI学习第六天-python的基础使用-趣味图形

在 Python 编程学习过程中,turtle库是一个非常有趣且实用的工具,它可以帮助我们轻松绘制各种图形。结合for循环、random模块以及自定义方法等知识点,能够创作出丰富多彩的图案。下面就来分享一下相关的学习笔记。 一、基础知识点回顾 &…

线程安全问题

线程安全问题是指在多线程环境下,当多个线程同时访问共享资源时,可能出现的错误或不可预测的行为。以下是对其的理解: 1. 根本原因 线程安全问题的根本原因是多个线程对共享资源的并发访问。如果多个线程对共享资源进行读写操作&#xff0c…

ubuntu终端指令集 shell编程基础(一)

磁盘指令 连接与查看:磁盘与 Ubuntu 有两种连接方式;使用ls /dev/sd*查看是否连接成功,通过df系列指令查看磁盘使用信息。若 U 盘已挂载,相关操作可能失败,需用umount取消挂载。磁盘操作:使用sudo fdisk 磁…

第十四届蓝桥杯Scratch11月stema选拔赛真题——小猫照镜子

编程实现: 小猫照镜子。(背景非源素材) 具体要求: 1). 运行程序,角色、背景如图所示; 完整题目可点击下方链接查看,支持在线编程~ 小猫照镜子_scratch_少儿编程题库学习中心-嗨信奥https://www.hixinao.com/tiku/s…

Sublime Text4安装、汉化

-------------2025-02-22可用---------------------- 官方网址下载:https://www.sublimetext.com 打开https://hexed.it 点击打开文件找到软件安装目录下的 ctrlf 查找 8079 0500 0f94 c2右边启用替换替换为:c641 0501 b200 90点击替换按钮 替换完成后 另存为本地…

C++20的指定初始化器(Designated Initializers)

文章目录 指定初始化器的使用条件语法嵌套结构体的初始化数组的指定初始化注意事项优势 C20引入了**指定初始化器(Designated Initializers)**这一特性,允许在初始化结构体、联合体或类的对象时,明确指定成员变量的初始化值&#…

Redis安装及其AnotherRedisDesktopManagera安装使用

一、Redis安装 1. 下载Redis安装包 通过网盘分享的文件:Redis 链接: https://pan.baidu.com/s/1elAT8mk3EIoYQQ3WoVVoNg?pwd7yrz 提取码: 7yrz 2. 解压Redis安装包 下载完成后,将Redis安装包解压到一个指定的目录,例如:C:\Re…