1.離線環境
CPU:Hygon C86 7285 32-core Processor
操作系統:麒麟操作系統
containerd:1.7.27
Kubernetes:1.26.12
KubeSphere:4.1.2
kubekey:3.1.10
Harbor:2.13.1
Postgis:17-3.5
2創建StorageClass
2.1創建?
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
??name: local-postgresql
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Retain
apiVersion: storage.k8s.io/v1
表示使用的是 Kubernetes 的 storage.k8s.io/v1 API 版本,適用于 StorageClass 資源。
kind: StorageClass
表示這是一個 StorageClass 資源對象。
name: local-postgresql
StorageClass 的名稱為 local-postgresql,在創建 PVC(PersistentVolumeClaim)時可以通過 storageClassName 字段引用它。
reclaimPolicy: Retain
當 PVC 被刪除后,PV 的回收策略為 Retain,即保留 PV 及其數據。
這樣管理員可以手動清理數據或回收 PV,而不是自動刪除數據。
provisioner: kubernetes.io/no-provisioner: 指定不自動供給卷,因為本地存儲不能動態供給。
volumeBindingMode: WaitForFirstConsumer: 等待第一個消費者出現后才綁定PV,這對于本地存儲是必要的,因為它允許調度器考慮Pod和節點之間的親緣性。
?2.2執行
kubectl apply -f postgresql-storage.yaml
2.3查看
kubectl get storageclass
?
2.4 詳情
kubectl describe storageclass local-postgresql
Name: StorageClass 的名稱。
IsDefaultClass: 指示這個 StorageClass 是否被設置為默認。如果是,默認的新 PVC 將自動使用這個 StorageClass,除非另有指定。
Provisioner: 描述了哪個提供程序負責動態供應卷。在本例中是 kubernetes.io/no-provisioner,意味著不會自動供應卷,適用于本地存儲。
Parameters: 存儲類的參數,這里沒有特別的參數。
AllowVolumeExpansion: 顯示是否允許通過編輯 PVC 來擴展卷大小。
ReclaimPolicy: 當一個與之相關的 PVC 被刪除時,決定 PV 應該如何處理(保留或刪除)。
VolumeBindingMode: 決定了何時進行卷綁定和動態卷創建。WaitForFirstConsumer 模式會在調度 Pod 之前延遲卷綁定和動態卷創建,這樣可以使調度器考慮 Pod 的資源需求。
?
4手動創建PV
4.1創建?
apiVersion: v1
kind: PersistentVolume
metadata:
??name: postgresql-pv
spec:
??capacity:
????storage: 10Gi
??accessModes:
??- ReadWriteOnce
??persistentVolumeReclaimPolicy: Retain
??storageClassName: local-postgresql
??local:
????path: /app/postdata?
??nodeAffinity:
????required:
??????nodeSelectorTerms:
??????- matchExpressions:
????????- key: kubernetes.io/hostname
??????????operator: In
??????????values:
??????????- master
如果您的集群中有多個節點,并且每個節點都有一個類似的本地目錄,則需要為每個節點創建一個對應的 PV。
apiVersion: v1: 表示使用的是 Kubernetes API 的 v1 版本。
kind: PersistentVolume: 指定了此資源對象的類型是 PersistentVolume,即持久卷。
name: postgresql-pv: 定義了這個持久卷的名字為 postgresql-pv。
capacity: 容量部分指定了該持久卷提供的存儲大小為 10Gi。
accessModes: 訪問模式,這里設置為 ReadWriteOnce,意味著該卷可以被一個節點以讀寫模式掛載。
persistentVolumeReclaimPolicy: 設置了當持久卷被釋放時的策略為 Retain,即保留數據,不自動刪除卷上的數據。
storageClassName: 存儲類名稱為 local-postgresql,這通常用于將 PV 與 PVC (PersistentVolumeClaim) 匹配起來。
local: 這個字段表明這是一個本地存儲類型的持久卷,并且通過 path: /app/postdata 指定了宿主機上的實際路徑,也就是該持久卷對應的數據存儲位置。
nodeAffinity: 節點親和性配置,確保該持久卷只能被特定節點使用。在這個例子中,required 下的 nodeSelectorTerms 和 matchExpressions 用來指定必須滿足的條件:key 是 kubernetes.io/hostname,operator 是 In,而 values 列表中只有一個值 master,這意味著該持久卷只能被 hostname 為 master 的節點使用。
4調整postgresql-sts.yaml
將storageClassName:local改成? ?storageClassName: local-postgresql
?