当前位置: 首页 > news >正文

Kubernetes(K8S)拉取本地镜像部署Pod 实现类似函数/微服务功能(可设置参数并实时调用)

         以两数相加求和为例,在kubernetes集群拉取本地的镜像,实现如下效果:

        1.实现两数相加求和

        2.可以通过curl实时调用参数以GET方式提供,并得到结果。(类似调用函数

一、实现思路

        需要准备如下的文件。文件名与对应的功能如下所示。

        add.py文件:使用python创建一个简单的 Web 应用程序,能够接收参数并实现两数相加。

        requirements.txt文件:记录该python文件需要用到的库

        Dockerfile文件:基于上述两个文件构建本地镜像

        add.yaml文件:基于创建的本地镜像构建Pod

        这些文件都部署在kubernetes集群的master主机中,并放在同一目录下为了叙述方便,本文中指定将创建的Pod部署在node1结点上。

二、本地镜像创建

2.1 add.py文件

        首先创建add.py文件实现两数相加功能,并设计参数与返回值。

from flask import Flask, request
app = Flask(__name__)@app.route('/add', methods=['GET'])
def add():a = int(request.args.get('a'))b = int(request.args.get('b'))result = a + breturn str(result)if __name__ == '__main__':app.run(host='0.0.0.0', port=8080)

        上述代码使用 Flask 框架创建了一个简单的 Web 应用程序。该应用程序监听 "/add" 路径的 GET请求,并从请求体中获取两个数字进行相加运算。运行应用程序时,它会在主机的8080 端口上启动。

        其中,request.args.get()的目的是接收参数a和b,由于通过url传递过来的参数会被当作字符串,因此要在代码中进行解析,转换成整数再进行相加运算。

        运算的结果是整数,但是在 Flask 中,视图函数的返回值需要是一个字符串,而不是一个整数。当直接返回一个整数时,Flask 会将其解释为 HTML 响应体中的文本,而不是有效的 HTML 标记。因此要将返回值转换为字符串,然后在客户端再进行解析处理。

2.2 requirements.txt文件

        上述代码只用到了flask库。因此requirements.txt文件只需写成如下形式:

Flask

2.3 Dockerfile文件

        完成上述文件的创建后,接下来,创建一个名为 Dockerfile"的文件,内容如下。

# 使用 python:3.9-alpine 作为基础镜像。alpine 版本是轻量级的 Linux 发行版,适合用于容器化应用。
FROM python:3.9-alpine
# 在容器中创建 /app 目录,并将工作目录设置为 /app。
WORKDIR /app
# 将 add.py 和 requirements.txt 文件复制到容器的 /app 目录中。
COPY add.py requirements.txt /app/
# 运行 pip install 命令来安装 requirements.txt 中列出的 Python 依赖库。使用 --no-cache-dir 选项可以避免缓存,减小镜像大小。
RUN pip install --no-cache-dir -r requirements.txt
# 使用 CMD 指令定义容器启动后要执行的命令,即运行 python add.py
CMD ["python", "add.py"]

        上述 Dockerfile 定义了一个基于 Python 3.9 的容器化环境,并将应用程序的文件复制到容器中。它还安装了应用程序所需的依赖项,并在容器启动时运行应用程序。具体每行代码对应的功能已经在注释中写出。

2.4 创建镜像

        进入集群master主机中上述文件的目录,并执行下方指令创建镜像。

docker build -t add:1.0 .

        其中,add为自己指定的镜像名称,1.0为镜像的版本标签。注意末尾的 . 表示当前目录,确保运行命令时处于正确的目录下。镜像创建完毕后系统的输出如下图所示。

三、创建Pod

        创建好本地镜像后,便可基于这个镜像创建Pod。

3.1 add.yaml文件

        add.yaml文件的内容如下所示。

apiVersion: v1
kind: Pod
metadata:name: add-pod
spec:nodeName: node1containers:- name: add-containerimage: add:1.0ports:- containerPort: 8080command: ["python"]args: ["add.py"]

        此处指定为Pod形式,nodeName字段的意思是将Pod部署到node1结点上。image字段后面要写上要拉取的镜像的名字,此处为前面创建好的本地镜像add:1.0。command 和 args 字段用于指定该容器要运行的命令和参数。在这个例子中,即容器启动后会执行 /bin/sh -c python add.py 命令。也就是执行add.py这个文件

3.2 将本地镜像传输至目标机器(node1)

        每一个要使用刚刚在master上创建的本地镜像的节点,都要事先load上该镜像。本例中在node1上部署Pod,因此同样的镜像要部署到node1上

        首先执行下方的指令,将创建好的本地镜像打包为add.tar

docker save -o add.tar add:1.0

        然后执行下方指令将这个打好的镜像的包传输至node1中。

scp add.tar root@192.168.60.129:/root/pod

        其中·,add.tar是镜像打好包的名字,192.168.60.129是node1的ip地址,/root/pod是想要传输到的node1中的目录。根据自己的需求进行修改。

        在node1中下载好包的目录下执行下方指令,在使用该镜像的节点上都要事先docker load上该镜像,此处为node1。

docker load -i add.tar

3.3 创建Pod

        最后执行下方指令创建Pod

kubectl apply -f add.yaml

四、调用该Pod

        执行下方指令查看该Pod是否部署完毕,并查看其IP地址。

kubectl get pod -o wide

        执行结果如下图所示,可以看出该Pod已经部署完毕,分配的IP地址为10.244.1.23。

        执行下方指令调用该Pod进行两数相加。此处通过GET方式传递参数,参数的值可以通过前端字符串拼接的方式解析得出。这里传递的参数为a=2,b=3此处的指令中,URL地址必须加双引号,否则写在后面的参数无法被解析。因为&符号会被误解释为linux两个命令行之间的分隔符。

curl "http://10.244.1.23:8080/add?a=2&b=3"

        返回结果如下图所示。当参数的值修改后,输出结果也会随之变化。

        执行kubectl logs add-pod查看日志后,可以看到该Pod创建以来接收参数的情况。此图可以看到上图中两次调用时对应传递的参数。

五、总结

        本文介绍了Kubernetes(K8S)拉取本地镜像部署Pod的具体方法与需要用到的文件、代码与指令,实现了kubernetes集群中类似微服务,函数的实现与调用。

相关文章:

Kubernetes(K8S)拉取本地镜像部署Pod 实现类似函数/微服务功能(可设置参数并实时调用)

以两数相加求和为例,在kubernetes集群拉取本地的镜像,实现如下效果: 1.实现两数相加求和 2.可以通过curl实时调用,参数以GET方式提供,并得到结果。(类似调用函数) 一、实现思路 需要准备如下的…...

k8s使用ingress实现应用的灰度发布升级

v1是1.14.0版本nginx ,实操时候升级到v2是1.20.0版本nginx,来测试灰度发布实现过程 一、方案:使用ingress实现应用的灰度发布 1、服务端:正常版本v1,灰度升级版本v2 2、客户端:带有请求头versionv2标识的请求访问版…...

最新热门商用GPT4.0带MJ绘画去授权版本自定义三方接口(开心版)

一台VPS 搭建宝塔 解析域名 上传程序至根目录 访问首页在线安装配置数据库 PHP版本选择:7.3 安装完成后访问网站首页即可! 配置APIKEY,登录网站后台自定义配置,不然网站无法使用! 网站后台地址/admin 默认账号:admin 密码…...

Halcon基于形状的模板匹配inspect_shape_model

Halcon基于形状的模板匹配 基于形状的匹配,就是使用目标对象的轮廓形状来描述模板。Halcon中有操作助手,可以直观 地进行形状模板匹配的参数选择以及效果测试。如果使用算子编写,步骤如下。 (1)从参考图像上选择检测的…...

html中根元素以及根元素字体的含义

在 HTML 中&#xff0c;根元素是指 <html> 标签&#xff0c;可以使用 CSS 来设置根元素的字体大小。根元素的字体大小会影响整个页面的文本内容&#xff0c;默认情况下&#xff0c;根元素的字体大小是浏览器默认的大小。 要设置根元素的字体大小&#xff0c;你可以使用 …...

51单片机1-6

目录 单片机介绍 点亮一个LED 流水灯参考代码 点亮流水LEDplus版本 独立按键 独立按键控制LED亮灭 静态数码管 静态数码管显示 动态数码管显示 模块化编程 调试工具 矩阵键盘 矩阵键盘显示数据 矩阵键盘密码锁 学习B站江协科技课程笔记。 安装keil&#xff0c;下…...

vue2(Vuex)、vue3(Pinia)、react(Redux)状态管理

vue2状态管理Vuex Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。它使用集中式存储管理应用的所有组件的状态&#xff0c;以及规则保证状态只能按照规定的方式进行修改。 State&#xff08;状态&#xff09;:Vuex 使用单一状态树&#xff0c;即一个对象包含全部的应用层…...

用户画像项目背景

1,用户画像项目介绍 大数据平台简介 数据仓库+用户画像+推荐系统 (1)数据仓库:加快数据的分析和查询 数据仓库分层:ODS层(映射HDFS的数据)—DW(数据仓库层)–APP(层)—BI(层) DW:DWD明细数据层(数据的清洗和转换),DWM(轻度聚合层),DWS(高度聚合),APP(层),DIM(层) …...

Go使用记忆化搜索的套路【以20240121力扣每日一题为例】

题目 分析 这道题很明显记忆化搜索&#xff0c;用py很容易写出来 Python class Solution:def splitArray(self, nums: List[int], k: int) -> int:n len(nums)# 寻找分割子数组中和的最小的最大值s [0]for num in nums:s.append(s[-1] num)#print(s)cachedef dfs(cur,…...

【LeetCode】每日一题 2024_1_21 分割数组的最大值(二分)

文章目录 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01;题目&#xff1a;分割数组的最大值题目描述代码与解题思路 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01; 今天是 hard&#xff0c;难受&#xff0c;还好有题解大哥的清晰讲解 题目&a…...

bevy the book 20140118翻译(全)

源自&#xff1a;Bevy Book: Introduction 主要用 有道 翻译。 Introduction 介绍 Getting Started 开始 Setup 设置 Apps 应用程序 ECS Plugins 插件 Resources 资源 Next Steps 下一个步骤 Contributing 贡献 Code 代码 Docs 文档 Building Bevys Ecosystem 构建 b…...

MySQL数据库面试知识点

1、数据库基础&#xff1a; MySQL是一个开源的关系型数据库管理系统&#xff0c;用于存储、管理和检索数据。它支持多种存储引擎&#xff0c;包括InnoDB、MyISAM等。MySQL是由瑞典公司MySQL AB开发&#xff0c;后来被Sun Microsystems收购&#xff0c;最终被甲骨文公司(Oracle…...

超优秀的三维模型轻量化、格式转换、可视化部署平台!

1、基于 HTML5 和 WebGL 技术&#xff0c;可在主流浏览器上进行快速浏览和调试&#xff0c;支持PC端和移动端 2、自主研发 AMRT 展示框架和9大核心技术&#xff0c;支持3D模型全网多端流畅展示与交互 3、提供格式转换、减面展UV、烘焙等多项单模型和倾斜摄影模型轻量化服务 4、…...

云原生全栈监控解决方案(全面详解)

【作者】JasonXu 前言 当前全球企业云化、数字化进程持续加速&#xff0c;容器、微服务等云原生技术在软件架构中快速渗透&#xff0c;IT 架构云化、复杂化持续驱动性能监控市场。企业云化、数字化持续转型&#xff0c;以及为了考虑系统的弹性、效率&#xff0c;企业软件开发中…...

代码随想录二刷 | 回溯 |复原IP地址

代码随想录二刷 &#xff5c; 回溯 &#xff5c;复原IP地址 题目描述解题思路代码实现 题目描述 93.复原IP地址 给定一个只包含数字的字符串&#xff0c;复原它并返回所有可能的 IP 地址格式。 有效的 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&am…...

windows资源管理器占用过高CPU的问题

最近&#xff0c;笔者的电脑在进行文件操作时变得异常的卡顿&#xff0c;打开任务管理器发现windows资源管理器占用了50%-80%的CPU。这里指的文件操作包括但不限于解压&#xff0c;复制&#xff0c;粘贴&#xff0c;甚至重命名一个文件夹都会引起50%的CPU占用。起初笔者认为可能…...

redis的常见数据类型和应用场景(非八股)------大总结(学了要会用-------教你如何使用)

Redis的数据类型 Redis 提供了丰富的数据类型&#xff0c;常见的有五种&#xff1a; String&#xff08;字符串&#xff09;&#xff0c;Hash&#xff08;哈希&#xff09;&#xff0c;List&#xff08;列表&#xff09;&#xff0c;Set&#xff08;集合&#xff09;、Zset&am…...

UE 可靠UDP实现原理

发送 我们的消息发送都是通过 UChannel 来处理的&#xff0c;通过调用 UChannel::SendBunch 统一处理。 发送的 Bunch 是以 FOutBunch 的形式存在的。当 bReliable 为 True 的时候&#xff0c;表示 Bunch 是可靠的。 发送逻辑直接从UChannel::SendBunch处开始分析 1、大小限…...

智慧博物馆信息化系统建设(1)

博物馆RFID藏品管理系统 博物馆藏品保管是一项十分复杂又繁琐的工作。从事保管工作除了经常、及时地进行藏品的登记、分类、编目、保养和修复等一系列工作外,还需要把有关藏品的信息迅速、正确地提供给利用者。要提高保管工作的效率,达到现代化的科学管理,从发展趋势看,进…...

【数据结构和算法】--- 二叉树(3)--二叉树链式结构的实现(1)

目录 一、二叉树的创建(伪)二、二叉树的遍历2.1 前序遍历2.2 中序遍历2.3 后序遍历 三、二叉树节点个数及高度3.1 二叉树节点个数3.2 二叉树叶子节点个数3.3二叉树第k层节点个数3.4 二叉树查找值为x的节点 四、二叉树的创建(真) 一、二叉树的创建(伪) 在学习二叉树的基本操作前…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...