Python应用程序部署至K8s——循序渐进版

这篇具有很好参考价值的文章主要介绍了Python应用程序部署至K8s——循序渐进版。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、多种方法创建Pod

1、kubectl直接创建

# kubectl run nginx --image=nginx 
pod/nginx created
# 查看pod运行情况
# kubectl get pods -w
NAME      READY   STATUS    RESTARTS   AGE
nginx     1/1     Running   0          34s
web-app   1/1     Running   0          86m
# kubectl get pods -o wide
NAME      READY   STATUS    RESTARTS   AGE   IP           NODE        NOMINATED NODE   READINESS GATES
nginx     1/1     Running   0          43s   10.24.0.13   k8s-node1   <none>           <none>
web-app   1/1     Running   0          86m   10.24.0.12   k8s-node1   <none>           <none>

2、yaml文件创建

$ sudo vim test.yaml
apiVersion: v1
kind: Pod
metadata:
        name: web-app
        labels:
                role: approle
spec:
        containers:
          - name: web-app-cont
            image: nginx
            imagePullPolicy: IfNotPresent
            ports:
                    - name: web-app-port
                      containerPort: 8080
                      hostPort: 8080
                      protocol: TCP
$ kubectl apply -f test.yaml

3、删除Pod

$ kubectl delete web-app

4、问题汇总

(1)Pod处于一直Pending状态

解决方法参考:0/1 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn‘t-CSDN博客

# 问题描述
root@K8s-node1:~# kubectl get pod --all-namespaces
NAMESPACE      NAME                                READY   STATUS    RESTARTS   AGE
default        web-app                             0/1     Pending   0          3s
kube-flannel   kube-flannel-ds-vjp9v               1/1     Running   4          23h
kube-system    coredns-59d64cd4d4-8fr84            1/1     Running   4          24h
kube-system    coredns-59d64cd4d4-954k4            1/1     Running   4          24h
kube-system    etcd-k8s-node1                      1/1     Running   18         24h
kube-system    kube-apiserver-k8s-node1            1/1     Running   27         24h
kube-system    kube-controller-manager-k8s-node1   1/1     Running   61         24h
kube-system    kube-proxy-8br54                    1/1     Running   4          24h
kube-system    kube-scheduler-k8s-node1            1/1     Running   60         24h
# 查看问题
root@K8s-node1:~# kubectl describe pod web-app
Name:         web-app
Namespace:    default
# 中间省略,主要看event描述
Events:
  Type     Reason            Age                  From               Message
  ----     ------            ----                 ----               -------
  Warning  FailedScheduling  26s (x4 over 2m37s)  default-scheduler  0/1 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate.

# 问题分析,master节点 默认不允许调度 pod 
# 1个节点有pod不能容忍的污点{node-role.kubernetes.io/master:}。

# 解决方法
kubectl taint nodes --all node-role.kubernetes.io/master-

(2)Pod处于CrashLoopBackOff状态

原因:python不能够常驻,只能运行一次,且是后台运行情况,则会出错。

解决方法:将程序设置成能够常驻的,并且在创建容器时使用交互式,即可看到输出以及Pod运行正常。

(3)容器运行python程序不能输出图像

原因:没有安装相关成像的包

解决方法:文章来源地址https://www.toymoban.com/news/detail-842259.html

二、Python程序部署到K8s

1、导出python程序

# 编写main.py程序
if __name__ == "__main__":
    print("hello world")

 打开终端

Python应用程序部署至K8s——循序渐进版,kubernetes,容器,云原生

# 在终端中输入
pip freeze > requirements.txt

# 生成requirements.txt文件,存于main.py同文件夹下
# 将.py文件同.txt文件拷贝到盒子所在Linux系统中

Python应用程序部署至K8s——循序渐进版,kubernetes,容器,云原生

2、通过Dockerfile创建镜像

# 在Linux系统下查看文件所在位置
ubuntu@K8s-node1:~/K8s-test-python$ cd ~
ubuntu@K8s-node1:~$ ls
Desktop  device_test  Documents  Downloads  examples.desktop  k8s  K8s-test-python  Music  Pictures  Public  Templates  Videos  VisionWorks-SFM-0.90-Samples
ubuntu@K8s-node1:~$ cd ~/K8s-test-python
ubuntu@K8s-node1:~/K8s-test-python$ ls
Dockerfile  main.py  requirements.txt
ubuntu@K8s-node1:~/K8s-test-python$ sudo vim Dockerfile
# Dockerfile 内容

FROM python:3.7
WORKDIR ./K8s-test-python
ADD . .
# RUN pip install -r requirements.txt
CMD ["python","./main.py"]
# 创建镜像
$ sudo docker build -t test:v1 .
Sending build context to Docker daemon  12.29kB
Step 1/4 : FROM python:3.7
 ---> 622939041855
Step 2/4 : WORKDIR ./K8s-test-python
 ---> Using cache
 ---> de94df403dc1
Step 3/4 : ADD . .
 ---> 204c379a4116
Step 4/4 : CMD ["python","./main.py"]
 ---> Running in 0ab10ec63e4d
Removing intermediate container 0ab10ec63e4d
 ---> 7489ba0c4dca
Successfully built 7489ba0c4dca
Successfully tagged test:v1
# 查看是否成功创建镜像
ubuntu@K8s-node1:~/K8s-test-python$ docker image ls
REPOSITORY                                                        TAG        IMAGE ID       CREATED             SIZE
test                                                              v1         7489ba0c4dca   About an hour ago   852MB
nginx                                                             latest     eeb9db34b331   2 years ago         134MB
python                                                            3.7        622939041855   2 years ago         852MB
registry.aliyuncs.com/google_containers/pause                     3.4.1      d055819ed991   3 years ago         484kB
registry.aliyuncs.com/google_containers/coredns                   v1.8.0     1a1f05a2cd7c   3 years ago         39.3MB
registry.aliyuncs.com/google_containers/etcd                      3.4.13-0   05b738aa1bc6   3 years ago         312MB

3、创建容器和Pod

ubuntu@K8s-node1:~/K8s-test-python$ docker run test:v1
hello world
root@K8s-node1:~# kubectl run pod-demo --image=test:v1
pod/pod-demo created
root@K8s-node1:~# kubectl get pod
NAME       READY   STATUS    RESTARTS   AGE
nginx      1/1     Running   1          4h17m
pod-demo   1/1     Running   0          4s
web-app    1/1     Running   1          5h42m

root@K8s-node1:~# kubectl get pod
NAME       READY   STATUS             RESTARTS   AGE
nginx      1/1     Running            1          5h20m
pod-demo   0/1     CrashLoopBackOff   17         63m
web-app    1/1     Running            1          6h46m

4、实例

(1)Hello World

(2)计算器

(3)基于Flask框架实现通讯

Ⅰ.Flask库安装
# 终端输入指令
pip install Flask

# 报错
[notice] A new release of pip available: 22.1.2 -> 23.3.2
[notice] To update, run: python.exe -m pip install --upgrade pip

# 原因:pip需要升级
python.exe -m pip install --user --upgrade pip

# 显示以下信息表明pip安装成功
Successfully installed pip-23.3.2

# 再次安装Flask
Requirement already satisfied: Flask in c:\programdata\anaconda3\lib\site-packages (1.1.2)
Requirement already satisfied: Werkzeug>=0.15 in c:\programdata\anaconda3\lib\site-packages (from Flask) (1.0.1)
Requirement already satisfied: Jinja2>=2.10.1 in c:\programdata\anaconda3\lib\site-packages (from Flask) (2.11.2)
Requirement already satisfied: itsdangerous>=0.24 in c:\programdata\anaconda3\lib\site-packages (from Flask) (1.1.0)
Requirement already satisfied: click>=5.1 in c:\programdata\anaconda3\lib\site-packages (from Flask) (7.1.2)
Requirement already satisfied: MarkupSafe>=0.23 in c:\programdata\anaconda3\lib\site-packages (from Jinja2>=2.10.1->Flask) (1.1.1)
Ⅱ.基于Flask框架的Python程序
# client.py

import requests

if __name__ == '__main__':
    # get 请求
    url = "http://localhost:9979/get-test"
    r = requests.get(url)
    print(r.text)

    # post 请求
    url = "http://localhost:9979/post-test"
    data = {"aaa": 1, "bbb": 2, }
    r = requests.post(url, json={"data": data})
    print(r.text)
# server.py

from flask import Flask, request

app = Flask(__name__)


@app.route('/get-test', methods=['GET'])
def testget():
    if request.method == 'GET':
        return "get request success"


@app.route('/post-test', methods=['POST'])
def testpost():
    if request.method == 'POST':
        temp = request.json.get('data')
        print(temp)
        return "post request success"


if __name__ == '__main__':
    app.run(host="localhost", port=9979, threaded=True)

三、问题归纳

1、IP问题

问题描述:盒子联网时地IP并不总是固定的,如果在配置文件没有同步更改IP的情况下,就会出现集群无法使用的情况

解决方法:

(1)修改admin.conf等配置文件,并且应用配置,但是在其中也会报错。使用 source 语句应用时会卡顿,不成功;

source ~/.bash_profile

(2)使用kubeadm生成新的admin.conf文件

⚠注:在工作节点中,很可能一开始就不存在admin.conf文件,需要将主节点中的文件复制到工作节点上的对应位置;

2、kubectl命令

问题描述:使用kubectl指令时报错,内容如下,

# 工作节点报错
The connection to the server “工作节点IP地址” was refused - did you specify the right host or port?
# 虚拟机工作节点报错
The connection to the server localhost:8080 was refused - did you specify the right host or port?

解决方法:

(1)配置文件法

Ⅰ.将主节点(master)中的“/etc/kubernetes/admin.conf”文件拷贝到从节点相同目录下
Ⅱ.配置环境变量

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

Ⅲ.立即生效

source ~/.bash_profile

Ⅳ.重新启动kubelet服务(记得关闭swap) 

3、基于Flask 的python通信程序测试 

问题描述:服务器文件可以成功运行,这里没有截图,但是post文件在导入库上面报错

解决方法:

到了这里,关于Python应用程序部署至K8s——循序渐进版的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【Go】K8s 管理系统项目[Jenkins Pipeline K8s环境–应用部署]

    考虑到实际工作中前后端可能是不同的同学完成,一般Api部分完成后改动会比较小,web部分改动会比较频繁.于是将api和web分了2个pipeline实现 docker目录存放镜像构建相关文件 k8s-plantform-api 存放api部分代码 Jenkinsfile用作pipeline配置 yaml用作生成k8s下k8s-plantform-api相关资源 1.1.1 docker目

    2023年04月08日
    浏览(57)
  • 在 K8S 中部署一个应用 上

    本身在 K8S 中部署一个应用是需要写 yaml 文件的 ,我们这次简单部署,通过拉取网络上的镜像来部署应用,会用图解的方式来分享一下,过程中都发生了什么 我们可以通过 kubectl run 的方式来简单部署一个应用,现在我们先不关心里面的 yaml 结构和具体的配置,先运行起来,

    2024年02月09日
    浏览(84)
  • 在 K8S 中部署一个应用 下

    接着上一篇继续部署应用到 K8S中 之前简单部署的简单集群,三个工作节点是运行在 docker 和 kubelet 的,还有一个是控制节点 之前有 提到 ReplicationController , pod 和 服务 是如何组合在一起的呢? 可以通过这张如图来解释一下 我们之前创建 pod 的时候不是直接创建的,是通过

    2024年02月10日
    浏览(39)
  • K8S应用笔记 —— 部署Dolphinscheduler及简单应用(一)

    Apache DolphinScheduler 是一个分布式易扩展的可视化 DAG 工作流任务调度开源系统。适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。 Apache DolphinScheduler 旨在解决复杂的大数据任务依赖关系,并为应用程序提供数据和各种 OPS 编排中

    2024年02月07日
    浏览(41)
  • 【云原生、k8s】管理Kubernetes应用搭建与部署

    官方提供Kubernetes部署3种方式 (一)minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用。不能用于生产环境。 官方文档:https://kubernetes.io/docs/setup/minikube/ (二)二进制包 从官方下载发行版的二进制包,手动部署每个组件,

    2024年01月21日
    浏览(76)
  • 用Kubernetes(k8s)的ingress部署https应用

    我之前有一片文章写的是用ingress暴露应用,这篇文章接着上一片文章继续讲使用ingress暴露https的应用。请先参考上一片文章将ingress先在Kubernetes集群当中安装上: ingress暴露应用文章地址:https://blog.csdn.net/m0_51510236/article/details/132536519 因为是暴露https,所以需要域名证书。分以

    2024年02月10日
    浏览(45)
  • 云原生Kubernetes:简化K8S应用部署工具Helm

    目录 一、理论 1.HELM ​编辑 2.部署HELM2 3.部署HELM3(2to3方式) 4.部署HELM3(单独安装) 二、实验 1.部署 HELM2 2.部署HELM3(2to3方式) 3.部署HELM3(单独安装) 三、问题 1.api版本过期 2.helm初始化报错 3.pod状态为ImagePullBackOff 4.helm 命令显示 no repositories to show 的错误 5.Helm安装报错

    2024年02月07日
    浏览(64)
  • 应用打包部署k8s (包括dockerfile打包及仓库上传)

    小唐的项目主要是(mysql+jar+vue),然后所有项目都是打包好了的,然后现在我们用docker run 来测试一下 1.存储文件夹 并将我们的sql文件转移至init 在编写mysql文件之前,我们可以先使用docker镜像的方式去看看我们的sql文件是否可以正确导入至我们的容器 2.准备好对于位置 3.运

    2024年02月11日
    浏览(66)
  • 在Kubernetes(k8s)上部署整个SpringCloud微服务应用

    视频教程地址:https://www.bilibili.com/video/BV1Xh4y1q7aW/ 这次我准备了一个微服务项目,是依照RuoYi-Cloud(http://doc.ruoyi.vip/ruoyi-cloud/)进行了一些修改所得到的微服务项目。重点是修改了如图根据不同环境添加了不同的配置文件: 项目代码地址为:https://gitcode.net/m0_51510236/yueyang-cloud 我

    2024年02月05日
    浏览(40)
  • (十二)K8S可视化工具Rancher部署项目应用实战

    1.进入资源密文 2.进入镜像库凭证列表,点击添加凭证 3.输入凭证名称,选择自定义,填入自己的私有镜像仓库地址,这里使用的是阿里云,输入用户名和密码 1.连接好镜像仓库之后,我们点击资源工作负载部署服务 2.部署工作负载,点击启动 3.启动成功后,等待镜像拉去完

    2024年02月11日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包