k8s 儲存卷的定義與使用
認識PV/PVC/StorageClass
**PersistentVolume(PV):**是叢集中由管理員配置的一段網路儲存。 它是叢集中的資源,就像節點是叢集資源一樣。 PV是容量外掛,如Volumes,但其生命週期獨立於使用PV的任何單個pod。 此API物件捕獲儲存實現的詳細資訊,包括NFS,iSCSI或特定於雲提供程式的儲存系統。
**PersistentVolumeClaim(PVC)**是由使用者進行儲存的請求。 它類似於pod。 Pod消耗節點資源,PVC消耗PV資源。Pod可以請求特定級別的資源(CPU和記憶體)。宣告可以請求特定的大小和訪問模式(例如,可以一次讀/寫或多次只讀)。
雖然PersistentVolumeClaims允許使用者使用抽象儲存資源,但是PersistentVolumes對於不同的問題,使用者通常需要具有不同屬性(例如效能)。群集管理員需要能夠提供各種PersistentVolumes不同的方式,而不僅僅是大小和訪問模式,而不會讓使用者瞭解這些卷的實現方式。對於這些需求,有StorageClass 資源。
StorageClass為管理員提供了一種描述他們提供的儲存的“類”的方法。 不同的類可能對映到服務質量級別,或備份策略,或者由群集管理員確定的任意策略。 Kubernetes本身對於什麼類別代表是不言而喻的。 這個概念有時在其他儲存系統中稱為“配置檔案”。
建立PV -- PV 的全稱是:PersistentVolume(持久化卷)
第一種: NFS 型別的儲存卷PV
(1)安裝NFS:
方法1: docker run -d --name nfs --privileged -v /some/where/fileshare:/nfsshare -e SHARED_DIRECTORY=/nfsshare -p 2049:2049 itsthenetwork/nfs-server-alpine:latest (dockers環境)
方法2:https://www.jianshu.com/p/f5d1e8594deb
(2)建立PV:
建立檔案pv_nfs.yml
apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv spec: capacity: storage: 200M accessModes: - ReadWriteMany nfs: server: 172.17.97.148 path: "/"
執行安裝:kubectl apply -f pv_nfs.yml
第二種: LOCAL型別的儲存卷PV:
建立檔案pv_local.yml
apiVersion: v1 kind: PersistentVolume metadata: name: pv-local spec: capacity: storage: 10Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete storageClassName: local-storage local: path: /some/where/localpv nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - kind1-control-plane - kind1-worker
執行安裝:kubectl apply -fpv_local.yml
第三種: 直接在建立pod時,使用本地儲存
PV的使用:
1. 建立PVC,建立檔案 pvc_nfs.yml
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-nfs spec: accessModes: - ReadWriteMany resources: requests: storage: 2Gi
部署 pvc:kubectl apply -f pvc_nfs.yml
2.使用PVC
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx-pvc spec: replicas: 2 template: metadata: labels: app: nginx-pvc spec: containers: - name: nginx image: nginx:1.7.9 imagePullPolicy: IfNotPresent ports: - containerPort: 80 name: web volumeMounts: - name: www mountPath: /usr/share/nginx/html volumes: - name: www persistentVolumeClaim: claimName: pvc-nfs --- apiVersion: v1 kind: Service metadata: name: nginx-svc labels: app: nginx-svc spec: type: NodePort ports: - port: 80 targetPort: web nodePort:30001 selector: app: nginx-pvc
參考資料:
https://blog.csdn.net/qq_25611295/article/details/86065053?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
https://blog.csdn.net/weixin_34391854/article/details/86085596?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param