最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

K8S臨時存儲-本地存儲-PV和PVC詳解-動態(tài)存儲(StorageClass)

 更新時間:2026年03月03日 09:41:55   作者:文靜小土豆  
文章介紹了Kubernetes中容器數(shù)據(jù)的持久化解決方案,包括hostPath、emptyDir、NFS卷以及PV和PVC,詳細(xì)說明了這些存儲卷的類型、配置方法和使用場景,并提供了創(chuàng)建和綁定存儲卷的示例,此外,還討論了存儲卷的回收策略和卷模式,以及如何使用StorageClass進(jìn)行動態(tài)存儲配置

介紹

容器中的文件在磁盤上是臨時存放的,當(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: nginx
    name: test-container
    volumeMounts:
    - mountPath: /test-pd
      name: test-volume
  volumes:
  - name: test-volume
    hostPath:
      path: /data          # 宿主機(jī)上目錄位置,注意權(quán)限
      type: Directory      # 此字段為可選,詳細(xì)解釋在上面

emptyDir

定義了 emptyDir 卷的 Pod,在 Pod 被指派到某節(jié)點(diǎn)時此卷會被創(chuàng)建。emptyDir 卷最初是空的。Pod 中的容器掛載 emptyDir 卷的路徑可能相同也可能不同,但這些容器都可以讀寫 emptyDir 卷中相同的文件。 當(dāng) Pod 因?yàn)槟承┰虮粡墓?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: nginx
    name: test-container
    volumeMounts:
    - mountPath: /cache
      name: cache-volume
  volumes:
  - name: cache-volume
    emptyDir:
      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-webserver
    name: test-container
    volumeMounts:
    - mountPath: /my-nfs-data
      name: test-volume
  volumes:
  - name: test-volume
    nfs:
      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: local
  name: task-pv-volume
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 10Gi
  hostPath:
    path: /mnt
    type: ""
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: manual
  volumeMode: 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:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    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: task1
  labels:
    type: local1
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: task-pv-claim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    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                           26s

NAME                     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-pv
  labels:
    desk: "test1"       # 設(shè)置標(biāo)簽
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /mnt
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  selector:
    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: 20Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /mnt/data
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  volumeName: 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                                            158m

NAME                           STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/my-pvc   Pending   my-pv    0                                        5s

注意事項(xiàng)

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-volume
  labels:
    type: local
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: task-pv-claim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

創(chuàng)建一個Pod使用上面這個PVC

apiVersion: v1
kind: Pod
metadata:
  name: task-pv-pod
spec:
  containers:
    - name: task-pv-container
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: task-pv-storage
  volumes:
    - name: task-pv-storage
      persistentVolumeClaim:          # 指定使用PVC存儲
        claimName: task-pv-claim      # PVC存儲的名字

在Pod里面多次掛在PVC

apiVersion: v1
kind: Pod
metadata:
  name: test
spec:
  containers:
    - name: test
      image: nginx
      volumeMounts:
        # 網(wǎng)站數(shù)據(jù)掛載
        - name: config
          mountPath: /usr/share/nginx/html
          subPath: html
        # Nginx 配置掛載
        - name: config
          mountPath: /etc/nginx/nginx.conf
          subPath: nginx.conf
  volumes:
    - name: config
      persistentVolumeClaim:
        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ù)實(shí)際需求定義多個不同的 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-ceph
  csi.storage.k8s.io/controller-expand-secret-name: rook-csi-rbd-provisioner
  csi.storage.k8s.io/controller-expand-secret-namespace: rook-ceph
  csi.storage.k8s.io/fstype: ext4
  csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node
  csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
  csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner
  csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph
  imageFeatures: layering
  imageFormat: "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ù)用于指定提供程序所需的密鑰的名稱和命名空間。
  • 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: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: nginx:latest
        ports:
        - containerPort: 80
        volumeMounts:
        - name: my-persistent-storage
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: my-persistent-storage
    spec:
      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:
    - ReadWriteOnce
  storageClassName: rook-ceph-rbd    # 指定要使用的 StorageClass 的名稱
  resources:
    requests:
      storage: 1Gi                   # 請求 1GB 的存儲容量

PVC擴(kuò)容

直接修改 “storage: 1Gi ” 修改為2G即可,但是生效還需要等幾分鐘。

kubectl edit pvc my-pvc

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • k8s中secret的用法詳解

    k8s中secret的用法詳解

    secret用于加密pod訪問數(shù)據(jù)庫的用戶憑證,這篇文章主要介紹了k8s中secret的用法詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 使用k8tz解決pod內(nèi)的時區(qū)問題(坑的解決)

    使用k8tz解決pod內(nèi)的時區(qū)問題(坑的解決)

    時區(qū)的不一致,會帶來很多困擾。即使代碼與時區(qū)無關(guān),但容器日志與系統(tǒng)日志時間相關(guān)聯(lián)排查問題也會讓人頭疼,這篇文章主要介紹了使用k8tz優(yōu)雅的解決pod內(nèi)的時區(qū)問題,需要的朋友可以參考下
    2022-10-10
  • k8s部署ingress-nginx的詳細(xì)步驟大全

    k8s部署ingress-nginx的詳細(xì)步驟大全

    nginx一般是作為服務(wù)的入口,其在kubernetes的部署方式也大致相似,這篇文章主要給大家介紹了關(guān)于k8s部署ingress-nginx的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • kubernetes部署dashboard及應(yīng)用小結(jié)

    kubernetes部署dashboard及應(yīng)用小結(jié)

    Dashboard?是基于網(wǎng)頁的?Kubernetes?用戶界面,可以對?Deployment?實(shí)現(xiàn)彈性伸縮、發(fā)起滾動升級、重啟?Pod?或者使用向?qū)?chuàng)建新的應(yīng)用,這篇文章主要介紹了kubernetes部署dashboard,需要的朋友可以參考下
    2024-06-06
  • k8s整合istio配置gateway入口、配置集群內(nèi)部服務(wù)調(diào)用管理(最新推薦)

    k8s整合istio配置gateway入口、配置集群內(nèi)部服務(wù)調(diào)用管理(最新推薦)

    這篇文章主要介紹了k8s整合istio配置gateway入口、配置集群內(nèi)部服務(wù)調(diào)用管理,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • 詳解kubectl資源管理命令(陳述式)

    詳解kubectl資源管理命令(陳述式)

    kubectl是官方的CTL命令行工具,用于與apiserver進(jìn)行通信,將用戶在命令行輸入的命令,組織并轉(zhuǎn)化為apiserver能識別的信息,進(jìn)而實(shí)現(xiàn)管理k8s各種資源的一種有效途徑,這篇文章主要介紹了詳解kubectl資源管理命令(陳述式),需要的朋友可以參考下
    2025-04-04
  • k8s編排之DaemonSet知識點(diǎn)詳解

    k8s編排之DaemonSet知識點(diǎn)詳解

    這篇文章主要為大家介紹了k8s編排之DaemonSet知識點(diǎn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • k8s容器資源限制方式

    k8s容器資源限制方式

    K8s通過request和limit管理容器資源,內(nèi)存單位為字節(jié),CPU為核心數(shù),內(nèi)存超限會終止容器,CPU超限不影響,LimitRange設(shè)namespace資源上下限,ResourceQuota限制總資源配額及Pod數(shù)量,二者均在創(chuàng)建時生效,不影響已有資源
    2025-07-07
  • K8S中的mountPath和subPath使用詳解

    K8S中的mountPath和subPath使用詳解

    這篇文章主要介紹了K8S中的mountPath和subPath使用的相關(guān)資料,通過示例展示了如何使用mountPath和subPath來掛載ConfigMap到Pod中,并解決了服務(wù)無法啟動的問題,需要的朋友可以參考下
    2024-12-12
  • 管理k8s的資源類型(PV/PVC)的腳本詳解

    管理k8s的資源類型(PV/PVC)的腳本詳解

    本文介紹了四種解決格式不正確問題的方法,包括使用dos2unix轉(zhuǎn)換文件格式、使用sed命令刪除CR字符、使用vim進(jìn)行格式轉(zhuǎn)換以及重新創(chuàng)建腳本
    2025-10-10

最新評論

赞皇县| 郓城县| 兴山县| 玛纳斯县| 武威市| 金阳县| 称多县| 昭苏县| 济南市| 阜宁县| 津市市| 大宁县| 文登市| 芷江| 信丰县| 电白县| 玉龙| 鹿邑县| 搜索| 元江| 拜城县| 新民市| 杭锦旗| 黎城县| 青龙| 高阳县| 沂水县| 隆昌县| 烟台市| 北票市| 嘉义市| 岳阳县| 嘉定区| 怀安县| 贺州市| 陆川县| 邓州市| 渝中区| 武胜县| 铁岭市| 梓潼县|