Kubernetes進階之PersistentVolumeClaim動態(tài)供給實現(xiàn)NFS網(wǎng)絡存儲

K8s進階之PersistentVolumeClaim 動態(tài)供給
先來簡單看一下這張圖實現(xiàn)的過程,然后我們再來研究一下

成都創(chuàng)新互聯(lián)公司主要業(yè)務有網(wǎng)站營銷策劃、成都做網(wǎng)站、網(wǎng)站制作、微信公眾號開發(fā)、小程序制作、成都h5網(wǎng)站建設、程序開發(fā)等業(yè)務。一次合作終身朋友,是我們奉行的宗旨;我們不僅僅把客戶當客戶,還把客戶視為我們的合作伙伴,在開展業(yè)務的過程中,公司還積累了豐富的行業(yè)經(jīng)驗、營銷型網(wǎng)站建設資源和合作伙伴關系資源,并逐漸建立起規(guī)范的客戶服務和保障體系。 

Kubernetes進階之PersistentVolumeClaim 動態(tài)供給實現(xiàn)NFS網(wǎng)絡存儲

說在前面的話,靜態(tài)供給的話,會需要我們手動去創(chuàng)建pv,如果沒有足夠的資源,找不到合適的pv,那么pod就會處于pending等待的狀態(tài),就是說找不到合適的伴侶了,
所以解決這兩種問題,就給出了這種動態(tài)供給,主要是能夠自動幫你創(chuàng)建pv
,就是你需要多大的容量,就自動給你創(chuàng)建多大的容量,也就是pv,k8s幫你創(chuàng)建了,創(chuàng)建pvc的時候就需要找pv了,這個時候就交給這個存儲類了,而存儲類呢,去幫你創(chuàng)建這些pv,存儲類呢,就是實現(xiàn)了對指定存儲的一個支持,直接幫你去調(diào)用api去創(chuàng)建存儲類,所以就不需要人工的去幫你創(chuàng)建pv了。

而你去想想,當節(jié)點比較多,業(yè)務比較多的時候,再去人工手動創(chuàng)建pv,量還是很大的,而且也不是很好去維護。

而動態(tài)供給主要的一個實現(xiàn)就是StorageClass存儲對象,其實它就是聲明你使用哪個存儲,然后呢幫你去連接,再幫你去自動創(chuàng)建pv。

舉個例子更好去理解
話不多說上圖
Kubernetes進階之PersistentVolumeClaim 動態(tài)供給實現(xiàn)NFS網(wǎng)絡存儲
其實它是一個基于NFS實現(xiàn)的一個pv供給,它大概流程是這樣的,我們可能會創(chuàng)建一個statefulset有狀態(tài)的應用存儲,然后有一個管理的nfs-storageClass,因為nfs目前是不支持這個自動的創(chuàng)建pv的,我們可以利用社區(qū)實現(xiàn)的插件來完成這個pv的自動創(chuàng)建,也就是StorageClass這一塊,創(chuàng)建完之后,然后pod再去引用。

這個是kubernetes支持的動態(tài)供給的存儲插件
https://kubernetes.io/docs/concepts/storage/storage-classes/
這里面呢會告訴你哪些存儲支持哪些不支持,支持的話就不用使用社區(qū)的存儲類了,如果不支持就要去找社區(qū)的存儲類了,打鉤的都是支持的,沒打鉤的就是不支持的。
Kubernetes進階之PersistentVolumeClaim 動態(tài)供給實現(xiàn)NFS網(wǎng)絡存儲
這個是那個社區(qū)給我們提供的插件,來看一下
https://github.com/kubernetes-incubator/external-storage
Kubernetes進階之PersistentVolumeClaim 動態(tài)供給實現(xiàn)NFS網(wǎng)絡存儲
K8s默認是不支持的,我們可以使用這個nfs-client這里面提供的yaml,社區(qū)開發(fā)的一個組件,這個組件能幫你自動創(chuàng)建PV,在deploy里面,我們會用到class,這個就會聲明了你使用
哪個存儲,哪個提供的,它會以一個應用的方式部署起來,另外一個會用到的就是rbac,
這個存儲類會訪問API,所以要為他定義RBAC授權(quán)策略,還有deployment,它是定義了以組件的形式部署起來,這個組件里面會有一個鏡像,直接下載這個鏡像就可以了,它可以幫我們自動的去創(chuàng)建pv,其實就是它來做的,如果k8s支持的話,就直接去調(diào)了,但k8s對NFS沒有支持,所有需要使用這么個社區(qū)的組件來實現(xiàn)了,這里會定義NFS服務器的地址還有數(shù)據(jù)卷的來源
現(xiàn)在我們演示一下:
聲明這里的yaml文件可以去剛才我發(fā)的社區(qū)地址當下來

[root@k8s-master demo]# mkdir nfs-client
[root@k8s-master demo]# cd nfs-client/
[root@k8s-master nfs-client]# rz -E
rz waiting to receive.
[root@k8s-master nfs-client]# ls
class.yaml  deployment.yaml  rbac.yaml

先創(chuàng)建一下rbac,這里也不用定義,直接創(chuàng)建就可以了
[root@k8s-master nfs-client]# kubectl create -f rbac.yaml
這里需要修改一個我們NFS服務器的地址以及NFS服務器的掛載目錄

[root@k8s-master nfs-client]# vim deployment.yaml 
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: nfs-client-provisioner
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccountName: nfs-client-provisioner
      containers:
        - name: nfs-client-provisioner
          image: zhaocheng172/nfs-client-provisioner:latest
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: fuseim.pri/ifs
            - name: NFS_SERVER
              value: 192.168.30.27
            - name: NFS_PATH
              value: /opt/k8s
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.30.27
            path: /opt/k8s
[root@k8s-master nfs-client]# kubectl create -f class.yaml 
[root@k8s-master nfs-client]# kubectl create -f deployment.yaml 

這里提供者就是fuseim.pri/ifs,在我們的class里面可以看到,storage需要告知使用者,使用者部署應用到k8s中,想使用這個自動供給,你必須告知它,它需要你在yaml文件里聲明這個提供者,那就意味著提供者storageclass可以配置多個,可以是NFS,另一個是Ceph,另一個是云存儲,都可以可以多個,只要它在創(chuàng)建應用時指定使用哪個storageclass,它就會在指定在哪個存儲上創(chuàng)建自動pv

[root@k8s-master nfs-client]# kubectl get storageclass

managed-nfs-storage   fuseim.pri/ifs   51s
[root@k8s-master nfs-client]# kubectl get pod
NAME                                     READY   STATUS    RESTARTS   AGE
my-pod                                   1/1     Running   0          18h
nfs-744d977b46-dh9xj                     1/1     Running   0          18h
nfs-744d977b46-kcx6h                     1/1     Running   0          18h
nfs-744d977b46-wqhc6                     1/1     Running   0          18h
nfs-client-provisioner-fbc77b9d4-kkkll   1/1     Running   0          27s

現(xiàn)在我們就可以使用pv的自動供給了
現(xiàn)在我們來測試一下,我在我原有的靜態(tài)pod之上,在pvc上加上storageclass的名字
指定我們的存儲類
為了測試我們實現(xiàn)自動供給,我們把原來的靜態(tài)供給刪除掉

[root@k8s-master nfs-client]# kubectl get pv,pvc

persistentvolume/zhaocheng        5Gi        RWX            Retain           Released    default/my-pvc                           18h
persistentvolume/zhaochengcheng   10Gi       RWX            Retain           Available                                            18h

[root@k8s-master nfs-client]# kubectl delete persistentvolume/zhaocheng 
persistentvolume "zhaocheng" deleted
[root@k8s-master nfs-client]# kubectl delete persistentvolume/zhaochengcheng
persistentvolume "zhaochengcheng" deleted
[root@k8s-master nfs-client]# kubectl get pv,pvc

No resources found.

這是我們動態(tài)供給的yaml格式,在pvc去指定我們的存儲類storageClassName:
"managed-nfs-storage"

[root@k8s-master nfs-client]# vim pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: nginx
    image: nginx:latest
    ports:
    - containerPort: 80
    volumeMounts:
      - name: www
        mountPath: /usr/share/nginx/html
  volumes:
    - name: www
      persistentVolumeClaim:
        claimName: my-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: "managed-nfs-storage"
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi

[root@k8s-master nfs-client]# kubectl create -f pod.yaml 

查看我們的pv,pvc已經(jīng)自動幫我們?nèi)?chuàng)建,就不用我們手動再去創(chuàng)建pv了

[root@k8s-master nfs-client]# kubectl get pod

my-pod                                   1/1     Running   0          110s
nfs-744d977b46-dh9xj                     1/1     Running   0          18h
nfs-744d977b46-kcx6h                     1/1     Running   0          18h
nfs-744d977b46-wqhc6                     1/1     Running   0          18h
nfs-client-provisioner-fbc77b9d4-kkkll   1/1     Running   0          20m
[root@k8s-master nfs-client]# kubectl get pv,pvc

persistentvolume/pvc-a24d4a5e-8f9d-4478-bfe5-b86e2360ae5a   5Gi        RWX            Delete           Bound    default/my-pvc   managed-nfs-storage            67s

NAME                           STATUS   VOLUME                                     
persistentvolumeclaim/my-pvc   Bound    pvc-a24d4a5e-8f9d-4478-bfe5-b86e2360ae5a   5Gi        RWX            managed-nfs-storage   67s

而在我們nfs服務器上也能看到pvc的目錄,現(xiàn)在我們就可以去用了

[root@localhost k8s]# ls
default-my-pvc-pvc-a24d4a5e-8f9d-4478-bfe5-b86e2360ae5a  wwwroot  zhaocheng  zhaochengcheng

[root@localhost k8s]# cd default-my-pvc-pvc-a24d4a5e-8f9d-4478-bfe5-b86e2360ae5a/
[root@localhost default-my-pvc-pvc-a24d4a5e-8f9d-4478-bfe5-b86e2360ae5a]# ls
[root@localhost default-my-pvc-pvc-a24d4a5e-8f9d-4478-bfe5-b86e2360ae5a]# echo "hello persistentvolumeclaim" > index.html

查看我們的容器pod

[root@k8s-master nfs-client]# kubectl exec -it my-pod bash
root@my-pod:/# cat /usr/share/nginx/html/index.html 
hello persistentvolumeclaim

文章名稱:Kubernetes進階之PersistentVolumeClaim動態(tài)供給實現(xiàn)NFS網(wǎng)絡存儲
標題網(wǎng)址:http://bm7419.com/article8/pcddip.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、網(wǎng)站設計公司、網(wǎng)頁設計公司、標簽優(yōu)化App設計、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)