部署你的第一个应用

🗓️实验环境

OS名称Microsoft Windows 11 家庭中文版
系统类型x64-based PC
Docker版本Docker version 24.0.6, build ed223bc
minikube版本v1.32.0

🤓FastAPI 构建应用

#基于fastapi快速创建一个项目
rkun1@LAPTOP-TUS5FU0D MINGW64 /
$ mkdir k8s-apprkun1@LAPTOP-TUS5FU0D MINGW64 /
$ cd k8s-app/#创建虚拟环境
rkun1@LAPTOP-TUS5FU0D MINGW64 /k8s-app
$ python -m venv ./venv#激活
rkun1@LAPTOP-TUS5FU0D MINGW64 /k8s-app
$ source ./venv/Scripts/Activate#安装库
(venv)
rkun1@LAPTOP-TUS5FU0D MINGW64 /k8s-app
$ pip install fastapi(venv)
rkun1@LAPTOP-TUS5FU0D MINGW64 /k8s-app
$ pip install uvicorn #web服务器#记录依赖库
rkun1@LAPTOP-TUS5FU0D MINGW64 /k8s-app
$ pip freeze >> requirements.txt  

https://fastapi.tiangolo.com/#create-it
参考官方文档:

rkun1@LAPTOP-TUS5FU0D MINGW64 /k8s-app
$ vim main.py

main.py

from typing import Unionfrom fastapi import FastAPIapp = FastAPI()@app.get("/")
def read_root():return {"Hello": "World"}@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):return {"item_id": item_id, "q": q}

启动应用:

rkun1@LAPTOP-TUS5FU0D MINGW64 /k8s-app
$ uvicorn main:app --reload
INFO:     Will watch for changes in these directories: ['C:\\Serve\\Git\\k8s-app']
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [10408] using StatReload
INFO:     Started server process [7256]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

访问:
image.png

🤡容器化应用

k8s可以运行容器,所以我们要将应用容器化

Dockerfile文件

# python基础镜像
FROM python:3.9# 设置当前工作目录到/code 我们将requirements.txt和app目录放置在这
WORKDIR /codeCOPY ./requirements.txt /code/requirements.txt# 安装依赖
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt# 复制
COPY ./app /code/app# 运行
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]

查看下目录结构:

rkun1@LAPTOP-TUS5FU0D MINGW64 /k8s-app
$ tree -L 1
.
|-- Dockerfile
|-- app
|-- requirements.txt
`-- venv

制作docker image:

rkun1@LAPTOP-TUS5FU0D MINGW64 /k8s-app
$ docker build -t k8s-fast-api .

测试运行一下:

rkun1@LAPTOP-TUS5FU0D MINGW64 /k8s-app
$ docker run -p 8000:80 k8s-fast-api
INFO:     Started server process [1]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

再次访问:
image.png

👾推送到DockerHub

https://hub.docker.com/
创建一个仓库:
image.png
image.png
image.png

rkun1@LAPTOP-TUS5FU0D MINGW64 /k8s-app   #打标签
$ docker build -t rkun422/k8s-images-repo:0.0.1 .#推送
rkun1@LAPTOP-TUS5FU0D MINGW64 /k8s-app
$ docker push rkun422/k8s-images-repo:0.0.1

image.png

🤖创建Kubernetes集群

https://dashboard.civo.com/login
可以在云上部署Kubernetes集群,也可以在本地操作
这里我使用Windows本地搭建的minikube
https://minikube.sigs.k8s.io/docs/

👽定义你的集群资源

#创建目录  定义k8s集群资源在这个目录下
rkun1@LAPTOP-TUS5FU0D MINGW64 /k8s-app
$ mkdir kubernetes

https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/deployment/
在部署之前首先要创建集群拉取镜像时的Secret
具体请参考:
https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/pull-image-private-registry/#create-a-secret-by-providing-credentials-on-the-command-line

😎Deployment

deployment.yml
注意镜像仓库是你自己指定的

apiVersion: apps/v1
kind: Deployment
metadata:name: fast-apilabels:app: fast-api
spec:replicas: 3selector:matchLabels:app: fast-apitemplate:metadata:labels:app: fast-apispec:containers:- name: fast-apiimage: rkun422/k8s-images-repo:0.0.1ports:- containerPort: 80imagePullSecrets:- name: repo-key   #你创建的secret

🧐Service

Servcie可以提供一个固定的地址让我们去访问Pod
https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/
service.yml

apiVersion: v1
kind: Service
metadata:name: fast-api
spec:selector:app: fast-apiports:- protocol: TCPport: 80targetPort: 80

👻部署资源进入集群

rkun1@LAPTOP-TUS5FU0D MINGW64 /k8s-app/kubernetes
$ pwd
/k8s-app/kubernetes
(venv)
rkun1@LAPTOP-TUS5FU0D MINGW64 /k8s-app/kubernetes
$ kubectl apply -f ./

查看Pod:

$ kubectl get pod
NAME                        READY   STATUS    RESTARTS   AGE
fast-api-5cbcbcfc56-b9whd   1/1     Running   0          6m19s
fast-api-5cbcbcfc56-bwf7v   1/1     Running   0          6m19s
fast-api-5cbcbcfc56-j9zw5   1/1     Running   0          6m19s

查看Service:

rkun1@LAPTOP-TUS5FU0D MINGW64 /k8s-app/kubernetes
$ kubectl get svc -o wide
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE    SELECTOR
fast-api     ClusterIP   10.108.66.181   <none>        80/TCP    7m8s   app=fast-api
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP   10d    <none>

对一个Pod进行端口转发:

$ kubectl port-forward pods/fast-api-5cbcbcfc56-b9whd 80:80
Forwarding from 127.0.0.1:80 -> 80
Forwarding from [::1]:80 -> 80
Handling connection for 80
Handling connection for 80

浏览器访问:
image.png
通过Service访问:

rkun1@LAPTOP-TUS5FU0D MINGW64 ~
$ minikube service fast-api --url
W1121 22:07:50.931444   22028 main.go:291] Unable to resolve the current Docker CLI context "default": context "default": context not found: open C:\Users\rkun1\.docker\contexts\meta\37a8eec1ce19687d132fe29051dca629d164e2c4958ba141d5f4133a33f0688f\meta.json: The system cannot find the path specified.
😿  service default/fast-api 没有 NodePort
http://127.0.0.1:55001
❗  因为你正在使用 windows 上的 Docker 驱动程序,所以需要打开终端才能运行它。

image.png
说明Service配置正确,后续可以配置Ingress对进入的流量进行路由

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

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

相关文章

1688 API接口测试指南

本文为您提供1688 API接口的测试指南。我们将介绍1688 API的基本概念&#xff0c;详解测试步骤&#xff0c;并为您提供一系列的最佳实践&#xff0c;以确保您在与1688平台进行API交互时能够获得最佳的效果和稳定性。 一、了解1688 API 1688 API是1688平台为开发者提供的一套用…

数学建模之拟合及其代码

发现新天地&#xff0c;欢迎访问Cr不是铬的个人网站 引言 与插值问题不同&#xff0c;在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是寻求一个函数&#xff08;曲线&#xff09;&#xff0c;使得该曲线在某种准则下与所有的数据点最为接近&#xff0c;即曲线拟合…

基于跳蛛算法优化概率神经网络PNN的分类预测 - 附代码

基于跳蛛算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于跳蛛算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于跳蛛优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…

7_画图常用代码

plt.figure(dpi200) # 设置 dpi 为 200&#xff08;可以根据需要调整这个值&#xff09;

数据结构学习笔记——多维数组、矩阵与广义表

目录 一、多维数组&#xff08;一&#xff09;数组的定义&#xff08;二&#xff09;二维数组&#xff08;三&#xff09;多维数组的存储&#xff08;四&#xff09;多维数组的下标的相关计算 二、矩阵&#xff08;一&#xff09;特殊矩阵和稀疏矩阵&#xff08;二&#xff09;…

从权限跳转看Activity的data android:scheme

在应用申请悬浮窗权限的时候&#xff0c;可以跳转到相应的设置界面&#xff0c;并且自动切换到应用的条目&#xff0c;高亮显示一下&#xff0c; android悬浮窗权限怎么申请 在Android中&#xff0c;要申请悬浮窗权限&#xff0c;需要以下步骤&#xff1a; 在 AndroidManifes…

hp惠普Victus Gaming Laptop 15-fa1025TX/fa1005tx原装出厂Win11系统ISO镜像

光影精灵9笔记本电脑原厂W11系统22H2恢复出厂时开箱状态一模一样 适用型号&#xff1a;15-fa1003TX&#xff0c;15-fa1005TX&#xff0c;15-fa1007TX&#xff0c;15-fa1025TX 链接&#xff1a;https://pan.baidu.com/s/1fBPjed1bhOS_crGIo2tP1w?pwduzvz 提取码&#xff1a…

每天一道算法题(十一)——滑动窗口最大值_困难(中等)

文章目录 1、问题2、示例3、解决方法&#xff08;1&#xff09;方法1——双指针 总结 1、问题 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗…

c++ 函数的申明

1 一个cpp中 两种情况 1.1 定义 使用 1.2 声明 使用 定义 2 按 定义 后 直接使用的顺序 不用 声明 函数 #include <iostream> using namespace std;int max(int a, int b) {int max a>b?a:b;return max; }int main() {int a 1;int b 2;cout << max(a, b…

解决vue中引入天地图显示不全问题,设置setTimeout即可解决!

index.html中引入天地图api <script type"text/javascript" src"https://api.tianditu.gov.cn/api?v4.0&tk你的key"></script>map.vue中初始化天地图 //初始化天地图 initTMap() {const T window.T;// 3.初始化地图对象this.tMap new…

flink1.13.6版本的应用程序(maven版)

问题 想要一个指定flink版本的java计算任务hello world最简工程。 解决 mvn archetype:generate \-DarchetypeGroupIdorg.apache.flink \-DarchetypeArtifactIdflink-quickstart-java \-DarchetypeVersion1.13.6这里直接使用官方mave模版工程&#xff0c;指…

系统架构设计:13 论基于构件的软件开发

论基于构件的软件开发 软件系统的复杂性不断增长、软件人员的频繁流动和软件行业的激烈竟争迫使软件企业提高软件质量、积累和固化知识财富,并尽可能地缩短软件产品的开发周期。 集软件复用、分布式对象计算、企业级应用开发等技术为一体的“基于构件的软件开发”应运而生,…

LeetCode 2304. 网格中的最小路径代价:DP

【LetMeFly】2304.网格中的最小路径代价&#xff1a;DP 力扣题目链接&#xff1a;https://leetcode.cn/problems/minimum-path-cost-in-a-grid/ 给你一个下标从 0 开始的整数矩阵 grid &#xff0c;矩阵大小为 m x n &#xff0c;由从 0 到 m * n - 1 的不同整数组成。你可以…

【python基础(二)】列表详解

文章目录 一. 访问列表元素二. 使用列表中的各个值三. 修改、添加和删除元素1. 修改列表元素2. 在列表中添加元素3. 从列表中删除元素 四.组织列表1. sort()对列表永久排序2. sorted()对列表临时排序3. 倒着打印列表4. 确定列表的长度 列表由一系列按特定顺序排列的元素组成。可…

Django框架之Cookie和Session和CBV加装饰器的三种方法

【一】Cookie与Session Cookie和Session是用来在Web应用程序中跟踪用户会话数据的两种常用技术。 【1】Cookie和Session的发展史 【1】Cookie的发展史&#xff1a; 1994年&#xff0c;网景通信公司推出了第一个浏览器Cookie技术。Cookie是存储在用户计算机上的小型文本文件…

redis五种基本数据类型

redis存储任何类型的数据都是以key-value形式保存&#xff0c;并且所有的key都是字符串&#xff0c;所以讨论基础数据结构都是基于value的数据类型 常见的5种数据类型是&#xff1a;String、List、Set、Zset、Hash 一) 字符串(String) String是redis最基本的类型&#xff0c;v…

linux日志不循环问题诊断

有一台Linux虚拟机的messages日志文件自2023年7月下旬开始没有按周为周期重新生成新的日志&#xff0c;一直累积在同一个messages文件中&#xff0c;如下所示&#xff1a; [root logrotate.d]# ls -l /var/log|grep me -rw-r--r-- 1 root root 107170 Nov 15 1…

地图导航测试用例,你get了吗?

地图导航是我们经常使用的工具&#xff0c;能帮助我们指引前进的方向。 接下来&#xff0c;会从功能测试、UI测试、兼容测试、安全测试、网络测试、性能测试、易用性测试、文档和国际化语言测试8个方面来编写地图导航测试用例。 一 功能测试 输入起点和终点&#xff0c;验证…

python3.7升级为更高版本并迁移库

创建虚拟环境 # 在进入当前的虚拟环境【py3.7的环境】使用pip导出全部包txt文件 pip freeze > all_package.txt# 创建虚拟环境 conda create -n py39 python3.9# 激活新创建的虚拟环境 conda activate py39# 用 pip 一键文件安装 # pip install --help 查看-r命令的作用 # …

LeetCode48旋转图像

思路是沿对角线交换元素,之后沿矩阵中线交换元素 参考链接 &#x1f517;:【LeetCode 每日一题】48. 旋转图像 | 手写图解版思路 代码讲解-哔哩哔哩】 class Solution {public void rotate(int[][] matrix) {int i0,j0;if(matrixnull){return;}int n matrix.length;// int[]…