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

这篇具有很好参考价值的文章主要介绍了Kubernetes(K8S)拉取本地镜像部署Pod 实现类似函数/微服务功能(可设置参数并实时调用)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

        1.实现两数相加求和

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

一、实现思路

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

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

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

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

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

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

        这些文件都部署在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为镜像的版本标签。注意末尾的 . 表示当前目录,确保运行命令时处于正确的目录下。镜像创建完毕后系统的输出如下图所示。

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

三、创建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。

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

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

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

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

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

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

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

五、总结

        本文介绍了Kubernetes(K8S)拉取本地镜像部署Pod的具体方法与需要用到的文件、代码与指令,实现了kubernetes集群中类似微服务,函数的实现与调用。文章来源地址https://www.toymoban.com/news/detail-807172.html

到了这里,关于Kubernetes(K8S)拉取本地镜像部署Pod 实现类似函数/微服务功能(可设置参数并实时调用)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s服务部署核心流程:以Jenkins为核心,从Gitee拉取代码,然后进行maven构建,之后使用docker命令打镜像,并推送镜像到harbor仓库,之后远程调用k8s命令创建服务

    前提是我们在自己电脑上模拟整个流程。 假设我们需要搭建一主一从的k8s集群,那就需要安装VMvare和Centos7(点击我查看安装文档), 然后就可以在这两个虚拟机上搭建k8s集群了(点击我查看安装文档), 一个最简单的devops流程已经在标题中写明了, 其中可以搭建gitlab(点

    2024年02月02日
    浏览(34)
  • K8S部署后的使用:dashboard启动、使用+docker镜像拉取、容器部署(ubuntu环境+gpu3080+3主机+部署深度学习模型)

    0、k8s安装、docker安装 参考:前两步Ubuntu云原生环境安装,docker+k8s+kubeedge(亲测好用)_爱吃关东煮的博客-CSDN博客_ubantu部署kubeedge  配置节点gpu: K8S调用GPU资源配置指南_思影影思的博客-CSDN博客_k8s 使用gpu 1、重置和清除旧工程:每个节点主机都要运行 2、部署新的k8s项目:

    2023年04月20日
    浏览(44)
  • K8s拉取habor镜像

    目录 在daemon.json中添加仓库地址 重新加载daemon.json并重启docker 在目标node节点添加域名 验证目标node是否能正常登录镜像仓库 创建pod资源 加载yml文件 验证 查看pod的ip与端口号 此处需要在创建资源对象所在的节点进行添加 路径: /etc/docker/daemon.json vim /etc/docker/daemon.json 格式:

    2024年04月12日
    浏览(20)
  • 【Kubernetes】K8s 查看 Pod 的状态

    NAME :Pod 的名称。 READY :代表 Pod 里面有几个容器,前面是启动的,后面是总数, 1 / 1 1/1 1/1 。 STATUS :就是当前 Pod 状态,最常见的就是 Running 正在运行,最期望的状态,只要不是 Running 的就说明有问题,就算是 Running 的就不一定没有问题。 状态 说明 Pending 挂起 在执行创建

    2024年01月15日
    浏览(68)
  • K8S 自动拉取镜像失败,手动拉取镜像成功

    新创建的Deploy在创建Pod时成功,但Pod报错,提示拉取镜像失败。 通过ssh登录到具体的K8S node上,手动执行docker pull 命令,却能成功拉取到对应的镜像。 根本原因:具体的命名空间缺少imagePullSecrets,不同的命名空间不能直接使用default中的imagePullSecrets。 准备K8S环境时,仅在d

    2024年01月18日
    浏览(32)
  • kubernetes(k8s) pod(资源限制、基础概念)

    目录  一、资源限制 1、概念 1.2、Pod和容器的资源请求和限制 1.3、CPU资源单位 1.4、内存资源单位 1.5、CPU和内存的Requests和Limits的特点 1.6、案例 二、pod 的两种使用方式 三、pod 资源共享 四、底层容器Pause 1、pause 共享资源 1.1、网络 1.2、存储 1.3、小结 2、Pause主要功能 3、Pod

    2024年02月05日
    浏览(49)
  • Kubernetes(k8s)核心资源解析:Pod详解

    💖The Begin💖点点关注,收藏不迷路💖 Pod是Kubernetes中最小的调度单元,它可以包含一个或多个容器。Pod中的所有容器共享网络和存储卷,它们一起运行在同一个节点上。Pod提供了一种抽象层,使得容器可以作为一个逻辑单元来管理。 Pod中的容器共享IP地址、端口空间和存储

    2024年04月11日
    浏览(51)
  • k8s拉取镜像的策略详解

    imagePullPolicy 是 Kubernetes 中 Deployment 和 Pod 配置中的一个重要字段,用于指定容器拉取镜像的策略。它可以控制 Kubernetes 在何时拉取容器镜像。以下是各个策略的详细说明: Always: 当设置为 \\\"Always\\\" 时,Kubernetes 会始终忽略本地的缓存镜像,每次都重新拉取指定的镜像。这意味着

    2024年02月06日
    浏览(30)
  • K8s拉取Harbor私有仓库镜像

    提示:需要先部署Harbor私有镜像库。 insecure-registries对应可信任的镜像服务地址,如果有多个地址,还可以用“,”隔开,配置多个。 提示:每个k8s节点都需要配置,完成之后需要重启docker服务。 选择需要的命名空间,创建密文。 如果没有密文,后面的配置,都会明文数据

    2024年02月16日
    浏览(31)
  • K8S第四讲 Kubernetes删除pod阻塞问题

    在Kubernetes中,当您尝试删除一个Pod时,可能会遇到Pod一直阻塞的情况。这通常是由于Pod正在运行或被其他资源(例如ReplicaSet或Deployment)控制而导致的。以下是一些可能的解决方案: 1: 确认Pod是否正在运行:在执行删除Pod命令之前,请先检查Pod的状态,确保它没有在运行中

    2024年02月05日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包