部署你的第一個應用

🗓?實驗環境

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.pswp.cn/news/160724.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160724.shtml
英文地址,請注明出處:http://en.pswp.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[]…