【k8s完整实战教程6】完整实践-部署一个federated_download项目

news2025/6/11 14:28:21

系列文章:这个系列已完结,如对您有帮助,求点赞收藏评论。
读者寄语:再小的帆,也能远航!

  1. 【k8s完整实战教程0】前言
  2. 【k8s完整实战教程1】源码管理-Coding
  3. 【k8s完整实战教程2】腾讯云搭建k8s托管集群
  4. 【k8s完整实战教程3】k8s集群部署kubesphere
  5. 【k8s完整实战教程4】使用kubesphere部署项目到k8s
  6. 【k8s完整实战教程5】网络服务配置(nodeport/loadbalancer/ingress)
  7. 【k8s完整实战教程6】完整实践-部署一个federated_download项目

1 Coding代码仓库开发源码

在这里插入图片描述

2 本地测试

2.1 git拉取到本地仓库

17211@hqc MINGW64 ~
$ cd /d/research/git_repository/

17211@hqc MINGW64 /d/research/git_repository (master)
$ ls
Federated/  federated_with_flask/  hello_world/

17211@hqc MINGW64 /d/research/git_repository (master)
$ git clone https://e.coding.net/hqc12/hqc/federated_download.git
Cloning into 'federated_download'...
remote: Enumerating objects: 31, done.
remote: Counting objects: 100% (31/31), done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 31 (delta 5), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (31/31), 12.44 KiB | 849.00 KiB/s, done.
Resolving deltas: 100% (5/5), done.

17211@hqc MINGW64 /d/research/git_repository (master)
$ ls
Federated/  federated_download/  federated_with_flask/  hello_world/

17211@hqc MINGW64 /d/research/git_repository (master)
$ cd federated_download/

17211@hqc MINGW64 /d/research/git_repository/federated_download (master)
$ ls
Dockerfile  README.md  main.py  requirement.txt  static/  templates/

2.2 本地运行测试

打开pycharm,运行测试
在这里插入图片描述

出错了,查找资料好像说是conda环境中存在两个该.dll文件造成的,运行在docker中应该不会出现这个问题。
为了进行本地测试,还是在本地解决一下,代码加上:

import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"

再次运行测试:
在这里插入图片描述

2.3 访问

两个网址都可以进行访问
点击即可下载
在这里插入图片描述

成功!!!

2.4 有个小问题

好像没法指定下载到设置的downloads文件夹中,就是直接浏览器下载。因此这个文件夹可以不要了。

3 制作成容器镜像

3.1 创建制品仓库

在这里插入图片描述

直接使用现有仓库

3.2 构建计划

采用之前的构建计划,更换一下代码仓库即可
另外,为提升二次构建镜像的速度,设置缓存目录
在这里插入图片描述

缓存目录设置参考:https://coding.net/help/docs/ci/configuration/cache.html
由于使用的是pip下载依赖,因此设置对应的缓存目录

3.3 立即构建

构建时 Dockerfile中COPY源码进容器这一步骤 出现问题,多方尝试之后,下面这样是ok的。

FROM python:3.7
WORKDIR . # 指定容器工作目录
COPY Dockerfile main.py requirement.txt ./ 
COPY /templates/download.html ./templates/download.html
RUN pip install -r requirement.txt
EXPOSE 5000
RUN /bin/bash -c 'echo init ok'
CMD ["python", "main.py"]

注意:

  1. 目标路径必须是一个目录,并以/ 结尾
  2. 不能直接复制文件夹,它默认会只复制文件夹中的文件,破坏文件结构
    构建成功:
    在这里插入图片描述

3.4 镜像仓库查看

成功!
在这里插入图片描述

4 搭建k8s集群

按之前的记录搭建即可

5 docker镜像测试

5.1 本地拉取镜像

# 登录
ubuntu@VM-1-15-ubuntu:~$ sudo docker login -u federated_project-1667453994942 -p 55a845e185c9bda4ba21fd2227a7538b55717b00 hqc12-docker.pkg.coding.net
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /home/ubuntu/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
# 拉取
ubuntu@VM-1-15-ubuntu:~$ sudo docker pull hqc12-docker.pkg.coding.net/hqc/federated_project/federated-download:v0.0.1
v0.0.1: Pulling from hqc/federated_project/federated-download
17c9e6141fdb: Pull complete 
de4a4c6caea8: Pull complete 
4edced8587e6: Pull complete 
a7969cffbf46: Pull complete 
74fbfde6af91: Pull complete 
16fe51aed899: Pull complete 
a418194ab798: Pull complete 
e1b9101d5fa4: Pull complete 
c0b070a4672c: Pull complete 
7094a060c489: Pull complete 
6927575c3e2a: Pull complete 
be9ca32391c3: Pull complete 
aa5d393447e7: Pull complete 
Digest: sha256:4a2cb2995c0a9e10e2bef840a39e96843c043d50256c70d95bd7fc2f2a0362fe
Status: Downloaded newer image for hqc12-docker.pkg.coding.net/hqc/federated_project/federated-download:v0.0.1
hqc12-docker.pkg.coding.net/hqc/federated_project/federated-download:v0.0.1

5.2 本地运行镜像

# 查看当前镜像
ubuntu@VM-1-15-ubuntu:~$ sudo docker images
REPOSITORY                                                             TAG                 IMAGE ID            CREATED             SIZE
hqc12-docker.pkg.coding.net/hqc/federated_project/federated-download   v0.0.1              135908d3f14b        50 minutes ago      3.32GB
...

# 打新的标签
ubuntu@VM-1-15-ubuntu:~$ sudo docker tag 135908d3f14b federated-download:v0.0.1
...

# 删除之前的镜像
ubuntu@VM-1-15-ubuntu:~$ sudo docker rmi hqc12-docker.pkg.coding.net/hqc/federated_project/federated-download:v0.0.1
Untagged: hqc12-docker.pkg.coding.net/hqc/federated_project/federated-download:v0.0.1
Untagged: hqc12-docker.pkg.coding.net/hqc/federated_project/federated-download@sha256:4a2cb2995c0a9e10e2bef840a39e96843c043d50256c70d95bd7fc2f2a0362fe

# 再次查看
ubuntu@VM-1-15-ubuntu:~$ sudo docker images
REPOSITORY                                                   TAG                 IMAGE ID            CREATED             SIZE
federated-download                                           v0.0.1              135908d3f14b        51 minutes ago      3.32GB
...

5.3 本地直接运行测试镜像


# 运行
ubuntu@VM-1-15-ubuntu:~$ sudo docker run federated-download:v0.0.1
2022-11-03 05:56:57.531568: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcuda.so.1'; dlerror: libcuda.so.1: cannot open shared object file: No such file or directory
2022-11-03 05:56:57.531673: E tensorflow/stream_executor/cuda/cuda_driver.cc:313] failed call to cuInit: UNKNOWN ERROR (303)
2022-11-03 05:56:57.531708: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:156] kernel driver does not appear to be running on this host (ac30a6317b98): /proc/driver/nvidia/version does not exist
2022-11-03 05:56:57.532244: I tensorflow/core/platform/cpu_feature_guard.cc:143] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2022-11-03 05:56:57.559485: I tensorflow/core/platform/profile_utils/cpu_utils.cc:102] CPU Frequency: 2494085000 Hz
2022-11-03 05:56:57.559964: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x7fb718000b60 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2022-11-03 05:56:57.560008: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11493376/11490434 [==============================] - 1s 0us/step
ubuntu@VM-1-15-ubuntu:~$

没法持续运行。

5.4 创建deployment部署上k8s测试

# 创建deployment的yaml文件
ubuntu@VM-1-15-ubuntu:~$ vim federated-dp.yaml
# 创建service的yaml文件
ubuntu@VM-1-15-ubuntu:~$ vim federated-svc.yaml

ubuntu@VM-1-15-ubuntu:~$ ls
federated-dp.yaml  federated-svc.yaml
# 部署deployment
ubuntu@VM-1-15-ubuntu:~$ kubectl apply -f federated-dp.yaml 
deployment.apps/federated-deployment created
# 查看,暂时正常
ubuntu@VM-1-15-ubuntu:~$ kubectl get all
NAME                                        READY   STATUS    RESTARTS   AGE
pod/federated-deployment-54f5db67fd-g8p9j   1/1     Running   0          6s
pod/federated-deployment-54f5db67fd-tdwdl   1/1     Running   0          6s

NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/federated-deployment   2/2     2            2           6s

NAME                                              DESIRED   CURRENT   READY   AGE
replicaset.apps/federated-deployment-54f5db67fd   2         2         2       6s
# 部署service
ubuntu@VM-1-15-ubuntu:~$ kubectl apply -f federated-svc.yaml 
service/federated-service created

# 查看,暂时也正常
ubuntu@VM-1-15-ubuntu:~$ kubectl get all
NAME                                        READY   STATUS    RESTARTS   AGE
pod/federated-deployment-54f5db67fd-g8p9j   1/1     Running   0          35s
pod/federated-deployment-54f5db67fd-tdwdl   1/1     Running   0          35s

NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
service/federated-service   NodePort    172.16.253.172   <none>        80:30000/TCP   3s
service/kubernetes          ClusterIP   172.16.252.1     <none>        443/TCP        37m

NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/federated-deployment   2/2     2            2           36s

NAME                                              DESIRED   CURRENT   READY   AGE
replicaset.apps/federated-deployment-54f5db67fd   2         2         2       36s
# 过一会儿查看,出错
ubuntu@VM-1-15-ubuntu:~$ kubectl get all
NAME                                        READY   STATUS             RESTARTS   AGE
pod/federated-deployment-54f5db67fd-2hn6s   0/1     Evicted            0          33s
pod/federated-deployment-54f5db67fd-ddxts   0/1     Evicted            0          33s
pod/federated-deployment-54f5db67fd-dn9dn   0/1     Evicted            0          33s
pod/federated-deployment-54f5db67fd-g8p9j   0/1     Evicted            0          113s
pod/federated-deployment-54f5db67fd-jkrfn   0/1     Evicted            0          33s
pod/federated-deployment-54f5db67fd-jwfqp   0/1     Evicted            0          33s
pod/federated-deployment-54f5db67fd-mjxk8   0/1     Evicted            0          33s
pod/federated-deployment-54f5db67fd-mm8b6   0/1     Evicted            0          32s
pod/federated-deployment-54f5db67fd-tdwdl   1/1     Running            0          113s
pod/federated-deployment-54f5db67fd-wh6qk   0/1     ImagePullBackOff   0          32s
pod/federated-deployment-54f5db67fd-xdktv   0/1     Evicted            0          33s

NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
service/federated-service   NodePort    172.16.253.172   <none>        80:30000/TCP   80s
service/kubernetes          ClusterIP   172.16.252.1     <none>        443/TCP        39m

NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/federated-deployment   1/2     2            1           113s

NAME                                              DESIRED   CURRENT   READY   AGE
replicaset.apps/federated-deployment-54f5db67fd   2         2         1       113s

失败

6 搭建kubesphere

6.1 安装

1 安装
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.3.0/kubesphere-installer.yaml
2 下载配置文件
wget https://github.com/kubesphere/ks-installer/releases/download/v3.3.0/cluster-configuration.yaml
3 更改配置文件
vim cluster-configuration.yaml 
4 部署配置文件
kubectl apply -f cluster-configuration.yaml
5 查看部署过程
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f

6.2 查看

在这里插入图片描述

安装完成,虽然报错但可以正常登录(是因为服务器资源不足的原因,过一会会变好)

6.3 登录

在这里插入图片描述

7 用kubesphere部署

7.1 关联coding制品仓库

  1. 获取coding制品仓库的配置令牌
  2. kubesphere中创建秘钥
    配置-保密字典-创建
    在这里插入图片描述

7.2 创建工作负载-部署(deployment)

应用负载-工作负载-创建
在这里插入图片描述

成功!

8 创建服务来访问应用(NodePort方式)

8.1 kubesphere创建service

kubesphere-应用负载-服务-创建
在这里插入图片描述

8.2 访问

在这里插入图片描述

失败!

9 更改源码

9.1 更改源码依赖的版本

python改为3.9版本
在这里插入图片描述

9.2 构建计划制作镜像推送到制品仓库

在这里插入图片描述

10 kubesphere重新创建dp和svc

在这里插入图片描述
在这里插入图片描述

11 访问

在这里插入图片描述

可以访问,并且可以正常下载。

至此,实践成功!

源码由已经开源至我的github,若对您有所帮助还望不吝啬您的star,开放交流才能进步!

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

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

相关文章

【算法的复杂度】

算法的时间复杂度和空间复杂度一、算法效率二、时间复杂度1. 时间复杂度的概念2. 大O的渐进表示法3. 常见时间复杂度计算举例三、空间复杂度一、算法效率 算法在编写成可执行程序后&#xff0c;运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏&#xff0c;一…

采用多种方式实现项目的查询多级缓存(六)

4.7.Nginx本地缓存 现在&#xff0c;整个多级缓存中只差最后一环&#xff0c;也就是nginx的本地缓存了。如图&#xff1a; 4.7.1.本地缓存API OpenResty为Nginx提供了shard dict的功能&#xff0c;可以在nginx的多个worker之间共享数据&#xff0c;实现缓存功能。 1&#xf…

【创建者模式】原型模式

文章目录优秀借鉴1、简介2、结构3、浅拷贝和深拷贝4、浅拷贝实现4.1、实现步骤4.2、结果分析5、深拷贝思路5.1、clone方法5.2、序列化与反序列化6、应用场景优秀借鉴 什么是原型模式&#xff08;Prototype&#xff09;&#xff1f;应用场景是什么&#xff1f; 【设计模式】原…

PointNN:一种无参数化的高效点云特征提取方法

前言 本文需要一些三维点云相关基础&#xff0c;非常适合深蓝学院修过相关课程的同学阅读。 点云处理从最早期的手工设计特征&#xff0c;到之后渐渐有一些深度学习的尝试&#xff0c;经历了 multi-view或者3D卷积等等的混沌时期&#xff0c;知道 pointnet 的横空出世&#x…

微服务治理框架(Istio)的认证服务与访问控制

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/130152887 一、认证服务 1.1、基于JWT的认证 在微服务架构下&#xff0c;每个服务是无状态的&#xff0c;由于服务端需要存储客户端的登录状态&#xff0c;因此传统的session认证方式在微服务中不再适…

分享:前端开发使用基于 ChatGPT 的各类 AI Copilot 辅助开发

前言 现在谁还没听过 ChatGPT&#xff0c;通没通网我不确定&#xff0c;但一定不是搞开发的 网上各种教注册OpenAI账号的、卖key的&#xff0c;然后就可以去各类基于ChatGPT api的插件、应用使用。但是这类都属于不合规的方式&#xff0c;这里不推荐 虽然因为种种原因&#x…

nuxt.js - 【最新】简单快捷的 element ui 组件库的主题色更改,批量统一覆盖替换解决方法,无需npm装包。(适用于新手小白的方法,很简单)

效果图 最新解决方案,简单便捷且不用npm安装任何第三方包就能搞定。 原来的主题色是蓝色 ,可以通过本篇博客提供的方法,统一变成其他主题颜色,比如下面的紫色: 下面就是真实的运行效果,保证可行~ 这样就不用每个组件单独去写样式覆盖颜色了! 定制主

【C++】STL理解【容器】

【C】STL理解【容器】 1. STL概念引入 长久以来&#xff0c;软件界一直希望建立一种可重复利用的东西&#xff0c;以及一种得以制造出”可重复运用的东西”的方法&#xff0c;从函数(functions)&#xff0c;类别(classes),函数库(function libraries),类别库(class libraries…

Python中的type与isinstance的区别

Python中的type()函数和isinstance()函数是两个常用的类型判断函数&#xff0c;它们可以用来判断变量的类型&#xff0c;接下来让我们一起来看一下它们的用法。type()函数type()函数用于获取一个变量的类型&#xff0c;它的语法是&#xff1a;type(变量)。调之后会返回变变量的…

关于修改压缩包内的文件(Excel...)内容的解决方法

关于修改压缩包内的文件&#xff08;Excel…&#xff09;内容的解决方法 前提&#xff1a; &#x1f4a9; 如果能在压缩前就修改完成就不需要修改压缩包内的文件 &#x1f4a9; 如果能在压缩前就修改完成就不需要修改压缩包内的文件 &#x1f4a9; 如果能在压缩前就修改完成…

通讯框架与Netty

一、网络通讯基础 1、OSI七层模型 2、一个域名底层是如何解析 浏览器访问域名&#xff0c;根据域名先从本地host文件C:\Windows\System32\drivers\etc\hosts文件 查找匹配对应的ip与域名&#xff0c;如果本地Host文件 没有的情况下&#xff0c;则联网去电信运营商查找。 3、什…

拉曼光谱的airPLS处理算法原理及MATLAB示例

一、拉曼光谱及airPLS算法 拉曼光谱被称作物质的“指纹谱”&#xff0c;能够表征分子的特征官能团&#xff0c;具有极高的特异性&#xff0c;在检测传感领域有极大的应用前景。但拉曼散射强度低&#xff0c;在实际的检测应用过程中还会受到噪声的影响。 为减少拉曼光谱中的…

程序员的“灵魂笔记本“:五款高效笔记软件推荐

大家好&#xff0c;我是 jonssonyan。作为一名程序员&#xff0c;我们经常需要记录和整理大量的代码、知识和项目信息&#xff0c;以便在日后能够高效地进行查阅和复用。而好用的笔记软件则成为了我们的"灵魂笔记本"&#xff0c;帮助我们提高工作效率。在这篇文章中&…

十一、存储技术基础

&#xff08;一&#xff09;独立磁盘冗余阵列RAID RAID级别 特点 需要磁盘 磁盘利用率 容错性 冗余性 热备盘选项 典型应用 RAID0 条带 2 全部 无 无 无 无故障的迅速读写&#xff0c;要求安全性不高&#xff0c;如图形工作站等 RAID1 镜像 2 50% 有 复制…

代码随想录_二叉树_leetcode112、113

leetcode112 路径总和 112. 路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返…

【血泪建议】软件测试岗位现状,可惜之前没人告诉我,肠子都晦青了....

谈到现状&#xff0c;国内的软件测试行情目前呈现了两极分化的极端情况。 一个是早期的手工测试人员吐槽工作不好做&#xff0c;即使有工作也是外包&#xff0c;而且薪资太低&#xff1b;一方面是很多互联网企业感叹自动化测试人才难找&#xff0c;有技术的自动化测试工程师&a…

Linux中执行命令

目录 一、命令格式 二、查看命令帮助 三、date命令 四、timedatectl命令 五、查看目录下的文件&#xff1a;ls&#xff08;list&#xff09; 一、命令格式 命令格式&#xff1a;主命令 选项 参数&#xff08;操作对象&#xff09; 命令分为两类&#xff1a; 内置命…

要刹车?生成式AI迎新规、行业连发ChatGPT“警报”、多国考虑严监管

4月13日消息&#xff0c;据中国移动通信联合会元宇宙产业工作委员会网站&#xff0c;中国移动通信联合会元宇宙产业工作委员会、中国通信工业协会区块链专业委员会等&#xff0c;共同发布“关于元宇宙生成式人工智能&#xff08;类 ChatGPT&#xff09;应用的行业提示”。提示内…

wmv格式的视频怎么转成mp4,4种方法简单易学

你知道wmv格式的视频怎么转成mp4吗&#xff1f;wmv和mp4都是视频文件格式&#xff0c;wmv格式是由微软开发的一种数字容器格式&#xff0c;它主要适用于电脑客户端。但由于其兼容性不佳&#xff0c;可能导致无法播放或出现错误。相比之下&#xff0c;mp4格式具有更广泛的兼容性…

Maven项目的JDK版本不一致引发的问题

1.运行提示java: 错误: 不支持发行版本 5&#xff08;改成JDK8&#xff09; 2.运行提示java&#xff1a;-source 8 中不支持 instanceof 中的模式匹配(改成JDK17) 解决方案&#xff08;以JDK8为例&#xff09; 1.普通Maven项目 通过指定Maven插件的JDK版本解决 <build>…