部署你的第一个应用

news2025/1/19 20:34:23

🗓️实验环境

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-app

rkun1@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 Union

from fastapi import FastAPI

app = 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 /code


COPY ./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-api
  labels:
    app: fast-api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: fast-api
  template:
    metadata:
      labels:
        app: fast-api
    spec:
      containers:
      - name: fast-api
        image: rkun422/k8s-images-repo:0.0.1
        ports:
        - containerPort: 80
      imagePullSecrets:
      - 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-api
  ports:
    - protocol: TCP
      port: 80
      targetPort: 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.coloradmin.cn/o/1239030.html

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

相关文章

Java引用和内部类

引用 引用变量 引用相当于一个 “别名”, 也可以理解成一个指针. 创建一个引用只是相当于创建了一个很小的变量, 这个变量保存了一个整数, 这个整数表示内存中的一个地址. new 出来的数组肯定是在堆上开辟的空间,那么在栈中存放的就是引用,引用存放的的就是一个对象的地址,代表…

ORB-SLAM3在windows11下的编译使用

01 写在前面 近期在学习SLAM&#xff0c;想部署一下ORB-SLAM3&#xff0c;但是自己电脑是win11系统&#xff0c;因此就想着在win11上部署一下。但是网上看了一些教程&#xff0c;有一些博客&#xff0c;但是可能不适合我这种情况把&#xff0c;就很纠结。先说下结果&#xff0…

写单元测试,没你想得那么简单!

前言 单元测试是什么我们就简单介绍一下&#xff1a; 单元测试是针对程序模块&#xff08;软件设计的最小单位&#xff09;来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。 接下来是本人对单元测试的理解和实践。里面没有废话&#xff0c;希望每句话能说到你心…

【数据库】数据库中的检查点Checkpoint,数据落盘的重要时刻

检查点(checkpoint) ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会定…

天空分割技术解决方案

图像处理技术已经成为企业提升用户体验、优化产品和服务的重要工具。美摄科技&#xff0c;作为全球领先的AI图像处理技术提供商&#xff0c;一直致力于研发和应用最先进的技术&#xff0c;以满足企业的各种需求。今天&#xff0c;我们很高兴地向大家介绍我们的新一代产品——美…

git中的分支管理:git branch,git checkout,解决git中的分支冲突的方法【Git学习三】

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;Git等软件工具技术的使用 &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要…

2023感恩节大促:跨境卖家如何借助海外网红营销赢得市场关注

随着全球贸易的日益发展&#xff0c;跨境电商行业变得愈发竞争激烈&#xff0c;各家卖家纷纷寻找新的营销策略以在大促期间脱颖而出。在2023年感恩节即将来临之际&#xff0c;海外网红营销成为许多卖家关注的热点。本文Nox聚星将和大家探讨跨境卖家如何充分利用海外网红营销&am…

《C++ Primer》第9章 顺序容器(三)

参考资料&#xff1a; 《C Primer》第5版《C Primer 习题集》第5版 9.5 额外的string操作&#xff08;P320&#xff09; 9.5.1 构造string的其他方法 const char *cp "hello, world!"; char arr[] { h,\0,i,\0 }; string s1(cp); // s1 "hello, world!…

什么是索引下推

索引下推介绍 索引下推&#xff08;INDEX CONDITION PUSHDOWN&#xff0c;简称 ICP&#xff09;是在 MySQL 5.6 针对扫描二级索引的一项优化改进。总的来说是通过把索引过滤条件下推到存储引擎&#xff0c;来减少 MySQL 存储引擎访问基表的次数以及 MySQL 服务层访问存储引擎的…

CSS伪类选择器详细讲解

前言 伪类选择器在CSS中起到的作用可以说是至关重要的&#xff0c;如果CSS没有伪类选择器&#xff0c;有很多效果都要借助js来完成&#xff0c;这样不仅代码量增加&#xff0c;维护起来你难度也大。这样程序员的工作量大&#xff0c;也违背了CSS诞生的作用&#xff0c;就是提高…

在Spring Boot中使用ECharts绘制数据图表

使用ECharts来完成一些花里胡哨的图表吧&#xff0c;一般这种需求我们在我们的客户端不太常见&#xff0c;但是&#xff0c;我们在后端进行各种数据统计的时候就会发现ECharts的优点了&#xff0c;比如我们常常做的柱状图&#xff0c;折线图&#xff0c;雷达图等可视化形式&…

阿里云发送短信

官方代码如下&#xff1a; // This file is auto-generated, dont edit it. Thanks. package com.aliyun.sample;import com.aliyun.tea.*;public class Sample {/*** 使用AK&SK初始化账号Client* param accessKeyId* param accessKeySecret* return Client* throws Excep…

windows系统安装ubuntu22.04虚拟机

镜像文件准备 镜像文件 官网 企业开源和Linux | Ubuntu 镜像下载地址 https://cn.ubuntu.com/download/server/step1 选择合适的版本下载 虚拟机安装 文件-- 新建虚拟机 选择镜像 修改安装路径 修改大小&#xff0c;最好60g&#xff0c;大一点 设置用户信息 设置虚拟机网络…

【NLP】培训LLM的不同方式

在大型语言模型&#xff08;LLM&#xff09;领域&#xff0c;存在多种具有不同手段、要求和目标的培训机制。由于它们有不同的用途&#xff0c;因此重要的是不要将它们相互混淆并了解它们适用的不同场景。 在本文中&#xff0c;我想概述一些最重要的训练机制&#xff0c;包括预…

技术or管理?浅谈测试人员的未来职业发展

我们在工作了一段时间之后&#xff0c;势必会感觉到自己已经积累了一些工作经验了&#xff0c;会开始考虑下一阶段的职业生涯会如何发展。测试人员在职业生涯中的不确定因素还是不少的&#xff0c;由于其入门门槛不高&#xff0c;不用学习太多技术性知识即可入行&#xff0c;所…

RH850 G3KH异常处理简述

目录 1.概述 2.异常处理后现场恢复 3.异常处理地址识别 4.小结 1.概述 我们首先来看&#xff0c;G3KH的关键寄存器&#xff0c;PSW PSW--Program status word PSW寄存器里有表征程序状态的flag&#xff0c;CPU操作状态的flag。如下 UM---是否是user mode&#xff1b;0--…

Java Spring

文章目录 SpringSpring 是什么&#xff1f;从Spring中获取Beanxml获取注解存储类注解⽅法注解bean命名规则类注解之间的关系 注解获取bean属性注⼊缺点 构造⽅法注⼊Setter 注⼊三种注⼊优缺点分析Resource&#xff1a;另⼀种注⼊关键字同⼀类型多个 Bean 报错处理 获取bean对象…

谈一谈什么是接口测试?怎样做接口测试?

扫盲内容&#xff1a; 1.什么是接口&#xff1f; 2.接口都有哪些类型&#xff1f; 3.接口的本质是什么&#xff1f; 4.什么是接口测试&#xff1f; 5.问什么要做接口测试&#xff1f; 6.怎样做接口测试&#xff1f; 7.接口测测试点是什么&#xff1f; 8.接口测试都要掌…

​极氪,中国传统汽车品牌电动化的样板间

这篇文章早就想写了&#xff0c;因为太忙的原因就一直跳票&#xff0c;正好最近两件事的出现&#xff0c;又触发了想写这篇文章的冲动。 两件事主要是&#xff1a; 一&#xff0c;10 月份各家陆续公布了单月销量以及累计销量&#xff1b; 二&#xff0c;极氪在北京正式发布了 …

CTF靶场搭建及Web赛题制作与终端docker环境部署

♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ 写在前面 ╔═══════════════════════════════════════════════════…