资质升级业绩备案在哪个网站做,深圳高端设计公司有哪些,天津网站建设好公司,网站外链以两数相加求和为例#xff0c;在kubernetes集群拉取本地的镜像#xff0c;实现如下效果#xff1a; 1.实现两数相加求和 2.可以通过curl实时调用#xff0c;参数以GET方式提供#xff0c;并得到结果。#xff08;类似调用函数#xff09;
一、实现思路 需要准备如下的… 以两数相加求和为例在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(host0.0.0.0, port8080) 上述代码使用 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 root192.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方式传递参数参数的值可以通过前端字符串拼接的方式解析得出。这里传递的参数为a2b3。此处的指令中URL地址必须加双引号否则写在后面的参数无法被解析。因为符号会被误解释为linux两个命令行之间的分隔符。
curl http://10.244.1.23:8080/add?a2b3 返回结果如下图所示。当参数的值修改后输出结果也会随之变化。 执行kubectl logs add-pod查看日志后可以看到该Pod创建以来接收参数的情况。此图可以看到上图中两次调用时对应传递的参数。 五、总结 本文介绍了Kubernetes(K8S)拉取本地镜像部署Pod的具体方法与需要用到的文件、代码与指令实现了kubernetes集群中类似微服务函数的实现与调用。