k8s——持久化存儲 PVC

目錄

k8s持久化存儲: PVC

1 k8s PV是什么?

2 k8s PVC是什么?

3 k8s PVC和PV工作原理

4 創建pod,使用pvc作為持久化存儲卷

?三種回收策略詳解?

1、創建nfs共享目錄

2、如何編寫pv的資源清單文件

3、創建pv

更新資源清單文件

查看pv資源

4、創建pvc,和符合條件的pv綁定

更新資源清單文件

查看pv和pvc,STATUS是Bound,表示這個pv已經被pvc綁定了

5、創建pod,掛載pvc

更新資源清單文件

查看pod狀態

測試

創建另一個pod測試

刪除pod-pvc? 的這個pod,發現pvc還是存在的

刪除pvc

刪除pv


k8s持久化存儲: PVC

1 k8s PV是什么?

PersistentVolume(PV)是群集中的一塊存儲,由管理員配置或使用存儲類動態配置。 它是集群中的資源,就像pod是k8s集群資源一樣。 PV是容量插件,如Volumes,其生命周期獨立于使用PV的任何單個pod。

2 k8s PVC是什么?

PersistentVolumeClaim(PVC)是用戶使用存儲的請求。 它類似于pod。Pod消耗節點資源,PVC消耗存儲資源。 pod可以請求特定級別的資源(CPU和內存)。 pvc在申請pv的時候也可以請求特定的大小和訪問模式(例如,可以一次讀寫或多次只讀)。

3 k8s PVC和PV工作原理

PV是群集中的資源。 PVC是對這些資源的請求。

PV和PVC之間的相互作用遵循以下生命周期:

(1)pv的供應方式

可以通過兩種方式配置PV:靜態或動態。

靜態的:

集群管理員創建了許多PV。它們包含可供群集用戶使用的實際存儲的詳細信息。它們存在于Kubernetes API中,可供使用。

動態的:

當管理員創建的靜態PV都不匹配用戶的PersistentVolumeClaim時,群集可能會嘗試為PVC專門動態配置卷。此配置基于StorageClasses,PVC必須請求存儲類,管理員必須創建并配置該類,以便進行動態配置。

(2)綁定

用戶創建pvc并指定需要的資源和訪問模式。在找到可用pv之前,pvc會保持未綁定狀態

(3)使用

  • 需要找一個存儲服務器,把它劃分成多個存儲空間;

  • k8s管理員可以把這些存儲空間定義成多個pv;

  • 在pod中使用pvc類型的存儲卷之前需要先創建pvc,通過定義需要使用的pv的大小和對應的訪問模式,找到合適的pv;

  • pvc被創建之后,就可以當成存儲卷來使用了,我們在定義pod時就可以使用這個pvc的存儲卷;

  • pvc和pv它們是一一對應的關系,pv如果被pvc綁定了,就不能被其他pvc使用了;

  • 我們在創建pvc的時候,應該確保和底下的pv能綁定,如果沒有合適的pv,那么pvc就會處于pending狀態。

(4)回收策略

當我們創建pod時如果使用pvc做為存儲卷,那么它會和pv綁定,當刪除pod,pvc和pv綁定就會解除,解除之后和pvc綁定的pv卷里的數據需要怎么處理,目前,卷可以保留、回收或刪除:

1、Retain  #保留
當刪除pvc的時候,pv仍然存在,處于released狀態,但是它不能被其他pvc綁定使用,里面的數據還是存在的,當我們下次再使用的時候,數據還是存在的,這個是默認的回收策略。
2、Delete  #刪除
刪除pvc時即會從Kubernetes中移除PV,也會從相關的外部設施中刪除存儲資產。

4 創建pod,使用pvc作為持久化存儲卷

?三種回收策略詳解?

?策略??行為??適用場景??數據安全性?
?Retain?PVC刪除后,PV進入Released狀態,?保留數據需手動清理生產環境(數據庫/關鍵數據)?????
?Delete?PVC刪除后,?自動刪除PV及后端存儲?(如云磁盤/EBS)臨時測試環境??
?Recycle?數據擦除后PV恢復為AvailableK8s 1.15+已廢棄舊版本兼容?

1、創建nfs共享目錄

[root@k8s-master pvc]# 
[root@k8s-master pvc]# cd /data
[root@k8s-master data]# ls
index.html#在宿主機創建NFS需要的共享目錄
[root@k8s-master data]# mkdir /data/v{1..10} -p
[root@k8s-master data]# ls
index.html  v1  v10  v2  v3  v4  v5  v6  v7  v8  v9#配置nfs共享宿主機上的/data/v1..v10目錄
[root@k8s-master data]# vim /etc/exports
/data 192.168.158.0/24(rw,no_root_squash)
/data/v1 192.168.158.0/24(rw,no_root_squash)
/data/v2 192.168.158.0/24(rw,no_root_squash)
/data/v3 192.168.158.0/24(rw,no_root_squash)
/data/v4 192.168.158.0/24(rw,no_root_squash)
/data/v5 192.168.158.0/24(rw,no_root_squash)
/data/v6 192.168.158.0/24(rw,no_root_squash)
/data/v7 192.168.158.0/24(rw,no_root_squash)
/data/v8 192.168.158.0/24(rw,no_root_squash)
/data/v9 192.168.158.0/24(rw,no_root_squash)
/data/v10 192.168.158.0/24(rw,no_root_squash)#重新加載配置,使配置成效
[root@k8s-master data]# exportfs -arv
exporting 192.168.158.0/24:/data/v10
exporting 192.168.158.0/24:/data/v9
exporting 192.168.158.0/24:/data/v8
exporting 192.168.158.0/24:/data/v7
exporting 192.168.158.0/24:/data/v6
exporting 192.168.158.0/24:/data/v5
exporting 192.168.158.0/24:/data/v4
exporting 192.168.158.0/24:/data/v3
exporting 192.168.158.0/24:/data/v2
exporting 192.168.158.0/24:/data/v1
exporting 192.168.158.0/24:/data

2、如何編寫pv的資源清單文件

#查看定義pv需要的字段
[root@k8s-master ~]# kubectl explain pv
KIND:???? PersistentVolume
VERSION:? v1
DESCRIPTION:PersistentVolume (PV) is a storage resource provisioned by anadministrator. It is analogous to a node. More info:[https://kubernetes.io/docs/concepts/storage/persistent-volumes](https://kubernetes.io/docs/concepts/storage/persistent-volumes)
FIELDS:apiVersion??<string>skind<string>metadata<Object>spec<Object>
#查看定義nfs類型的pv需要的字段
[root@k8s-master] ~]# kubectl explain pv.spec.nfs
KIND:???? PersistentVolume
VERSION:? v1
RESOURCE: nfs <Object>
FIELDS:path<string> -required-readOnly<boolean>server??<string> -required-

3、創建pv

[root@k8s-master pvc]# vim pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: v1
spec:capacity:storage: 1Gi #pv的存儲空間容量      #這兩個必要條件accessModes: ["ReadWriteOnce"]     #訪問模式:多節點讀寫nfs:path: /data/v1 #把nfs的存儲空間創建成pvserver: 192.168.158.33 #nfs服務器的地址
---
apiVersion: v1
kind: PersistentVolume
metadata:name: v2
spec:capacity:storage: 2GiaccessModes: ["ReadWriteMany"]nfs:path: /data/v2server: 192.168.158.33
---
apiVersion: v1
kind: PersistentVolume
metadata:name: v3
spec:capacity:storage: 3GiaccessModes: ["ReadOnlyMany"]nfs:path: /data/v3server: 192.168.158.33
---
apiVersion: v1
kind: PersistentVolume
metadata:name: v4
spec:capacity:storage: 4GiaccessModes: ["ReadWriteOnce","ReadWriteMany"]nfs:path: /data/v4server: 192.168.158.33
---
apiVersion: v1
kind: PersistentVolume
metadata:name: v5
spec:capacity:storage: 5GiaccessModes: ["ReadWriteOnce","ReadWriteMany"]nfs:path: /data/v5server: 192.168.158.33
---
apiVersion: v1
kind: PersistentVolume
metadata:name: v6
spec:capacity:storage: 6GiaccessModes: ["ReadWriteOnce","ReadWriteMany"]nfs:path: /data/v6server: 192.168.158.33
---
apiVersion: v1
kind: PersistentVolume
metadata:name: v7
spec:capacity:storage: 7GiaccessModes: ["ReadWriteOnce","ReadWriteMany"]nfs:path: /data/v7server: 192.168.158.33
---
apiVersion: v1
kind: PersistentVolume
metadata:name: v8
spec:capacity:storage: 8GiaccessModes: ["ReadWriteOnce","ReadWriteMany"]nfs:path: /data/v8server: 192.168.158.33
---
apiVersion: v1
kind: PersistentVolume
metadata:name: v9
spec:capacity:storage: 9GiaccessModes: ["ReadWriteOnce","ReadWriteMany"]nfs:path: /data/v9server: 192.168.158.33
---
apiVersion: v1
kind: PersistentVolume
metadata:name: v10
spec:capacity:storage: 10GiaccessModes: ["ReadWriteOnce","ReadWriteMany"]nfs:path: /data/v10server: 192.168.158.33

更新資源清單文件

[root@k8s-master pvc]# kubectl apply -f pv.yaml 
persistentvolume/v1 created
persistentvolume/v2 created
persistentvolume/v3 created
persistentvolume/v4 created
persistentvolume/v5 created
persistentvolume/v6 created
persistentvolume/v7 created
persistentvolume/v8 created
persistentvolume/v9 created
persistentvolume/v10 created

查看pv資源

[root@k8s-master pvc]# kubectl get pv
NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
v1     1Gi        RWO            Retain           Available                                   32s
v10    10Gi       RWO,RWX        Retain           Available                                   32s
v2     2Gi        RWX            Retain           Available                                   32s
v3     3Gi        ROX            Retain           Available                                   32s
v4     4Gi        RWO,RWX        Retain           Available                                   32s
v5     5Gi        RWO,RWX        Retain           Available                                   32s
v6     6Gi        RWO,RWX        Retain           Available                                   32s
v7     7Gi        RWO,RWX        Retain           Available                                   32s
v8     8Gi        RWO,RWX        Retain           Available                                   32s
v9     9Gi        RWO,RWX        Retain           Available                                   32s
#這時還沒有創建pvc
[root@k8s-master pvc]# kubectl get pvc
No resources found in default namespace.

#ROW是一次性讀寫,RWX是多次讀寫,ROX是多次只讀,RWO是未知讀寫
#STATUS是Available,表示pv是可用的
NAME(名稱)
通常用于標識某個特定的對象,在這里可能是指存儲相關的實體(比如存儲卷等)的具體名字,方便對其進行區分和引用。
CAPACITY(容量)
代表該對象所具備的存儲容量大小,一般會以特定的存儲單位(如字節、KB、MB、GB、TB 等)來衡量,表示其能夠容納的數據量多少。
ACCESS MODES(訪問模式)
指的是允許對相應存儲資源進行訪問的方式,例如可以是只讀、讀寫、可追加等不同模式,決定了用戶或系統對其存儲內容操作的權限范圍。
RECLAIM POLICY(回收策略)#Retain保留
關乎當存儲資源不再被使用或者釋放時,對其所占用空間等資源的處理方式,常見的策略比如立即回收、延遲回收、按特定條件回收等,確保資源能合理地被再次利用。
STATUS(狀態)
描述該存儲相關對象當前所處的情況,例如可能是可用、不可用、正在初始化、已損壞等不同狀態,便于了解其是否能正常工作。
CLAIM(聲明)#pvc
在存儲語境中,往往涉及對存儲資源的一種請求或者占用聲明,表明某個主體對相應存儲資源有著相關權益或者正在使用它等情況。
STORAGECLASS(存儲類別)
用于區分不同特性的存儲分類,比如可以根據存儲的性能(高速、低速)、存儲介質(磁盤、磁帶等)、存儲成本(昂貴、廉價)等因素劃分出不同的存儲類,以滿足不同場景的需求。
VOLUMEATTRIBUTESCLASS(卷屬性類別)
主要是針對存儲卷這一特定存儲對象而言,涵蓋了該卷在諸如容量屬性、性能屬性、安全屬性等多方面的類別劃分,體現其具備的各類特性。
REASON(原因)
如果存儲對象處于某種特定狀態(比如異常狀態等),此處用于說明造成該狀態的具體緣由,方便排查問題、分析情況。
AGE(時長)
一般是指從該存儲對象創建開始到當前所經歷的時間長度,可用于衡量其存在的時間階段,輔助判斷其使用情況等。

4、創建pvc,和符合條件的pv綁定

[root@k8s-master pvc]# vim pvc.yaml apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: my-pvc
spec:accessModes: ["ReadWriteMany"]resources:requests:storage: 2Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: my-pvc1
spec:accessModes: ["ReadWriteMany"]resources:requests:storage: 1Gi

#你也可以創建多個pvc

翻譯:

apiVersion: v1                  # Kubernetes API 版本(核心API組)
kind: PersistentVolumeClaim     # 資源類型:持久化存儲聲明
metadata:name: my-pvc                  # PVC名稱(自定義標識)
spec:accessModes: ["ReadWriteMany"] # 訪問模式:多節點讀寫resources:requests:storage: 2Gi               # 申請存儲空間大小:2GB

更新資源清單文件

[root@k8s-master pvc]# kubectl apply -f pvc.yaml 
persistentvolumeclaim/my-pvc created
persistentvolumeclaim/my-pvc1 created

查看pv和pvc,STATUS是Bound,表示這個pv已經被pvc綁定了

#下面顯示為什么綁定的是v2和v4呢,那是因為v1和v3不符合條件,所以按照順序v2被my-pvc占用,v4被my-pvc占用
[root@k8s-master pvc]# kubectl get pvc
NAME      STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
my-pvc    Bound    v2       2Gi        RWX                           34s
my-pvc1   Bound    v4       4Gi        RWO,RWX                       34s
[root@k8s-master pvc]# kubectl get pv
NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM             STORAGECLASS   REASON   AGE
v1     1Gi        RWO            Retain           Available                                             4m4s
v10    10Gi       RWO,RWX        Retain           Available                                             4m4s
v2     2Gi        RWX            Retain           Bound       default/my-pvc                            4m4s
v3     3Gi        ROX            Retain           Available                                             4m4s
v4     4Gi        RWO,RWX        Retain           Bound       default/my-pvc1                           4m4s
v5     5Gi        RWO,RWX        Retain           Available                                             4m4s
v6     6Gi        RWO,RWX        Retain           Available                                             4m4s
v7     7Gi        RWO,RWX        Retain           Available                                             4m4s
v8     8Gi        RWO,RWX        Retain           Available                                             4m4s
v9     9Gi        RWO,RWX        Retain           Available                                             4m4s
[root@k8s-master pvc]# 

5、創建pod,掛載pvc

注意:pvc和pv是一對一的關系,pvc和pod可以是一對一,也可以是一對多的關系

這里我們演示pvc和pod一對一的關系

[root@k8s-master pvc]# kubectl apply -f pod-pvc.yaml 
apiVersion: v1
kind: Pod
metadata:name: pod-pvc
spec:containers:- name: nginximage: nginx:latestimagePullPolicy: IfNotPresentvolumeMounts:- name: nginx-html    #這個要mountPath: /usr/share/nginx/htmlvolumes:- name: nginx-html     #和這個要一樣persistentVolumeClaim:claimName: my-pvc    #pvc名

更新資源清單文件

[root@k8s-master pvc]# kubectl apply -f pod-pvc.yaml 
pod/pod-pvc created

查看pod狀態

[root@k8s-master pvc]# kubectl get pod pod-pvc -o wide 
NAME      READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
pod-pvc   1/1     Running   0          17s   10.244.169.181   k8s-node2   <none>           <none>#通過上面可以看到pod處于Running狀態,正常運行

測試

[root@k8s-master pvc]# curl 10.244.169.181
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.29.1</center>
</body>
</html>####在nfs服務器端寫入index.html
#因為創建的pod是綁定在my-pvc上的,而my-pvc對應的是v2存儲卷
#所以這里我們就往共享目錄/data/v2目錄中寫入[root@k8s-master pvc]# echo pvc > /data/v2/index.html
[root@k8s-master pvc]# curl 10.244.169.181
pvc

創建另一個pod測試

[root@k8s-master pvc]# vim pod-pvc.yaml
apiVersion: v1
kind: Pod
metadata:name: pod-pvc1
spec:containers:- name: nginximage: nginx:latestimagePullPolicy: IfNotPresentvolumeMounts:- name: nginx-html    #這個要mountPath: /usr/share/nginx/htmlvolumes:- name: nginx-html     #和這個要一樣persistentVolumeClaim:claimName: my-pvc    #pvc名[root@k8s-master pvc]# kubectl apply -f pod-pvc.yaml 
pod/pod-pvc1 created[root@k8s-master pvc]# kubectl get pod -o wide | grep pod
pod-pvc                          1/1     Running   0             7m48s   10.244.169.181   k8s-node2   <none>           <none>
pod-pvc1                         1/1     Running   0             29s     10.244.36.95     k8s-node1   <none>           <none>#訪問pod-pvc1的虛擬ip,返回pvc,證明多個pod可共享同一個pvc,實現目錄共享
[root@k8s-master pvc]# curl 10.244.36.95
pvc

刪除pod-pvc? 的這個pod,發現pvc還是存在的

[root@k8s-master pvc]# vim pod-pvc.yaml
[root@k8s-master pvc]# kubectl delete pod pod-pvc
pod "pod-pvc" deleted
[root@k8s-master pvc]# kubectl delete pod pod-pvc1
pod "pod-pvc1" deleted
[root@k8s-master pvc]# kubectl get pvc
NAME      STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
my-pvc    Bound    v2       2Gi        RWX                           24m
my-pvc1   Bound    v4       4Gi        RWO,RWX                       24m
[root@k8s-master pvc]# kubectl get pv
NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM             STORAGECLASS   REASON   AGE
v1     1Gi        RWO            Retain           Available                                             25m
v10    10Gi       RWO,RWX        Retain           Available                                             25m
v2     2Gi        RWX            Retain           Bound       default/my-pvc                            25m
v3     3Gi        ROX            Retain           Available                                             25m
v4     4Gi        RWO,RWX        Retain           Bound       default/my-pvc1                           25m
v5     5Gi        RWO,RWX        Retain           Available                                             25m
v6     6Gi        RWO,RWX        Retain           Available                                             25m
v7     7Gi        RWO,RWX        Retain           Available                                             25m
v8     8Gi        RWO,RWX        Retain           Available                                             25m
v9     9Gi        RWO,RWX        Retain           Available                                             25m

刪除pvc

????????pv仍然存在,處于released狀態,但是它不能被其他pvc綁定使用,里面的數據還是存在的,當我們下次再使用的時候,數據還是存在的,這個是默認的回收策略。

[root@k8s-master pvc]# kubectl delete pvc my-pvc
persistentvolumeclaim "my-pvc" deleted
[root@k8s-master pvc]# kubectl delete pvc my-pvc1
persistentvolumeclaim "my-pvc1" deleted
[root@k8s-master pvc]# kubectl get pvc
No resources found in default namespace.#發現pv的狀態發生了變化
[root@k8s-master pvc]# kubectl get pv
NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM             STORAGECLASS   REASON   AGE
v1     1Gi        RWO            Retain           Available                                             27m
v10    10Gi       RWO,RWX        Retain           Available                                             27m
v2     2Gi        RWX            Retain           Released    default/my-pvc                            27m
v3     3Gi        ROX            Retain           Available                                             27m
v4     4Gi        RWO,RWX        Retain           Released    default/my-pvc1                           27m
v5     5Gi        RWO,RWX        Retain           Available                                             27m
v6     6Gi        RWO,RWX        Retain           Available                                             27m
v7     7Gi        RWO,RWX        Retain           Available                                             27m
v8     8Gi        RWO,RWX        Retain           Available                                             27m
v9     9Gi        RWO,RWX        Retain           Available                                             27m

此時我們進入到nfs的共享目錄,發現我們建立的index.html還是存在的

[root@k8s-master ~]# cd /data/v2
[root@k8s-master v2]# ls
index.html

如果想要徹底刪除數據

[root@k8s-master pvc]# kubectl delete -f pv.yaml 
persistentvolume "v1" deleted
persistentvolume "v2" deleted
persistentvolume "v3" deleted
persistentvolume "v4" deleted
persistentvolume "v5" deleted
persistentvolume "v6" deleted
persistentvolume "v7" deleted
persistentvolume "v8" deleted
persistentvolume "v9" deleted
persistentvolume "v10" deleted
[root@k8s-master pvc]# kubectl get pv
No resources found
[root@k8s-master pvc]# kubectl apply -f pv.yaml 
persistentvolume/v1 created
persistentvolume/v2 created
persistentvolume/v3 created
persistentvolume/v4 created
persistentvolume/v5 created
persistentvolume/v6 created
persistentvolume/v7 created
persistentvolume/v8 created
persistentvolume/v9 created
persistentvolume/v10 created
[root@k8s-master pvc]# kubectl get pv
NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
v1     1Gi        RWO            Retain           Available                                   3s
v10    10Gi       RWO,RWX        Retain           Available                                   3s
v2     2Gi        RWX            Retain           Available                                   3s
v3     3Gi        ROX            Retain           Available                                   3s
v4     4Gi        RWO,RWX        Retain           Available                                   3s
v5     5Gi        RWO,RWX        Retain           Available                                   3s
v6     6Gi        RWO,RWX        Retain           Available                                   3s
v7     7Gi        RWO,RWX        Retain           Available                                   3s
v8     8Gi        RWO,RWX        Retain           Available                                   3s
v9     9Gi        RWO,RWX        Retain           Available                                   3s
[root@k8s-master pvc]# kubectl get pvc
No resources found in default namespace.

刪除pv

kubectl delete pv pv_name,刪除pv,不會刪除pv里的數據

注:使用pvc和pv的注意事項

1、我們每次創建pvc的時候,需要事先有劃分好的pv,這樣可能不方便,那么可以在創建pvc的時候直接動態創建一個pv這個存儲類,pv事先是不存在的

2、pvc和pv綁定,如果使用默認的回收策略retain,那么刪除pvc之后,pv會處于released狀態,我們想要繼續使用這個pv,需要手動刪除pv,kubectl delete pv pv_name,刪除pv,不會刪除pv里的數據,當我們重新創建pvc時還會和這個最匹配的pv綁定,數據還是原來數據,不會丟失。

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

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

相關文章

【系統架構設計師】數據庫設計(一):數據庫技術的發展、數據模型、數據庫管理系統、數據庫三級模式

數據庫技術是研究數據庫的結構、存儲、設計、管理和應用的一門軟件學科。 數據庫系統本質上是一個用計算機存儲信息的系統。 數據庫管理系統是位于用戶與操作系統之間的一層數據管理軟件&#xff0c;其基本目標是提供一個可以方便、有效地存取數據庫信息的環境。 數據庫就是信息…

深入理解 Structured Outputs:基于 JSON Schema 的結構化輸出實踐指南

深入理解 Structured Outputs&#xff1a;基于 JSON Schema 的結構化輸出實踐指南 目錄 引言Structured Outputs 概述應用場景與優勢核心用法&#xff1a;結構化響應的獲取功能對比&#xff1a;Structured Outputs 與 JSON 模式典型應用示例鏈式思維&#xff08;Chain of Tho…

大模型應用編排工具Dify之插件探索

1.前言 ? dify 1.x版本以后插件功能豐富了很多&#xff0c;推出的插件市場上有各式各樣的插件&#xff0c;比如 連接數據庫、連接大模型、搜索和 mcp服務等。其中&#xff0c;有一個比較大的改動&#xff0c;模型供應商不再內置&#xff0c;而是通過插件的形式提供。因此&…

ubuntu2204安裝搜狗拼音輸入法

安裝必要的軟件包 sudo apt update sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-config-qt fcitx5-configtool -y安裝搜狗拼音 下載最新 .deb 包&#xff08;官方地址&#xff1a;https://pinyin.sogou.com/linux/&#xff09;&#xff0c;安裝&#xff1a; sudo dp…

三,設計模式-抽象工廠模式

目的 在 工廠模式 中&#xff0c;當需要創建新的產品時&#xff0c;則額外需要創建新的工廠&#xff0c;這種模式是對產品制造方法的抽象化&#xff0c;如果產品種類變多&#xff0c;則工廠數目變多&#xff0c;則代碼規模會越來越大&#xff0c;且不同的產品類的生成依賴不同…

Vue3響應式編程核心:ref與reactive全方位對比

在Vue3的Composition API中&#xff0c;ref和reactive是構建響應式數據的核心工具。許多開發者對它們的選擇存在困惑&#xff1a;何時用ref的.value&#xff1f;何時用reactive的直接訪問&#xff1f;為何解構會丟失響應性&#xff1f;本文從原理、場景到實戰陷阱&#xff0c;為…

Redis實戰-緩存的解決方案(一)

1.什么是緩存緩存就是數據交換的緩存區&#xff0c;是存儲數據的臨時區域&#xff0c;讀寫性能高。瀏覽器會有緩存&#xff0c;tomcat服務器也會有緩存&#xff0c;數據庫也會有緩存&#xff0c;CPU也會有緩存&#xff0c;磁盤也會有緩存&#xff0c;所以說緩存是無處不在的并且…

CI/CD企業案例詳解

7.持續集成持續交付企業示例 為了讓容器構建鏡像可以持續集成并自動上傳到harbor倉庫&#xff0c;業務主機通過持續交付自動從倉庫中下載鏡像最近版本并實現業務更新7.1 在jenkins中添加registry節點 7.1.1 在業務節點中安裝docker和java環境并配置其可以從倉庫中下載鏡像 # 新…

C++ 入門核心知識

一、C 課程概述與發展歷史1. 發展歷程&#xff1a;從 C 語言擴展到標準化C 的起源可追溯至 1979 年&#xff0c;由貝爾實驗室的 Bjarne Stroustrup 主導開發。當時他為解決大型項目開發中 C 語言在可維護性和擴展性上的不足&#xff0c;在 C 語言基礎上引入了面向對象編程特性。…

labelme數據標注保姆級教程:從安裝到格式轉換全流程,附常見問題避坑指南(含視頻講解)

引言&#xff1a;為什么選擇labelme&#xff1f; 在人工智能和機器學習領域&#xff0c;高質量的標注數據是訓練優秀模型的基礎。而 labelme作為一款開源、跨平臺的圖像標注工具&#xff0c;憑借其強大的功能和易用性&#xff0c;成為了數據標注領域的熱門選擇。 它支持多種標…

人工智能-python-深度學習-自動微分

自動微分&#xff1a;基礎概念與應用 自動微分&#xff08;Autograd&#xff09;是現代深度學習框架&#xff08;如PyTorch、TensorFlow&#xff09;中的一個核心功能。它通過構建計算圖并在計算圖上自動計算梯度&#xff0c;簡化了反向傳播算法的實現。以下是自動微分的基本概…

k8s原理及操作

簡介 kubernetes的本質是一組服務器集群&#xff0c;它可以在集群的每個節點上運行特定的程序&#xff0c;來對節點中的容器 進行管理。目的是實現資源管理的自動化&#xff0c;主要提供了如下的主要功能&#xff1a; 自我修復&#xff1a;一旦某一個容器崩潰&#xff0c;能夠在…

理解音頻響度:LUFS 標準及其計算實現

LUFS 及其重要性 1.1、什么是 LUFS&#xff1f; LUFS&#xff08;Loudness Units relative to Full Scale&#xff09;是音頻工程中用于測量感知響度的標準單位。它已成為廣播、流媒體和音樂制作領域的行業標準&#xff0c;用于確保不同音頻內容具有一致的響度水平。 LUFS 是 I…

【在ubuntu下使用vscode打開c++的make項目及編譯調試】

在ubuntu下使用vscode打開c的make項目及編譯調試第一步&#xff1a;安裝必要的軟件第二步&#xff1a;示例項目準備1. 創建C源文件&#xff1a; main.cpp2. 創建頭文件&#xff1a; utils.h3. 創建實現文件&#xff1a; utils.cpp第三步&#xff1a;使用 VS Code 打開項目第四步…

3-2.Python 函數 - None(None 概述、None 應用場景)

一、None 概述在 Python 中&#xff0c;None 是一個特殊的常量&#xff0c;用于表示空值或無值None 是 Python 中唯一的一個 NoneType 類型的實例二、None 應用場景 1、定義變量 None 常用于初始化變量&#xff0c;表示該變量暫時不需要有具體值 name Noneprint(name) print(t…

js獲取html元素并設置高度為100vh-鍵盤高度

獲取HTML元素并設置高度為(100vh - 鍵盤高度) 我將設計一個頁面&#xff0c;展示如何獲取HTML元素并動態設置其高度為視口高度減去鍵盤高度&#xff0c;這在移動設備上特別有用&#xff0c;可以避免鍵盤遮擋內容。 設計思路 創建一個帶有輸入框的界面&#xff0c;模擬鍵盤彈…

基于SpringBoot的校園博客管理系統

&#x1f517; 目錄 一. 前言 ??二. 前端框架、后端框架以及存儲框架使用情況說明 ??三. 核心技術 ????1. ?Java開發語言 ????2. ?MyBatis ????3. ?Mysql ????4. ?Vue ????5. ?部署項目 ??四. 演示效果 ????1. 管理員功能模塊 ??????…

Nginx + Certbot配置 HTTPS / SSL 證書

前提條件&#xff1a; 1.已有域名 2.Nginx 已安裝并正在運行&#xff0c;且有對應的 Server 配置 3.防火墻開放 80 和 443 端口 安裝 EPEL 倉庫&#xff1a; sudo yum install epel-release -y安裝 Snapd sudo yum install snapd -y啟用并啟動 Snapd Socket sudo systemctl ena…

圖結構使用 Louvain 社區檢測算法進行分組

圖結構使用 Louvain 社區檢測算法進行分組 flyfish Louvain 算法是一種基于模塊度最大化的社區檢測算法&#xff0c;核心目標是在復雜網絡中找到“內部連接緊密、外部連接稀疏”的社區結構。它的優勢在于高效性&#xff08;可處理百萬級節點的大規模網絡&#xff09;和近似最優…

layui.formSelects自定義多選組件在layer.open中使用、獲取、復現

layui.formSelects自定義多選組件在layer.open中使用、獲取、復現 引入css和js //<th:block th:include"include :: layui-formSelects-css"/> <link th:href"{/ajax/libs/layui-formSelects/formSelects-v4.css}" rel"stylesheet"/>…