docker容器技術、k8s的原理和常見命令、用k8s部署應用步驟

容器技術

容器借鑒了集裝箱的概念,集裝箱解決了什么問題呢?無論形狀各異的貨物,都可以裝入集裝箱,集裝箱與集裝箱之間不會互相影響。由于集裝箱是標準化的,就可以把集裝箱整齊擺放起來,裝在一艘大船把他們都運走。有了集裝箱,就再也不需要為各種貨物單獨準備專門運輸的船了。如果把容器比作集裝箱的話,應用就相當于集裝箱里的貨物。
容器(Container):一種輕量級的虛擬化技術,這種技術允許操作系統上的用戶空間被分割成幾個獨立的單元在內核中運行,彼此互不干擾。這樣一個獨立的空間,就稱之為一個“容器”。
容器為應用軟件及其依賴組件提供了一個資源獨立的運行環境。應用軟件所依賴的組件會被打包成一個可重用的鏡像,鏡像運行環境并不會與主機操作系統共享內存、CPU和硬盤空間,由此也保證了容器內部的進程與容器外部進程的獨立關系。
舉個例子,一個操作系統,可以類比成一套公寓,那么容器就相當于公寓中的一個房間,大家共享同一個客廳,廚房和衛生間。但是房間和房間之間彼此隔離,一個房間里面的人的活動,不會影響到其他房間的住客。房間也有門,因此有一定的安全隔離保障。
容器的技術特點:
? 容器是自包含的。它打包了應用程序及其所有依賴,可以直接運行。
? 容器是可移植的。可以在幾乎任何地方以相同的方式運行。這就可以確保應用在開發環境、測試環境、生產環境等都有完全一樣的運行環境。
? 容器是輕量級的。占用資源很少,可以秒級啟動。
? 容器是互相隔離的。同一主機上運行的多個容器,不會互相影響。
這兩種架構,一個很直觀的對比結果是,容器的運行不需要再額外安裝虛擬機操作系統。可見,容器是一種比虛擬機更輕量級的虛擬化技術,支持秒級啟動具備更好的快速擴展能力,具備更好的跨平臺遷移能力。當然也由于這個原因,容器的隔離性上不如虛擬機。兩者主要差異如下:
? 虛擬機OS占用了較多資源,一個虛擬機基本是GB 級的,一個容器可小至幾MB。
? 虛擬機的啟動時間一般是分鐘級的,而容器的啟動時長是毫秒級的。
? 由于容器的輕量級,它具備了更好的快速擴展能力。
容器比虛擬機具備更好的跨平臺遷移能力,如虛擬機無法從Vmware遷移至KVM。

docker

Docker是一個開源的應用容器引擎,它實現了容器化技術的一種具體形式。
Docker核心概念
Docker 有三大核心概念,分別是容器(Container)、鏡像(Image)和倉庫(Repository)。
? 鏡像:類似虛擬機的鏡像,通俗的理解就是安裝文件,相當于是容器的模板,可以根據不同的鏡像來創建不同的容器。鏡像和容器的關系可以理解為面向對象中類和實例對象的關系。
? 容器:類似一個輕量級的沙箱,容器是根據鏡像創建的應用運行實例,具體運行應用程序的一個進程,可以將其啟動、開始、停止、刪除,而這些容器都是相互隔離、互不可見的。
? 倉庫:類似代碼倉庫,是 Docker 集中存放鏡像文件的場所。倉庫有本地鏡像倉庫 Docker-Registry 和公共鏡像倉庫 Docker Hub,平時使用本地倉庫的鏡像,沒有的話可以去公共鏡像倉庫下載。
可以用編程中面向對象的概念來做類比:鏡像可以看成一個類,容器可以看做是類的實例化對象。一個類可以有多個對象。同理,一個鏡像可以有多個容器。容器是由鏡像實例化而來。簡單來說,鏡像是文件,容器是進程,倉庫是保存鏡像的地方。
通過Docker命令,運行一個容器一般情況下只需要三步:

  1. pull:從鏡像倉庫中將相應的鏡像下載下來;
  2. list:當鏡像下載完成之后就可以通過docker images 來查看本地鏡像,會列出一個完整的鏡像列表,可以在列表中選中想要的鏡像;
  3. run:當選中鏡像之后,就可以通過 docker run 來運行這個鏡像,得到想要的容器。當然可以通過多次運行得到多個容器。
    采用容器技術搭建并運行企業網站,需要經歷三個主要過程:
    ? 構建(build):把應用代碼和運行環境一起,制作成鏡像文件
    ? 發布(release):將鏡像文件發布到鏡像倉庫。
    運行(run):從鏡像倉庫中獲取鏡像并運行。

docker和k8s的關系

Docker 和 Kubernetes(通常縮寫為 k8s)是容器化技術領域中兩個互補的工具,它們共同工作以提供強大的應用程序部署和管理解決方案。

Docker:

Docker 是一個開源的容器化平臺,它允許開發者將應用及其依賴打包到一個輕量級、可移植的容器中。
容器與底層系統隔離,確保了應用程序在不同環境中的一致性。
Docker 提供了容器的創建、運行、分發和管理的工具,如 Docker Engine 和 Docker Hub。
Kubernetes:

Kubernetes 是一個開源的容器編排系統,用于自動化部署、擴展和管理容器化應用程序。
它提供了高級的集群管理功能,包括服務發現、負載均衡、自我修復(自動替換失敗的容器)、存儲編排等。
Kubernetes 允許在集群中運行和管理成千上萬的容器,支持服務的彈性伸縮和高可用性。
Docker 和 Kubernetes 的關系:

容器化:Docker 用于創建容器化的應用程序,而 Kubernetes 用于管理這些容器的生命周期和部署。
互補性:Docker 提供了容器的運行時環境,而 Kubernetes 則提供了容器的管理和編排。
生態系統:Kubernetes 支持多種容器運行時,包括 Docker,但也支持其他如 containerd、CRI-O 等。
部署和管理:Docker 可以獨立使用來運行和管理單個容器,而 Kubernetes 提供了大規模容器部署和管理的能力。
服務網格:在 Kubernetes 上,Docker 容器可以作為 Pod 運行,Kubernetes 負責 Pod 的調度、網絡、存儲等。
社區和企業支持:兩者都有龐大的社區和企業支持,Docker 由 Docker Inc. 維護,而 Kubernetes 由 Cloud Native Computing Foundation (CNCF) 維護。
總的來說,Docker 為應用程序提供了容器化的基礎,而 Kubernetes 則為這些容器化的應用提供了一個強大的運行平臺,兩者結合使用可以實現高效的持續集成和持續部署(CI/CD)流程,以及在云環境中的彈性伸縮和高可用性部署。

K8s

容器編排是指自動化容器的部署、管理、擴展和聯網。通過容器編排,可以構建跨多個容器的應用服務、跨集群調度容器、擴展這些容器,并持續管理它們的健康狀況。容器編排給容器技術帶來了巨大的價值,包括:
? 自動化部署:支持根據副本數量,回滾,重啟等策略自動部署容器。
? 服務發現與負載均衡:自動發現增加的容器,并進行流量的負載均衡。
? 自動化容器恢復:自動對容器進行健康檢查,并根據策略進行重啟。
? 彈性伸縮:支持工作節點、容器的自動擴縮容。
一個容器編排平臺的核心功能:首先可以自動生成容器實例,并且生成的容器可以跨服務器的,幫助提高可用性和性能,同時還有健康檢查、容錯、可擴展、網絡、服務發現、滾動升級等功能,可以很好地解決需求與資源的匹配編排問題。
容器編排平臺的市場競爭曾經非常激烈,主流的有三個:Docker Swarm、Mesos Marathon和Kubernetes。它們各有特點,但同時滿足上面上述能力的,只有Kubernetes。
Kubernetes 設計思想
Kubernetes 基于API管理一切的思想,采用聲明式即“面向結果”的API,圍繞 etcd(分布式存儲與協調數據庫) 構建出來的一套 “面向終態” 的編排體系。
當用戶向 Kubernetes 提交了一個 API 對象(Kubernetes Object)的期望狀態(Spec)之后,Kubernetes 會負責保證整個集群里各項資源的當前狀態(Status),都與 API 對象描述的需求相一致。更重要的是,這個保證是一項 “無條件的”、“沒有期限” 的承諾:對于每個保存在 etcd 里的 API 對象,Kubernetes 都通過啟動一種叫做 “控制器模式”(Controller Pattern)的無限循環,不斷對 etcd 里的 API 對象的變化進行監視(Watch),然后執行控制器(Controller)里定義的編排動作的響應邏輯,進行調諧,最后確保整個集群的狀態與 API 對象的描述一致。
為了實現“面向終態”的管理,支持自動化部署、擴縮和管理容器應用,Kubernetes采用了控制平面和計算平面分離的架構。控制平面是整個集群的大腦,負責控制、調度集群資源;計算平面負責運行容器化應用,是控制平面調度的對象,通過增加或減少工作節點實現容器集群處理能力的擴縮。控制平面由至少一個管理節點(Master節點)組成,通常會采用三個管理節點組成高可用集群(一個管理節點提供服務,剩下兩個管理節點為備用節點,當管理節點不可用時,從備用節點中自動選舉一個出來成為管理節點)。計算平面則由多個工作節點(Node節點)組成。

K8S集群分為Master節點和Node節點,Master節點負責調度分配任務,Node節點接受Master調度進行工作。
1.1 Master節點組件
/1. API Server
集群的統一入口,各組件協調者,以RESTful API方式提供接口服務,所有對象資源的增刪查改和監聽操作都交給API Server處理后再提交給Etcd存儲。
2. Controller Manager
負責維護集群的狀態,比如故障檢測、自動擴展、滾動更新等。一個資源對應一個控制器,而Controller Manager就是負責管理這些控制器的。
工作負載是一種Controller,在Kubernetes中還有Node Controller等其他多種控制器。每種控制器都是一個智能系統,通過API Server提供的(List-Watch)接口實時監控集群中資源對象的變化,當資源對象因某些原因發生狀態變化時,Controller會執行相應邏輯使其最終狀態調整到期望狀態。比如:某個Node意外宕機時,Node Controller會及時發現此故障并執行自動化修復流程,確保集群始終處于預期的工作狀態。
每種Controller都負責一種特定的資源控制器,Controller Manager是Kubernetes中各種Controller的管理者,是集群內部的管理控制中心,也是Kubernetes自動化功能核心。
3. Scheduler
負責資源的調度,按照預定的調度策略將Pod調度到相應的機器上。
4.etcd
分布式鍵值存儲系統,用于保存群集狀態數據,比如Pod、Service等對象信息。
1.2 Node組件
Node節點(工作節點)是Kubernetes集群中的工作節點,Node節點上的工作由Master節點進行分配,比如當某個Node節點宕機時,Master節點會將其上面的工作轉移到其他Node節點上。Node節點在集群中主要負責如下任務:
? 負責管理所有容器(Container)。
? 負責監控/上報所有Pod的運行狀態。
一個Node節點主要包含三個組件:kubelet、kube-proxy、Container Runtime。

  1. kubelet
    kubelet是Master在Node節點上的Agent,管理本機運行容器的生命周期,比如創建容器、Pod掛載數據卷、下載secret、獲取容器和節點狀態等工作。kubelet將每個Pod轉換成一組容器。
  2. kube-proxy
    為Service提供cluster內部的服務發現和負載均衡。Service是通過Selector選擇的一組Pods的服務抽象,提供了服務的負載均衡和反向代理的能力。實現 Service 負載均衡和反向代理功能,是通過kube-proxy實現的。kube-proxy 運行在每個節點上,監聽 API Server 中服務對象的變化,通過管理 iptables 來實現網絡的轉發。
    Service的負載均衡實現的過程共分為五步,如下:
  3. 運行在每個Node節點的kube-proxy會實時的watch Service和Endpoints(IP+端口)對象, 當用戶在Kubernetes集群中創建了含有Label的Service之后,同時會在集群中創建出一個同名的Endpoints對象,用于存儲Service下的Pod IP。
  4. 當每個Node節點的kube-proxy感知到Service和Endpoints的變化之后,會在各自的Node節點上打開代理端口,并設置相關的iptables或IPVS轉發規則。
  5. 客戶端訪問Service的ClusterIP。
  6. 客戶端請求會經過iptables/IPVS,會被重定向到kube-proxy的代理端口。IPVS模式的調度由IPVS完成,其他功能仍是iptables實現。
  7. kube-proxy將請求發送到真實的后端Pod。

在這里插入圖片描述

Kubernetes中如何實現多個環境的隔離?
在Kubernetes容器集群中,同一類型的資源名稱是唯一的。在實際中,我們往往需要將不同業務、不同的項目、不同的環境進行隔離管理,這就需要通過命名空間Namespace進行分區管理。
Namespace 是用來做集群內部的邏輯隔離的,它包括鑒權、資源管理等。Kubernetes 的每個資源,比如 Pod、Deployment、Service,都屬于一個 Namespace,同一個 Namespace 中的資源命名唯一,不同的 Namespace 中的資源可以重名。在一個Kubernetes集群中可以擁有多個命名空間,它們在邏輯上彼此隔離。
不過,Kubernetes也有一些資源隸屬于集群級別的,如Node、Namespace和Persistent Volume等,不屬于任何名稱空間,所以這些資源對象的名稱必須全局唯一。

在K8s 中部署一個前后端應用

編寫Dockerfile
拷貝前端工程dist目錄至/frontend,并進行目錄授權
from nginx
copy ./dist /frontend
run chown nginx.nginx /frontend -R
copy nginx.conf /etc/nginx/conf.d/default.conf
編寫nginx.conf文件
server{
listen 80;
server_name localhost;
root /frontend;
index index.html index.htm;

 location /login {try_files $uri $uri/ /login.html;}

}

backend-dp.yaml
由于我們服務是無狀態服務,使用Deployment進行部署,Deployment擁有更加靈活強大的升級、回滾功能,并且支持滾動更新

apiVersion: apps/v1
kind: Deployment
metadata:
name: backend
spec:
selector:
matchLabels:
app: backend
replicas: 1
template:
metadata:
labels:
# service 會根據此標簽來查找此pod
app: backend
version: latest
spec:
containers:
- name: backend
image: “dweizhao/backend:latest”
imagePullPolicy: Always
backend-svc.yaml
Service相當于Spring cloud中Ribbon的作用,提供了服務發現和負載均衡的功能,而不用關心具體服務實例有多少個,在 k8s的服務實例就是Pod,這里我們使用ClusterIP類型,因為是通過Ingress在集群內訪問,通過 app:backend標簽,來查找對應pod,所以 pod 的label必須包含app:backend
apiVersion: v1
kind: Service
metadata:
name: backend
spec:
type: ClusterIP
ports:
- name: backend-http
port: 8080
targetPort: 8080
protocol: TCP
selector:
# 根據標簽查找 pod
app: backend
之后在服務器上創建命名空間:
kubectl create namespace k8sdemo
部署:
kubectl create namespace k8sdemo && kubectl apply -f backend-dp.yaml -f backend-svc.yaml -f frontend-dp.yaml -f frontend-svc.yaml -f ingress.yaml -n k8sdemo

k8s常用命令

#查看pods列表,這里主要是看pod狀態
kubectl get pods -n tbds(n后面是namespace)
#查看某個pod的日志
kubectl logs tm-platform-96c9cd9d-w6zr8  -n tbds
#查看pod的詳細信息,這些信息包括了 Pod 的配置、狀態、事件等
kubectl describe pod kubectl logs tm-platform-96c9cd9d-w6zr8  -n tbds 
#在pod中啟動一個交互式shell,可以在這個shell中執行命令
kubectl exec -it tsf-data-gateway-86f59d85-vlvgq(pod名稱) -n tbds -- bash
#獲取應用列表
kubectl get app -n tbds
#刪除某個應用
kubectl delete app product-kylin-sp2-es-x86(應用名稱) -n tbds
#獲取容器的configmap
kubectl get -o yaml configmap te-elasticsearch-config(config名稱) -n tbds
#或者這樣寫:
kubectl get cm my-configmap -o yaml
#查看某個secret的值(渲染后的)
kubectl get secret secret-tbdsnew  -o yaml -n default
#查看pod的資源使用情況
kubectl top pod <pod-name> -n <namespace>
#查看所有命名空間
kubectl get namespaces
#創建命名空間
kubectl create namespace tbds
#將base64編碼的字符串進行解碼
echo "dGJkcy1pbWFnZXM=" |base64 --decode

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41548.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41548.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41548.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

瀏覽器插件利器-allWebPluginV2.0.0.14-stable版發布

allWebPlugin簡介 allWebPlugin中間件是一款為用戶提供安全、可靠、便捷的瀏覽器插件服務的中間件產品&#xff0c;致力于將瀏覽器插件重新應用到所有瀏覽器。它將現有ActiveX插件直接嵌入瀏覽器&#xff0c;實現插件加載、界面顯示、接口調用、事件回調等。支持谷歌、火狐等瀏…

Spring Boot+Blockchain:區塊鏈入門Demo

1. 引言 區塊鏈技術近年來迅速發展&#xff0c;其去中心化、不可篡改和透明性等特點吸引了眾多開發者和企業的關注。為了便于理解和應用區塊鏈技術&#xff0c;本文將介紹如何使用Spring Boot集成區塊鏈&#xff0c;構建一個簡單的區塊鏈Demo。 2. 項目準備 2.1 環境要求 在…

MYSQL安裝及環境配置

1.數據庫下載 1.1 瀏覽器下載相應版本&#xff0c;如果相應版本不在此頁&#xff0c;可點擊Archives &#xff0c;然后選擇相應版本 https://dev.mysql.com/downloads/mysql/ 1.2 放置指定目錄&#xff0c;并將其解壓 2.配置數據庫環境變量 2.1 使用電腦win鍵 Q &#xff0c;…

在C++中使用的錯誤處理策略

在C中&#xff0c;錯誤處理是一個重要且復雜的主題&#xff0c;因為它要求開發者在設計和編碼時考慮到程序可能遇到的各種異常情況。C提供了幾種不同的機制來處理錯誤&#xff0c;每種機制都有其適用的場景和優缺點。下面我將概述幾種常見的C錯誤處理策略&#xff1a; 1. 返回…

SQL的時間格式和文本靈活轉換

日期的格式&#xff0c;在日常的數據分析中&#xff0c;常常使用 特別是在按照日、月、年進行匯總分析&#xff0c;使用起來&#xff0c;往往會有差異 如果格式比較復雜&#xff0c;可以考慮進行文本轉化的處理 這里有比較推薦的函數&#xff1a; 1.CONVERT()函數 適用于SQL …

51單片機STC89C52RC——16.1 五項四線步進電機

目的/效果 讓步進電機 正向轉90度&#xff0c;逆向轉90度 一&#xff0c;STC單片機模塊 二&#xff0c;步進電機 2.2 什么是步進電機&#xff1f; 步進電機可以理解為&#xff1a;是一個按照固定步幅運動的“小型機器”。它與普通電機不同點在于&#xff0c;普通電機可以持…

CompletionService

必備知識&#xff1a; 三種創建線程的方式 java線程池 CompletionService是Java并發庫中的一個接口&#xff0c;用于簡化處理一組異步任務的執行和結果收集。它結合了Executor和BlockingQueue的功能&#xff0c;幫助管理任務的提交和完成。CompletionService的主要實現類是Exe…

前端必修技能:高手進階核心知識分享 - CSS 陰影屬性詳解

CSS 涉及設計到陰影的相關內容包括三個方面&#xff1a;box-shadow屬性&#xff08;盒子陰影&#xff09;、 text-shadow屬性&#xff08;文本陰影&#xff09;、drop-shadow濾鏡。 本篇文章旨在詳細介紹和分析三種陰影的具體參數設置和典型用例。 box-shadow屬性&#xff08;…

預防臨床預測模型中可能的“算法歧視”

預防臨床預測模型中可能的“算法歧視” 概要&#xff1a;如果訓練數據中存在性別方面的不均衡&#xff0c;會讓訓練出的模型存在性別方面的“算法歧視”&#xff0c;進而導致某種性別下存在更多的誤診誤治&#xff0c;最終造成醫療資源分配的不公平的倫理問題&#xff0c;導致模…

04.C1W3.Vector Space Models

往期文章請點這里 目錄 Vector Space ModelsWord by Word and Word by DocWord by Document DesignWord by Document DesignVector Space Euclidean DistanceEuclidean distance for n-dimensional vectors Euclidean distance in PythonCosine Similarity: IntuitionCosine S…

STM32-SPI和W25Q64

本內容基于江協科技STM32視頻學習之后整理而得。 文章目錄 1. SPI&#xff08;串行外設接口&#xff09;通信1.1 SPI通信簡介1.2 硬件電路1.3 移位示意圖1.4 SPI時序基本單元1.5 SPI時序1.5.1 發送指令1.5.2 指定地址寫1.5.3 指定地址讀 2. W25Q642.1 W25Q64簡介2.2 硬件電路2…

嵌入式C語言面試相關知識——內存管理(不定期更新)

嵌入式C語言面試相關知識——內存管理&#xff08;不定期更新&#xff09; 一、博客聲明二、自問題目1、嵌入式系統的內存布局是怎么樣的&#xff1f;2、動態內存分配在嵌入式系統中的使用有什么注意事項&#xff1f;3、什么是內存碎片&#xff0c;如何減少內存碎片&#xff1f…

win11自動刪除文件的問題,安全中心提示

win11自動刪除文件的問題&#xff0c;解決方法&#xff1a; 1.點擊任務欄上的開始圖標&#xff0c;在顯示的應用中&#xff0c;點擊打開設置。 或者點擊電腦右下角的開始也可以 2.點擊設置。也可以按Wini打開設置窗口。 3.左側點擊隱私和安全性&#xff0c;右側點擊Windows安全…

我國網絡安全領域有哪些法律法規?主要內容是什么?

1. 背景介紹 網絡信息安全方面的法規在全球范圍內都有相應的立法&#xff0c;我們主要的立法有《網絡安全法》、《密碼法》、《數據安全法》以及《個人信息保護法》。當前也有一些相關的條例和管理辦法&#xff0c;接下來就為大家一一介紹。 2. 法規介紹 在中國&#xff0c;…

多線程(進階)

前言&#x1f440;~ 上一章我們介紹了線程池的一些基本概念&#xff0c;今天接著分享多線程的相關知識&#xff0c;這些屬于是面試比較常見的&#xff0c;大部分都是文本內容 常見的鎖策略 樂觀鎖 悲觀鎖 輕量鎖 重量級鎖 自旋鎖 掛起等待鎖 可重入鎖和不可重入鎖 互斥…

Leetcode 3207. Maximum Points After Enemy Battles

Leetcode 3207. Maximum Points After Enemy Battles 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3207. Maximum Points After Enemy Battles 1. 解題思路 這一題的話其實關鍵在于說是想明白最優策略&#xff0c;事實上這道題的最優策略就是撿著最弱的enemy薅&#xff0c;…

接口測試分析、設計以及實現

接口相關理論 ui功能測試和接口測試哪個先執行&#xff1f;–為什么 結論&#xff1a;接口測試先執行 原因&#xff1a;ui功能測試需要等待前端頁面開發完成、后臺接口開發完后且前端與后端聯調完成。ui功能測試與接口測試的區別&#xff1f; ui功能&#xff1a;功能調用&am…

學習筆記——交通安全分析14

目錄 前言 當天學習筆記整理 5城市主干道交通安全分析 結束語 前言 #隨著上一輪SPSS學習完成之后&#xff0c;本人又開始了新教材《交通安全分析》的學習 #整理過程不易&#xff0c;喜歡UP就點個免費的關注趴 #本期內容接上一期13筆記 當天學習筆記整理 5城市主干道交…

Avalonia中的Property

文章目錄 前言附加屬性樣式屬性直接屬性總結前言 在WPF中, 是可以定義依賴屬性和附加屬性的 依賴屬性: 當您需要單獨創建控件時, 并且希望控件的某個部分能夠支持數據綁定時, 你則可以使用到依賴屬性。 通過DependencyProperty.Register注冊依賴屬性 附加屬性: 這種情況很多,…

【原理+使用】DeepCache: Accelerating Diffusion Models for Free

論文&#xff1a;arxiv.org/pdf/2312.00858 代碼&#xff1a;horseee/DeepCache: [CVPR 2024] DeepCache: Accelerating Diffusion Models for Free (github.com) 介紹 DeepCache是一種新穎的無訓練且幾乎無損的范式&#xff0c;從模型架構的角度加速了擴散模型。DeepCache利…