kubernetes版本:1.16.0
創(chuàng)新互聯(lián)公司從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元鐵嶺做網(wǎng)站,已為上家服務(wù),為鐵嶺各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108
概念
pv全稱為PersistentVolume(持久化卷),是對底層的共享存儲的一種抽象,它和具體的底層的共享存儲技術(shù)的實(shí)現(xiàn)方式有關(guān),比如 Ceph、GlusterFS、NFS 等。
pvc全稱PersistentVolumeClaim(持久化卷聲明),PVC 是用戶存儲的一種聲明,PVC 消耗的是 PV 資源,對于真正使用存儲的用戶不需要關(guān)心底層的存儲實(shí)現(xiàn)細(xì)節(jié),只需要直接使用 PVC 即可。
NFS
k8s支持的 PV 類型有很多,常見的有 Ceph、GlusterFs、nfs以及 hostPath,不過 hostPath 僅僅可用于單機(jī)測試。方便起見,我們以NFS存儲資源進(jìn)行演示。
接下來我們在節(jié)點(diǎn)192.168.248.139上面安裝nfs服務(wù),共享的數(shù)據(jù)目錄為/data/nfs/
1、安裝配置nfs
yum install nfs-utils rpcbind -y mkdir -p /data/nfs && chmod 755 /data/nfs/ cat /etc/exports /data/nfs *(rw,sync,no_root_squash) systemctl start rpcbind nfs && systemctl enable rpcbind nfs
在k8s上配置使用pv與pvc之前,我們需要在所有的node節(jié)點(diǎn)上安裝nfs客戶端,我所使用的環(huán)境節(jié)點(diǎn)如下:
[root@k8s-master-01 ~]# kubectl get nodes -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME k8s-node-01 Ready <none> 90d v1.16.0 192.168.248.134 <none> CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 docker://18.9.6 k8s-node-02 Ready <none> 90d v1.16.0 192.168.248.135 <none> CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 docker://18.9.6
必須在所有節(jié)點(diǎn)都安裝 nfs 客戶端,否則可能會導(dǎo)致 PV 掛載不上的問題。
創(chuàng)建pv
部署完nfs存儲,接下來我們就可以通過編輯yaml文件,來創(chuàng)建pv和pvc資源了。下面我們來創(chuàng)建一個 PV 資源對象,使用 nfs 類型的后端存儲,2G 的存儲空間,訪問模式為 ReadWriteOnce,回收策略為 Recyle。
vim pv1.yaml
apiVersion: v1 kind: PersistentVolume metadata: name: pv-01 labels: name: pv-01 spec: nfs: path: /data/nfs server: 192.168.248.139 accessModes: ["ReadWriteOnce"] persistentVolumeReclaimPolicy: Retain capacity: storage: 2Gi
對以上yaml文件中一些參數(shù)做以下解釋
nfs:表示使用的后端存儲為nfs
path:表示后端存儲共享的數(shù)據(jù)目錄
accessMode:是用來對pv進(jìn)行訪問權(quán)限的設(shè)置,包括以下幾種方式:
ReadWriteOnce(RWO):讀寫權(quán)限,只能被單個節(jié)點(diǎn)掛載
ReadOnlyMany(ROX):只讀權(quán)限,可以被多個節(jié)點(diǎn)掛載
ReadWriteMany(RWX):讀寫權(quán)限,可以被多個節(jié)點(diǎn)掛載
persistentVolumeReclaimPolicy:表示pv的回收策略,默認(rèn)為Retain,目前支持的有三種:
Retain(保留)
Recycle(回收)
Delete(刪除)
然后使用kubectl命令創(chuàng)建即可
[root@k8s-master-01 pv]# kubectl apply -f pv1.yaml persistentvolume/pv-01 created [root@k8s-master-01 pv]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE MySQL-pv-volume 20Gi RWO Retain Bound default/mysql-pv-claim manual 2d2h pv-01 2Gi RWO Recycle Available 6s
如上,pv-01已經(jīng)創(chuàng)建成功,狀態(tài)為Available,表示pv-01已經(jīng)準(zhǔn)備就緒,可以被pvc申請使用。
pv的生命周期中可能會處于4種不同的階段:
Available(可用)
Bound(已綁定)
Released(已釋放)
Failed(失?。?/p>
創(chuàng)建pvc
對應(yīng)的yaml文件內(nèi)容如下:
vim pvc-nfs.yaml
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-nfs spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 2Gi
然后使用kubectl命令創(chuàng)建即可
[root@k8s-master-01 pv]# kubectl apply -f pvc-nfs.yaml persistentvolumeclaim/pvc-nfs created [root@k8s-master-01 pv]# kubectl get pv,pvc NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE persistentvolume/mysql-pv-volume 20Gi RWO Retain Bound default/mysql-pv-claim manual 2d3h persistentvolume/pv-01 2Gi RWO Retain Bound default/pvc-nfs 19s NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/mysql-pv-claim Bound mysql-pv-volume 20Gi RWO manual 2d3h persistentvolumeclaim/pvc-nfs Bound pv-01 2Gi RWO 7s
可以看到 pvc-nfs已經(jīng)創(chuàng)建成功,并且處于綁定狀態(tài),pv也處于綁定狀態(tài)。
使用pvc
上面我們已經(jīng)完成了pv和pvc的創(chuàng)建及綁定,接下來我們創(chuàng)建一個deployment,來使用上面的pvc
vim deployment-pvc.yaml
apiVersion: v1 kind: Service metadata: name: svc-nginx-demo spec: ports: - port: 80 protocol: TCP targetPort: 80 nodePort: 31080 selector: app: liheng type: NodePort --- apiVersion: apps/v1 kind: Deployment metadata: name: deployment-pvc-demo labels: app: deployment-pvc-demo annotations: liheng86876/created-by: "LIHENG" spec: replicas: 3 selector: matchLabels: app: liheng template: metadata: labels: app: liheng spec: containers: - name: web-test image: nginx imagePullPolicy: IfNotPresent ports: - name: http containerPort: 80 volumeMounts: - name: html mountPath: /usr/share/nginx/html/ volumes: - name: html persistentVolumeClaim: claimName: pvc-nfs
然后使用kubectl命令創(chuàng)建即可
[root@k8s-master-01 pv]# kubectl get deploy,pod,svc NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/deployment-pvc-demo 3/3 3 3 2m6s NAME READY STATUS RESTARTS AGE pod/deployment-pvc-demo-77859488fc-bmlhd 1/1 Running 0 2m5s pod/deployment-pvc-demo-77859488fc-c8xkn 1/1 Running 0 2m5s pod/deployment-pvc-demo-77859488fc-pz6g9 1/1 Running 0 2m5s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 90d service/svc-nginx-demo NodePort 10.0.0.194 <none> 80:31080/TCP 2m6s
可以看到pod已經(jīng)處于running狀態(tài),我們可以通過如下命令查看deployment和svc的詳細(xì)信息
[root@k8s-master-01 pv]# kubectl describe deploy deployment-pvc-demo Name: deployment-pvc-demo Namespace: default CreationTimestamp: Mon, 17 Feb 2020 18:04:26 +0800 Labels: app=deployment-pvc-demo Annotations: deployment.kubernetes.io/revision: 1 kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{"liheng86876/created-by":"LIHENG"},"labels":{"app":"deployment-pvc-... liheng86876/created-by: LIHENG Selector: app=liheng Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=liheng Containers: web-test: Image: nginx Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: /usr/share/nginx/html/ from html (rw) Volumes: html: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: pvc-nfs ReadOnly: false Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: <none> NewReplicaSet: deployment-pvc-demo-77859488fc (3/3 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 4m48s deployment-controller Scaled up replica set deployment-pvc-demo-77859488fc to 3
[root@k8s-master-01 pv]# kubectl describe svc svc-nginx-demo Name: svc-nginx-demo Namespace: default Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"svc-nginx-demo","namespace":"default"},"spec":{"ports":[{"nodePor... Selector: app=liheng Type: NodePort IP: 10.0.0.194 Port: <unset> 80/TCP TargetPort: 80/TCP NodePort: <unset> 31080/TCP Endpoints: 10.244.0.134:80,10.244.0.135:80,10.244.1.129:80 Session Affinity: None External Traffic Policy: Cluster Events: <none>
訪問測試
我們就可以通過任意節(jié)點(diǎn)的 IP:31080 端口來訪問我們這里的Nginx服務(wù)
為什么會出現(xiàn)403呢???那是應(yīng)為我們的nfs共享目錄沒有文件導(dǎo)致
[root@localhost nfs]# pwd /data/nfs [root@localhost nfs]# ls [root@localhost nfs]# 我們創(chuàng)建一個index.html,然后訪問測試 [root@localhost nfs]# echo "<h2>Welcome k8s</h2>" > index.html
然后在刷新頁面:
我們可以看到已經(jīng)可以正常訪問到頁面。
數(shù)據(jù)持久化測試
測試方法:
1、我們將創(chuàng)建的nginx應(yīng)用刪除掉,然后重新創(chuàng)建nginx應(yīng)用,然后訪問測試
結(jié)果:后端nfs存儲里面的數(shù)據(jù)不會丟失,頁面訪問正常
2、我們將創(chuàng)建的nginx應(yīng)用和pv及pvc全部刪除,然后重新創(chuàng)建,然后訪問測試
結(jié)果:后端nfs存儲里面的數(shù)據(jù)不會丟失,頁面訪問正常
本文名稱:kubernetes如何通過?pv和pvc來實(shí)現(xiàn)存儲管理?
分享鏈接:http://muchs.cn/article44/joosee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、面包屑導(dǎo)航、移動網(wǎng)站建設(shè)、定制網(wǎng)站、用戶體驗(yàn)、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)