kubernetes中使用NFS創建pv_pvc


Persistent Volume(持久化卷)簡稱PV, 是一個K8S資源對象,我們可以單獨創建一個PV, 它不和Pod直接發生關系, 而是通過
Persistent Volume Claim, 簡稱PVC來實現動態綁定, 我們會在Pod定義里指定創建好的PVC, 然后PVC會根據Pod的要求去自
動綁定合適的PV給Pod使用。
 
 
持久化卷下PV和PVC概念:
Persistent Volume(PV)是由管理員設置的存儲,它是群集的一部分。就像節點是集群中的資源一樣,PV 也是集群中的資
源。 PV 是 Volume 之類的卷插件,但具有獨立於使用 PV 的 Pod 的生命周期。此 API 對象包含存儲實現的細節,即 NFS、
iSCSI 或特定於雲供應商的存儲系統。
PersistentVolumeClaim(PVC)是用戶存儲的請求。它與 Pod 相似,Pod 消耗節點資源,PVC 消耗 PV 資源。Pod 可以
請求特定級別的資源(CPU 和內存)。PVC聲明可以請求特定的大小和訪問模式(例如,可以以讀/寫一次或只讀多次模式掛
載)。
 
 
它和普通Volume的區別是什么呢?
普通Volume和使用它的Pod之間是一種靜態綁定關系,在定義Pod的文件里,同時定義了它使用的Volume。Volume是Pod
的附屬品,我們無法單獨創建一個Volume,因為它不是一個獨立的K8S資源對象。
 
 
 
1 准備一台機器,搭建NFS服務
 
yum install nfs-utils
 
vim /etc/exports
/data/k8s/ 172.16.1.0/24(sync,rw,no_root_squash)
 
systemctl start nfs;  systemctl start rpcbind  
systemctl enable nfs

  

2 在node節點上測試
 
yum install nfs-utils
showmount -e 172.16.1.131

   

3 創建pv(master上)
 
vim mypv.yaml //內容如下
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv001
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: /data/k8s/
    server: 172.16.1.131

   

kubectl create -f mypv.yaml
kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv001 10Gi RWX Retain Available 10m
 
 
狀態為Available,這是因為它還沒有綁定到任何的pvc上面,當定義完pvc后,就可以自動綁定了。
 
4 創建pvc(master上)
 
vim mypvc.yaml //內容如下
 
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 8Gi

   

kubectl create -f mypvc.yaml
kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
myclaim Bound pv001 10Gi RWX 2m
可以看到,pvc狀態為Bound,它綁定了pv001
 
5 定義pod
vim pvpod.yaml //內容如下
 
apiVersion: v1
kind: Pod
metadata:
  name: httpd-pvpod
spec:
  containers:
  - image: httpd
    name: httpd-withpvc-pod
    imagePullPolicy: Always
    volumeMounts:
    - mountPath: "/usr/local/apache2/htdocs/"
      name: httpd-volume
  volumes:
    - name: httpd-volume
      persistentVolumeClaim:
        claimName: myclaim

   

kubectl create -f pvpod.yaml
kubectl describe pod httpd-pvpod //查看Volumes那部分里的ClaimName
 
 
6 驗證
 
1)到NFS的共享目錄下創建一個文件
cd /data/k8s/
echo "Test file" > 1.html
 
2)進入到httpd-pod里
kubectl exec -it httpd-pvpod bash
cat /usr/local/apache2/htdocs/1.html
 
3)刪除httpd-pvpod
kubectl delete pod httpd-pvpod
cat /data/k8s/1.html
 
 
4)重建httpd-pod
kubectl create -f pvpod.yaml
 
 
5)curl訪問
 
kubectl get pod httpd-pvpod -o wide //查看其對應的IP
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
httpd-pod 1/1 Running 0 2m 172.20.3.5 172.7.15.114 <none>
 
curl 172.20.3.5/1.html
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM