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

news2024/11/18 15:46:00

         以两数相加求和为例,在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 + b
    return 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: node1
  containers:
  - name: add-container
    image: add:1.0
    ports:
    - containerPort: 8080
    command: ["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集群中类似微服务,函数的实现与调用。

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

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

相关文章

【学习记录24】vue3自定义指令

一、在单vue文件中直接使用 1、html部分 <template><divstyle"height: 100%;"v-loading"loading"><ul><li v-for"item in data">{{item}} - {{item * 2}}</li></ul></div> </template> 2、js…

golang面试题大全

go基础类 1、与其他语言相比&#xff0c;使用 Go 有什么好处&#xff1f; 与其他作为学术实验开始的语言不同&#xff0c; Go 代码的设计是务实的。每个功能和语法决策都旨在让程序员的生活更轻松。Golang 针对并发进行了优化&#xff0c;并且在规模上运行良好。由于单一的标…

Java进阶-Tomcat发布JavaWeb项目

对于云服务器&#xff0c;程序员一般不会陌生&#xff0c;如果项目需要发布到现网&#xff0c;那么服务器是必不可缺的一项硬性条件&#xff0c;那么如何在云服务器上部署一个项目&#xff0c;需要做哪些配置准备&#xff0c;下面就由本文档为大家讲解&#xff0c;本篇以Tomcat…

springcloud之链路追踪

写在前面 源码 。 本文一起来看下链路追踪的功能&#xff0c;链路追踪是一种找出病因的手段&#xff0c;可以类比医院的检查仪器&#xff0c;服务医生治病救人&#xff0c;而链路追踪技术是辅助开发人员查找线上问题的。 1&#xff1a;为什么微服务需要链路追踪 孔子同志月过…

python数字图像处理基础(十)——背景建模

目录 背景建模背景消除-帧差法混合高斯模型 背景建模 背景建模是计算机视觉和图像处理中的一项关键技术&#xff0c;用于提取视频中的前景对象。在视频监控、运动检测和行为分析等领域中&#xff0c;背景建模被广泛应用。其基本思想是通过对视频序列中的像素进行建模&#xff…

【信号与系统】【北京航空航天大学】实验四、幅频、相频响应和傅里叶变换

一、实验目的 1、 掌握利用MATLAB计算系统幅频、相频响应的方法&#xff1b; 2、 掌握使用MATLAB进行傅里叶变换的方法&#xff1b; 3、 掌握使用MATLAB验证傅里叶变换的性质的方法。 二、实验内容 1、 MATLAB代码&#xff1a; >> clear all; >> a [1 3 2]; …

干掉xshell, 这款远程终端工具:开源、免费、跨平台,同时支持SSH+SFTP+Telent+TCP+Serial,太香了。

干掉xshell说say you, 这款远程终端工具&#xff1a;开源、免费、跨平台&#xff0c;同时支持SSHSFTPTelentTCPSerial&#xff0c;太香了。 大家好&#xff01; 我是老码农。 今天分享一款&#xff1a;远程终端连接工具&#xff1a;WindTerm。 如标题所述&#xff0c;值得拥…

按空格键改变text显示的内容并打印输出

注意&#xff01;如果焦点不在text则无法生效。 整型竟然能和字符串直接相加&#xff0c;立天&#xff01; import QtQuickWindow {width: 640height: 480visible: truetitle: qsTr("2.2 属性")Rectangle {Text {id: thislabelfont.pixelSize: 30font.family: "…

Elastic Stack(1):Elastic Stack简介

1 简介 ELK是一个免费开源的日志分析架构技术栈总称&#xff0c;官网https://www.elastic.co/cn。包含三大基础组件&#xff0c;分别是Elasticsearch、Logstash、Kibana。但实际上ELK不仅仅适用于日志分析&#xff0c;它还可以支持其它任何数据搜索、分析和收集的场景&#xf…

线程基础知识点

1. 线程和进程的区别&#xff1f; 程序由指令和数据组成&#xff0c;但这些指令要运行&#xff0c;数据要读写&#xff0c;就必须将指令加载至 CPU&#xff0c;数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的。 当…

自动驾驶概述

自动驾驶技术主要解决的问题 无人驾驶分级 L1:巡航定速(ACC),巡航装置可以纵向控制车辆,可以加速减速 L2:车道保持辅助,系统可以纵向控制也可以横向控制汽车,但车是辅助,人才是主导。 L2.5:可以提供简单路况下的变道能力,比如特斯拉。 L3:L2的基础上提供变道能力,…

[C语言]编译和链接

一、翻译和运行 在ANSI C的任何⼀种实现中&#xff0c;存在两个不同的环境。 1&#xff09;翻译环境&#xff1a;将源代码被转换为可执行的机器指令 2&#xff09;执行环境&#xff1a;实际执行代码。 1.翻译环境 首先我们来将翻译环境 翻译环境是由 编译 和 链接 两个大的过程…

龙哥的问题(积性函数,莫比乌斯反演)

题目路径&#xff1a; 221. 龙哥的问题 - AcWing题库 思路&#xff1a;

5G消息一站式解决方案,实现全新“跳代”应用体验

随着5G技术的普及和深化&#xff0c;通信行业迎来发展的“红利期”。5G消息作为基础短信业务的升级&#xff0c;可通过手机一键开启。不仅支持在原生短信界面发送多种内容&#xff0c;如&#xff1a;语音、视频、图片、地理位置等。还可通过chatbot功能模拟人类智能对话&#x…

2017年认证杯SPSSPRO杯数学建模A题(第一阶段)安全的后视镜全过程文档及程序

2017年认证杯SPSSPRO杯数学建模 A题 安全的后视镜 原题再现&#xff1a; 汽车后视镜的视野对行车安全非常重要。一般来说&#xff0c;汽车的后视镜需要有良好的视野范围&#xff0c;以便驾驶员能够全面地了解车后方的道路情况。同时&#xff0c;后视镜也要使图像的畸变尽可能…

Zoho Survey评价:功能全面,值得一试

通常来讲&#xff0c;我们在使用一款问卷调查制作工具制作问卷时会有哪些需求呢&#xff1f; 用户需求 1、操作简单&#xff0c;易上手。 2、能够满足用户个性化的需求。 3、提供多语言服务。 4、能够帮助发布以及数据收集。 5、简化数据分析 市面上的问卷调查制作工具都…

【法如faro】法如三维激光扫描软件Scene2023下载与安装教程

FARO SCENE 2023是法如中国官方开发的一款相套配的三维数字化存档软件&#xff0c;该软件专门设计用于所有的Focus和第三方激光扫描仪&#xff0c;通过使用实时现场配准、自动对象识别、扫描图像配准和定位功能&#xff0c;能够帮助用户轻松而高效地处理和管理扫描后的数据。 文…

HTTPS协议把什么加密了?

HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是一种用于在计算机网络上进行安全通信的协议。它的工作原理主要基于以下几个关键步骤&#xff1a; 1. 握手阶段&#xff08;Handshake&#xff09;&#xff1a; - 客户端向服务器发送一个请求&#xff0c…

349. 两个数组的交集(力扣)(OJ题)

题目链接&#xff1a;349. 两个数组的交集 - 力扣&#xff08;LeetCode&#xff09; 个人博客主页&#xff1a;https://blog.csdn.net/2301_79293429?typeblog 专栏&#xff1a;https://blog.csdn.net/2301_79293429/category_12545690.html 给定两个数组 nums1 和 nums2 &a…

十一、常用API——正则表达式

目录 练习1&#xff1a; 正则表达式的作用 正则表达式 字符类&#xff08;只匹配一个字符&#xff09; 预定义字符&#xff08;只匹配一个字符&#xff09; 数量词 类 Pattern 正则表达式的构造摘要 反斜线、转义和引用 字符类 行结束符 组和捕获 Unicode 支持 与…