有哪些可以做圖的網(wǎng)站啊指數(shù)函數(shù)求導(dǎo)
介紹
容器中的文件在磁盤上是臨時存放的,當(dāng)容器崩潰或停止時容器上面的數(shù)據(jù)未保存, 因此在容器生命周期內(nèi)創(chuàng)建或修改的所有文件都將丟失。 在崩潰期間,kubelet 會以干凈的狀態(tài)重新啟動容器。 當(dāng)多個容器在一個 Pod 中運(yùn)行并且需要共享文件時,會出現(xiàn)另一個問題,跨所有容器設(shè)置和訪問共享文件系統(tǒng)具有一定的挑戰(zhàn)性。K8S 卷(Volume) 這一抽象概念能夠解決這兩個問題。
存儲卷的分類
hostPath 存儲
警告:
HostPath 卷存在許多安全風(fēng)險,最佳做法是盡可能避免使用 HostPath。 當(dāng)必須使用 HostPath 卷時,它的范圍應(yīng)僅限于所需的文件或目錄,并以只讀方式掛載。HostPath 僅適用于單個節(jié)點(diǎn)上的存儲,不支持跨節(jié)點(diǎn)訪問(如果Pod偏移到其他宿主機(jī)節(jié)點(diǎn)上面可能會出問題)。
支持的 type 值如下:
type值 | 說明 |
---|---|
空字符串(默認(rèn))用于向后兼容,這意味著在安裝 hostPath 卷之前不會執(zhí)行任何檢查 | |
DirectoryOrCreate | 如果在給定路徑上什么都不存在,那么將根據(jù)需要創(chuàng)建空目錄,權(quán)限設(shè)置為 0755,具有與 kubelet相同的組和屬主信息 |
Directory | 在給定路徑上必須存在的目錄 |
FileOrCreate | 如果在給定路徑上什么都不存在,那么將在那里根據(jù)需要創(chuàng)建空文件,權(quán)限設(shè)置為 0644,具有與 kubelet 相同的組和所有權(quán) |
File | 在給定路徑上必須存在的文件 |
Socket | 在給定路徑上必須存在的 UNIX 套接字 |
CharDevice | 在給定路徑上必須存在的字符設(shè)備 |
BlockDevice | 在給定路徑上必須存在的塊設(shè)備 |
hostPath 配置示例
如有多個節(jié)點(diǎn),在使用 hostPath 存儲需要指定pod部署在那個節(jié)點(diǎn)上面,例如在Pod上面添加nodeSelector字段指定到某一個節(jié)點(diǎn)(需要提前給節(jié)點(diǎn)打標(biāo)簽)
apiVersion: v1
kind: Pod
metadata:name: test-pd
spec:containers:
# nodeSelector: # 指定部署到特定節(jié)點(diǎn)上面
# disktype: ssd # 標(biāo)簽- image: nginxname: test-containervolumeMounts:- mountPath: /test-pdname: test-volumevolumes:- name: test-volumehostPath:path: /data # 宿主機(jī)上目錄位置,注意權(quán)限type: Directory # 此字段為可選,詳細(xì)解釋在上面
emptyDir
定義了 emptyDir 卷的 Pod,在 Pod 被指派到某節(jié)點(diǎn)時此卷會被創(chuàng)建。emptyDir 卷最初是空的。Pod 中的容器掛載 emptyDir 卷的路徑可能相同也可能不同,但這些容器都可以讀寫 emptyDir 卷中相同的文件。 當(dāng) Pod 因為某些原因被從節(jié)點(diǎn)上刪除時,emptyDir 卷中的數(shù)據(jù)也會被永久刪除。主要作用是為了共享數(shù)據(jù)用。
emptyDir 卷存儲可以使用任何磁盤、SSD 或網(wǎng)絡(luò)存儲,這取決于你的環(huán)境。 你可以將 emptyDir.medium 字段設(shè)置為 “Memory”, 以告訴 Kubernetes 為你掛載 tmpfs(基于 RAM 的文件系統(tǒng))。雖然 tmpfs 速度非常快,但是要注意它與磁盤不同, 并且你所寫入的所有文件都會計入容?的內(nèi)存消耗,受容?內(nèi)存限制約束
說明:
容器崩潰并不會導(dǎo)致 Pod 被從節(jié)點(diǎn)上移除,因此容器崩潰期間 emptyDir 卷中的數(shù)據(jù)是安全的。
emptyDir 配置示例
apiVersion: v1
kind: Pod
metadata:name: test-pd
spec:containers:- image: nginxname: test-containervolumeMounts:- mountPath: /cachename: cache-volumevolumes:- name: cache-volumeemptyDir:sizeLimit: 500Mi # 寫入磁盤的大小限制,如果沒限制直接刪除這行 在emptyDir: []即可
nfs
nfs 卷能將 NFS (網(wǎng)絡(luò)文件系統(tǒng)) 掛載到你的 Pod 中。 不像 emptyDir 那樣會在刪除 Pod 的同時也會被刪除,nfs 卷的內(nèi)容在刪除 Pod 時會被保存,卷只是被卸載。 這意味著 nfs 卷可以被預(yù)先填充數(shù)據(jù),并且這些數(shù)據(jù)可以在 Pod 之間共享。
配置示例
說明:
在使用 NFS 卷之前,你必須部署自己的 NFS 服務(wù)?才可以使用,這里不再敘述。
apiVersion: v1
kind: Pod
metadata:name: test-pd
spec:containers:- image: registry.k8s.io/test-webservername: test-containervolumeMounts:- mountPath: /my-nfs-dataname: test-volumevolumes:- name: test-volumenfs:server: my-nfs-server.example.com # nfs服務(wù)的地址path: /my-nfs-volume # nfs 服務(wù)共享的路徑readOnly: true
PV和PVC的使用
在 Kubernetes 中,PV(PersistentVolume)和 PVC(PersistentVolumeClaim)是用于持久化存儲的核心概念,其本身并沒有存儲的相關(guān)功能所以需要準(zhǔn)備后端存儲的環(huán)境。
-
PersistentVolume(PV):PV 是集群中的一塊持久化存儲,它是集群管理員預(yù)先配置好的存儲資源。PV 可以是網(wǎng)絡(luò)存儲(如 NFS、GlusterFS、Ceph)、云存儲(如 AWS EBS、Azure Disk)、本地存儲(HostPath)等。PV 與存儲后端進(jìn)行綁定,表示集群中的可用存儲資源,支持的后端存儲類型詳情請查看K8S官方文檔
-
PersistentVolumeClaim(PVC):PVC 是 Pod 對 PV 的申請。PVC 定義了對存儲資源的需求,包括存儲容量、訪問模式和其他屬性。Pod 中的容器可以通過 PVC 來申請并使用 PV 提供的持久化存儲。Kubernetes 會根據(jù) PVC 的需求匹配可用的 PV,并將其動態(tài)綁定到 Pod 中。
PV(PersistentVolume)
下面是 hostPath PersistentVolume 的配置文件:
apiVersion: v1
kind: PersistentVolume
metadata:labels:type: localname: task-pv-volume
spec:accessModes:- ReadWriteOncecapacity:storage: 10GihostPath:path: /mnttype: ""persistentVolumeReclaimPolicy: RecyclestorageClassName: manualvolumeMode: Filesystem
關(guān)鍵詞解釋
- spec: capacity: storage: 10Gi:定義了 PV 的存儲容量為 10Gi。
- volumeMode: Filesystem:指定了 PV 的卷模式為文件系統(tǒng)。
- accessModes: - ReadWriteOnce:指定了 PV 的訪問模式為 ReadWriteOnce,表示此 PV 只能被單個節(jié)點(diǎn)掛載為讀寫模式。
- persistentVolumeReclaimPolicy: Recycle:指定了 PV 回收策略為 Recycle,表示當(dāng) PV 被釋放時,其存儲資源將被重新使用。
- storageClassName: manual:指定了 PV 的存儲類名稱為 slow。
- hostPath.path:指定了 PV 的路徑。在這里,path 指定了 PV 使用的主機(jī)路徑,即 “/mnt/data”。
- hostPath.type:指定 PV 所使用的主機(jī)路徑的類型,不指定默認(rèn)是:DirectoryOrCreate 還有 Directory 和 File 類型可選
pv存儲卷的回收策略
- 回收(Reclaiming) :當(dāng)用戶不再使用其存儲卷時,他們可以從 API 中將 PVC 對象刪除, 從而允許該資源被回收再利用。
- 保留(Retain):回收策略 Retain 使得用戶可以手動回收資源。
- 刪除(Delete):對于支持 Delete 回收策略的卷插件,刪除動作會將 PersistentVolume 對象從 Kubernetes 中移除,同時也會從外部基礎(chǔ)設(shè)施中移除所關(guān)聯(lián)的存儲資產(chǎn)。 動態(tài)制備的卷會繼承其 StorageClass 中設(shè)置的回收策略, 該策略默認(rèn)為 Delete。
- 回收(Recycle):如果下層的卷插件支持,回收策略 Recycle 會在卷上執(zhí)行一些基本的擦除 (rm -rf /thevolume/*)操作,之后允許該卷用于新的 PVC 申領(lǐng)。(注意:回收策略 Recycle 已被廢棄。取而代之的建議方案是使用動態(tài)制備。)
卷模式
Kubernetes 支持兩種卷模式(volumeModes):
- Filesystem(文件系統(tǒng)):文件系統(tǒng)模式,表示 PV 中存儲的數(shù)據(jù)是文件系統(tǒng)數(shù)據(jù),可以像普通文件系統(tǒng)一樣被掛載到 Pod 中,并且可以在容器中被讀取和寫入。默認(rèn)的卷模式是 Filesystem。
- Block():塊模式,表示 PV 中存儲的數(shù)據(jù)是塊設(shè)備數(shù)據(jù),可以將 PV 掛載為塊設(shè)備卷(例如 /dev/sdX),并且可以被容器用作塊設(shè)備。
訪問模式
- ReadWriteOnce:卷可以被一個節(jié)點(diǎn)以讀寫方式掛載。 ReadWriteOnce 訪問模式仍然可以在同一節(jié)點(diǎn)上運(yùn)行的多個 Pod 訪問該卷。
- ReadOnlyMany:卷可以被多個節(jié)點(diǎn)以只讀方式掛載。
- ReadWriteMany:卷可以被多個節(jié)點(diǎn)以讀寫方式掛載。
- ReadWriteOncePod:(目前K8S版本在1.22及以上的才支持到1.29才GA)卷可以被單個 Pod 以讀寫方式掛載。 如果你想確保整個集群中只有一個 Pod 可以讀取或?qū)懭朐?PVC, 請使用 ReadWriteOncePod 訪問模式。
創(chuàng)建PV
kubectl create -f pv0003.yaml
創(chuàng)建好以后查看
kubectl get pv
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM STORAGECLASS REASON AGE
pv0003 5Gi RWO Recycle Available manual 4s
PV狀態(tài)說明:
- NAME:PVC名字
- CAPACITY:PV大小
- ACCESSMODES:訪問模式
- RECLAIMPOLICY:回收策略
- STATUS:PV使用狀態(tài)
- STORAGECLASS: 動態(tài)存儲名字
- AGE:創(chuàng)建時間
在命令行接口(CLI)中,訪問模式也使用以下縮寫形式:
- RWO - ReadWriteOnce
- ROX - ReadOnlyMany
- RWX - ReadWriteMany
- RWOP - ReadWriteOncePod
PV每個階段的狀態(tài)
每個持久卷會處于以下階段(Phase)之一:
- Available:卷是一個空閑資源,尚未綁定到任何申領(lǐng)
- Bound:該卷已經(jīng)綁定到某申領(lǐng)
- Released:所綁定的申領(lǐng)已被刪除,但是關(guān)聯(lián)存儲資源尚未被集群回收
- Failed:卷的自動回收操作失敗
使用 kubectl describe persistentvolume 查看已綁定到 PV 的 PVC 的名稱。
PVC(PersistentVolumeClaims)
創(chuàng)建一個PVC:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: myclaim
spec:accessModes:- ReadWriteOncevolumeMode: Filesystemresources:requests:storage: 5Gi
這里面的字段意思基本和PV里面的一樣,訪問模式和卷模式也是一樣的,就不再解釋了。
PV和PVC的綁定模式
匹配步驟:
- 檢查 PV 的狀態(tài):Kubernetes 控制器會查找狀態(tài)為 Available(可用)的 PV,這些 PV 尚未被其他 PVC 綁定。
- PV 屬性的匹配:控制器會檢查 PVC 的需求與 PV 的屬性是否匹配。這包括容量、訪問模式、持久性和標(biāo)簽等。
- 針對 PVC 的需求選擇 PV:控制器會選擇滿足 PVC 所有需求的 PV,并嘗試將其與 PVC 綁定。
自動綁定
創(chuàng)建PV和PVC
apiVersion: v1
kind: PersistentVolume
metadata:name: task1labels:type: local1
spec:capacity:storage: 10GiaccessModes:- ReadWriteOncehostPath:path: "/mnt"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: task-pv-claim
spec:accessModes:- ReadWriteOnceresources:requests:storage: 9Gi
查看PV和PVC狀態(tài)
[root@master01 pv]# kubectl get pvc,pv
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/task-pv-claim Bound task1 10Gi RWO 26sNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/task1 10Gi RWO Retain Bound default/task-pv-claim 10m
都是已經(jīng)綁狀態(tài)
根據(jù)標(biāo)簽綁定
創(chuàng)建PV和PVC
apiVersion: v1
kind: PersistentVolume
metadata:name: my-pvlabels:desk: "test1" # 設(shè)置標(biāo)簽
spec:capacity:storage: 10GiaccessModes:- ReadWriteOncehostPath:path: /mnt
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: my-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 1Giselector:matchLabels:desk: "test1" # 匹配PV的標(biāo)簽
查看PV和PVC狀態(tài)
可以看到 my-pvc 已經(jīng)綁定到 my-pv 上面了,如果沒有標(biāo)簽自動綁定的話 則會綁定到 task2 的PV上面
[root@master01 pv]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
my-pv 10Gi RWO Retain Bound default/my-pvc 3s
task1 10Gi RWO Retain Available 46s
task2 5Gi RWO Retain Available 46s
[root@master01 pv]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
my-pvc Bound my-pv 10Gi RWO 12s
指定PV名字綁定
apiVersion: v1
kind: PersistentVolume
metadata:name: my-pv
spec:capacity:storage: 20GiaccessModes:- ReadWriteOncehostPath:path: /mnt/data
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: my-pvc
spec:accessModes:- ReadWriteOncevolumeName: my-pv # 指定要綁定的 PV 的名稱resources:requests:storage: 5Gi
查看PV和PVC綁定情況
[root@master01 pv]# kubectl get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/my-pv 20Gi RWO Retain Bound default/my-pvc 5s
persistentvolume/task1 10Gi RWO Retain Available 158m
persistentvolume/task2 5Gi RWO Retain Available 158mNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/my-pvc Pending my-pv 0 5s
注意事項
PV 和 PVC 之間的綁定是一對一的關(guān)系。一個 PVC 只能綁定到一個 PV 上,而一個 PV 可以同時被多個 PVC 綁定。如果沒有足夠的 PV 來滿足 PVC 的需求,或者沒有滿足 PVC 的要求的可用 PV,則 PVC 將處于 Pending(掛起)狀態(tài),直到滿足條件為止。
Pod使用PVC存儲
創(chuàng)建PV和PVC:
apiVersion: v1
kind: PersistentVolume
metadata:name: task-pv-volumelabels:type: local
spec:capacity:storage: 10GiaccessModes:- ReadWriteOncehostPath:path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: task-pv-claim
spec:accessModes:- ReadWriteOnceresources:requests:storage: 3Gi
創(chuàng)建一個Pod使用上面這個PVC
apiVersion: v1
kind: Pod
metadata:name: task-pv-pod
spec:containers:- name: task-pv-containerimage: nginxports:- containerPort: 80name: "http-server"volumeMounts:- mountPath: "/usr/share/nginx/html"name: task-pv-storagevolumes:- name: task-pv-storagepersistentVolumeClaim: # 指定使用PVC存儲claimName: task-pv-claim # PVC存儲的名字
在Pod里面多次掛在PVC
apiVersion: v1
kind: Pod
metadata:name: test
spec:containers:- name: testimage: nginxvolumeMounts:# 網(wǎng)站數(shù)據(jù)掛載- name: configmountPath: /usr/share/nginx/htmlsubPath: html# Nginx 配置掛載- name: configmountPath: /etc/nginx/nginx.confsubPath: nginx.confvolumes:- name: configpersistentVolumeClaim:claimName: test-nfs-claim
PVC綁定常見問題
創(chuàng)建PVC后,一直綁定不上PV(Pending):
- PVC的空間申請大小大于PV的大小
- PVC的StorageClassName沒有和PV的一致
- PVC的accessModes和PV的不一致
Pod掛在PVC后,一直處于Pending狀態(tài):
- PVC沒有被創(chuàng)建成功,或者被創(chuàng)建
- PVC和Pod不在同一個Namespace(PV是沒有命名空間的,PVC是有有命名空間概念的)
刪除PVC后k8s會創(chuàng)建一個用于回收的Pod,根據(jù)PV的回收策略進(jìn)行pv的回收,回收完以后PV的狀態(tài)就會變成可被綁定的狀態(tài)也就是空閑狀態(tài),其他的Pending狀態(tài)的PVC如果匹配到了這個PV,他就能和這個PV進(jìn)行綁定。
動態(tài)存儲(StorageClass)
主要功能:
- 動態(tài)配置持久存儲:StorageClass 允許管理員定義多種類型的存儲,包括云存儲、本地存儲、網(wǎng)絡(luò)存儲等,并且可以根據(jù)用戶的請求動態(tài)創(chuàng)建 PersistentVolume(PV)。
- 自動綁定:一旦 PVC 請求了特定的存儲類,Kubernetes 將根據(jù) StorageClass 的定義自動創(chuàng)建 PV,并將其綁定到 PVC 上,簡化了存儲資源的管理過程。
- 多種屬性支持:StorageClass 允許管理員定義存儲的各種屬性,如容量、訪問模式、持久性、副本數(shù)等,以滿足不同應(yīng)用程序的需求。
- 靈活性和可擴(kuò)展性:管理員可以根據(jù)實際需求定義多個不同的 StorageClass,并根據(jù)應(yīng)用程序的需求選擇合適的存儲類。
環(huán)境準(zhǔn)備
在開始之前請安裝后端存儲,我這里使用的是CEPH存儲并且安裝到K8S集群里,下面是安裝方法。(所有環(huán)境中如果有用到的安裝包或者容器鏡像什么的都可以私信我)
安裝方法:點(diǎn)擊跳轉(zhuǎn)
查看已經(jīng)部署好的StorageClass
注意: 本次演示默認(rèn)已經(jīng)安裝好ceph存儲。
## sc 是 StorageClass 簡寫[root@master01 ~]# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
rook-ceph-rbd rook-ceph.rbd.csi.ceph.com Retain Immediate true 228d
rook-cephfs rook-ceph.cephfs.csi.ceph.com Retain Immediate true 228d
- rook-ceph-rbd :這個是塊存儲。區(qū)別:只能由一個節(jié)點(diǎn)進(jìn)行讀寫操作
- rook-cephfs:這個是共享文件存儲。區(qū)別:可以在多個節(jié)點(diǎn)上同時掛載和訪問。
適用場景:
- RBD:適用于需要高性能、低延遲和可擴(kuò)展性的場景,如數(shù)據(jù)庫、塊存儲卷等。
- CephFS:適用于需要共享數(shù)據(jù)、訪問文件系統(tǒng)的場景,如共享存儲、容器卷等。
查看 rook-ceph-rbd
查看命令
kubectl get sc rook-ceph-rbd -oyaml
allowVolumeExpansion: true
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: rook-ceph-rbd
parameters:clusterID: rook-cephcsi.storage.k8s.io/controller-expand-secret-name: rook-csi-rbd-provisionercsi.storage.k8s.io/controller-expand-secret-namespace: rook-cephcsi.storage.k8s.io/fstype: ext4csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-nodecsi.storage.k8s.io/node-stage-secret-namespace: rook-cephcsi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisionercsi.storage.k8s.io/provisioner-secret-namespace: rook-cephimageFeatures: layeringimageFormat: "2"pool: replicapool
provisioner: rook-ceph.rbd.csi.ceph.com
reclaimPolicy: Retain
volumeBindingMode: Immediate
關(guān)鍵字段解釋
- kind:表示這是 Kubernetes 存儲 API 的版本,而 kind 設(shè)置為 StorageClass,表示這是一個 StorageClass 對象。
- allowVolumeExpansion: true :這個字段用于指示是否允許對使用這個 StorageClass 創(chuàng)建的持久卷進(jìn)行擴(kuò)展。
- metadata:這個部分包含有關(guān) StorageClass 的元數(shù)據(jù),其中最重要的是 name 字段,它指定了 StorageClass 的名稱,這里是 “rook-ceph-rbd”。
- parameters:這個字段定義了傳遞給 StorageClass 的參數(shù)。在這個例子中,這些參數(shù)包括:
-
- clusterID:Rook Ceph 集群的 ID。
-
- csi.storage.k8s.io/controller-expand-secret-name : 的名稱和命名空間。
-
- csi.storage.k8s.io/controller-expand-secret-namespace:指定擴(kuò)展控制器所需的密鑰.
-
- csi.storage.k8s.io/fstype:指定了文件系統(tǒng)類型。
-
- csi.storage.k8s.io/node-stage-secret-name 和 csi.storage.k8s.io/node-stage-secret-namespace:這些參數(shù)用于指定節(jié)點(diǎn)階段操作所需的密鑰的名稱和命名空間。
csi.storage.k8s.io/provisioner-secret-name 和 csi.storage.k8s.io/provisioner-secret-namespace:這些參數(shù)用于指定提供程序所需的密鑰的名稱和命名空間。
- csi.storage.k8s.io/node-stage-secret-name 和 csi.storage.k8s.io/node-stage-secret-namespace:這些參數(shù)用于指定節(jié)點(diǎn)階段操作所需的密鑰的名稱和命名空間。
- imageFeatures:這個參數(shù)指定了卷的特性,即它包含了支持鏡像層疊(layering)的功能。鏡像層疊允許在卷上創(chuàng)建多個鏡像,每個鏡像可以包含自己的修改,而不會影響其他鏡像。
- imageFormat:這個參數(shù)指定了卷的格式,即它使用的是格式版本 2。格式版本 2 是 RBD 卷的一種格式,它支持更高級的功能和性能,例如支持更大的卷和更好的快照管理。
- pool:指定了用于存儲的池名稱。
- provisioner:這個字段指定了用于創(chuàng)建持久卷的存儲提供程序。在這里,使用的提供程序是 rook-ceph.rbd.csi.ceph.com,表明這個 StorageClass 使用了 Rook Ceph 的 RBD(Rados Block Device)CSI(Container Storage Interface)提供程序。
- reclaimPolicy:這個字段指定了持久卷的回收策略。在這里,設(shè)置為 Retain,表示當(dāng)與此 StorageClass 關(guān)聯(lián)的持久卷不再需要時,它們的資源應(yīng)該保留而不被自動刪除。
- volumeBindingMode:這個字段指定了持久卷的綁定模式。在這里,設(shè)置為 Immediate,表示持久卷應(yīng)該立即綁定到聲明,即創(chuàng)建聲明時應(yīng)立即創(chuàng)建卷。
StorageClass 使用方法
創(chuàng)建 StatefulSet 使用
部署成功以后 StorageClass 會根據(jù)PVC申請的去自動創(chuàng)建PV并綁定好
apiVersion: apps/v1
kind: StatefulSet
metadata:name: my-statefulset
spec:serviceName: "my-statefulset"replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-containerimage: nginx:latestports:- containerPort: 80volumeMounts:- name: my-persistent-storagemountPath: /usr/share/nginx/htmlvolumeClaimTemplates:- metadata:name: my-persistent-storagespec:accessModes: [ "ReadWriteOnce" ]storageClassName: "rook-ceph-rbd" # 指定剛剛查出來的 StorageClass 名字 resources:requests:storage: 5Gi
使用PVC申請動態(tài)存儲
創(chuàng)建PVC成功以后會自動創(chuàng)建PV并綁定好,后面Pod使用方式和上面手動創(chuàng)建PV和PVC的方式一樣。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: my-pvc
spec:accessModes:- ReadWriteOncestorageClassName: rook-ceph-rbd # 指定要使用的 StorageClass 的名稱resources:requests:storage: 1Gi # 請求 1GB 的存儲容量
PVC擴(kuò)容
直接修改 “storage: 1Gi ” 修改為2G即可,但是生效還需要等幾分鐘。
kubectl edit pvc my-pvc