亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎樣實現自動創建PV

發布時間:2020-05-29 18:56:57 來源:億速云 閱讀:1141 作者:鴿子 欄目:云計算

一、數據持久化的類型:
1.emptyDir:只能作為臨時存儲使用。如果容器被刪除,數據仍然存在,如果Pod被刪除,數據也會被刪除。
2.HostPath:使用場景不多,會增加Pod與節點之間的耦合性。
3.PV、PVC:基于NFS服務。PV狀態必須為Available,訪問模式必須相同及存儲類的名稱必須相同。
出錯:Pod不斷的重啟:
1.swap沒有關閉,導致集群運行不正常。
2.內存不足,運行服務也會重啟。

注意:基于NFs創建PV,與PVC。
并且需要創建PV所需的宿主機目錄。

二、做實驗類比,如果集群中存在兩個空間大小不同的PV,PVC如何跟PV關聯。
1.創建PV(創建兩個空間大小不同的PV,web-pv1和web-pv2)
1.[root@master yaml]# vim web1.yaml   
2.  
3.kind: PersistentVolume  
4.apiVersion: v1  
5.metadata:  
6.  name: web-pv1  
7.spec:  
8.  accessModes:  
9.    - ReadWriteOnce          
10.  capacity:  
11.    storage: 1Gi  
12.  persistentVolumeReclaimPolicy: Recycle  
13.  storageClassName: nfs  
14.  nfs:  
15.    path: /nfsdata/web1  
16.    server: 192.168.1.1  
17.  
18.[root@master yaml]# mkdir /nfsdata/web1  
19.[root@master yaml]# kubectl apply -f web1.yaml   
20.persistentvolume/web-pv1 created  
21.[root@master yaml]# kubectl get pv  
22.NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM             STORAGECLASS   REASON   AGE  
23.web-pv1   1Gi        RWO            Recycle          Available                     nfs                     7s  
2.創建第二個Pv
1.[root@master yaml]# vim web2.yaml   
2.kind: PersistentVolume  
3.apiVersion: v1  
4.metadata:  
5.  name: web-pv2  
6.spec:  
7.  accessModes:  
8.    - ReadWriteOnce  
9.  capacity:  
10.    storage: 2Gi  
11.  persistentVolumeReclaimPolicy: Recycle  
12.  storageClassName: nfs  
13.  nfs:  
14.    path: /nfsdata/web2  
15.    server: 192.168.1.1
16.  
17.[root@master yaml]# kubectl apply -f web2.yaml   
18.persistentvolume/web-pv2 created  
19.  
20.[root@master yaml]# kubectl get pv  
21.NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM             STORAGECLASS   REASON   AGE  
22.web-pv1   1Gi        RWO            Recycle          Available                     nfs                     103s  
23.web-pv2   2Gi        RWO            Recycle          Available                     nfs                     14s  

3.創建PVC1.[root@master yaml]# vim web-pvc.yaml   
br/>3.apiVersion: v1  
4.metadata:  
5.  name: web-pvc  
6.spec:  
7.  accessModes:  
8.    - ReadWriteOnce  
9.  resources:  
10.    requests:  
11.      storage: 1Gi  
12.  storageClassName: nfs  
13.[root@master yaml]# kubectl apply -f web-pvc.yaml   <br/14.persistentvolumeclaim/web-pvc created  15.[root@master yaml]# kubectl get pvc  
br/>17.web-pvc   Bound    web-pv1   1Gi        RWO            nfs            5s  
18.[root@master yaml]# kubectl get pv  <br/19.NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM             STORAGECLASS   REASON   AGE  
20.web-pv1   1Gi        RWO            Recycle          Bound       default/web-pvc   nfs                     8m59s  
21.web-pv2   2Gi        RWO            Recycle          Available                     nfs                     7m30s 
通過上面的實驗得出:
如果,K8s集群中,有很多類似的PV,PVC在去向PV申請空間的時候,不僅會考慮名稱以及訪問控制模式,還會考慮PVC申請空間的大小,會分配最合適大小的PV。

三、分析storageclass 資源對象的作用及優點。
1.使用PV和PVC可以實現數據持久化,假如我們的PV容量為10G,定義訪問模式為RWO,而我們PVC申請的存儲空間為5G,那么被申請的PV就有容量被浪費掉了,因為訪問模式只能被單個節點掛載。還有,我們每次去創建PV也是比較麻煩的,所以這時候就有了動態的自動的創建所需要的PV了(Storage Class)。
Storage Class:即存儲類,是K8s資源類型的一種,它是有管理員為管理PV更加方便創建的一個邏輯組,可以按照存儲系統的性能高低,或者綜合服務質量,備份策略等分類。不過k8s本身不知道類別到底是什么,它這是作為一個描述。
優點:支持PV的動態創建,當用戶用到持久性存儲時,不必再去提前創建PV,而是直接創建PVC就可以了,非常的方便。
存儲類對象的名稱很重要,并且除了名稱之外,還有三個關鍵字段:
Provisioner(供給方、提供者):即提供了存儲資源的存儲系統。k8s內建有多重供給方,這些供給方的名字都以“kubernetes.io”為前綴。并且還可以自定義。
Parameters(參數):存儲類使用參數描述要關聯到的存儲卷,注意不同的供給方參數也不同。
ReclaimPlicy:PV的回收策略。
關于Storage Class的詳情介紹:
https://www.kubernetes.org.cn/pvpvcstorageclass

2.做一個自動創建PV的實驗:
基于nginx運行一個web服務,使用Deployment資源對象,replicas=3.持久化存儲目錄為默認主目錄,使用storageclass自動創建PV。

基于NFS:

1)首先NFS服務的開啟:
1.[root@master yaml]# yum install -y nfs-utils rpcbind  #這里注意三臺都要安裝NFS服務。
2.[root@master yaml]# vim /etc/exports  
3./nfsdata  *(rw,sync,no_root_squash)  
4.[root@master yaml]# mkdir /nfsdata  
5.[root@master yaml]# systemctl start rpcbind  
6.[root@master yaml]# systemctl start nfs-server.service   
7.[root@master yaml]# showmount -e  
8.Export list for master:  
9./nfsdata *  
2)創建RBAC授權:
1.[root@master yaml]# vim rbac-rolebind.yaml      #為了給SC資源操作K8s集群的權限。  
2.  
3.kind: Namespace  
4.apiVersion: v1  
5.metadata:  
6.  name: lbs-test  
7.---  
8.apiVersion: v1  
9.kind: ServiceAccount        #創建Rbac授權用戶。及定義權限。  
10.metadata:  
11.  name: nfs-provisioner  
12.  namespace: lbs-test  
13.---  
14.apiVersion: rbac.authorization.k8s.io/v1  
15.kind: ClusterRole  
16.metadata:  
17.  name: nfs-provisioner-runner  
18.  namespace: lbs-test  
19.rules:  
20.   -  apiGroups: [""]  
21.      resources: ["persistentvolumes"]  
22.      verbs: ["get", "list", "watch", "create", "delete"]  
23.   -  apiGroups: [""]  
24.      resources: ["persistentvolumeclaims"]  
25.      verbs: ["get", "list", "watch", "update"]  
26.   -  apiGroups: ["storage.k8s.io"]  
27.      resources: ["storageclasses"]  
28.      verbs: ["get", "list", "watch"]  
29.   -  apiGroups: [""]  
30.      resources: ["events"]  
31.      verbs: ["watch", "create", "update", "patch"]  
32.   -  apiGroups: [""]  
33.      resources: ["services", "endpoints"]  
34.      verbs: ["get","create","list", "watch","update"]  
35.   -  apiGroups: ["extensions"]  
36.      resources: ["podsecuritypolicies"]  
37.      resourceNames: ["nfs-provisioner"]  
38.      verbs: ["use"]  
39.---  
40.kind: ClusterRoleBinding  
41.apiVersion: rbac.authorization.k8s.io/v1  
42.metadata:  
43.  name: run-nfs-provisioner  
44.subjects:  
45.  - kind: ServiceAccount  
46.    name: nfs-provisioner  
47.    namespace: lbs-test  
48.roleRef:  
49.  kind: ClusterRole  
50.  name: nfs-provisioner-runner  
51.  apiGroup: rbac.authorization.k8s.io 

執行yaml文件:

1.[root@master yaml]# kubectl apply -f rbac-rolebind.yaml  
namespace/lbh-test created  
serviceaccount/nfs-provisioner created  
clusterrole.rbac.authorization.k8s.io/nfs-provisioner-runner created  
clusterrolebinding.rbac.authorization.k8s.io/run-nfs-provisioner created  
3)創建nfs-client-provisioner容器:
1.[root@master yaml]# vim nfs-deployment.yaml  
2.  
3.apiVersion: extensions/v1beta1  
4.kind: Deployment  
5.metadata:  
6.  name: nfs-client-provisioner  
7.  namespace: lbs-test  
8.spec:  
9.  replicas: 1       #副本數量為1  
10.  strategy:  
11.    type: Recreate  
12.  template:  
13.    metadata:  
14.      labels:  
15.        app: nfs-client-provisioner  
16.    spec:  
17.      serviceAccount: nfs-provisioner       #指定賬戶  
18.      containers:  
19.        - name: nfs-client-provisioner  
20.          image: registry.cn-hangzhou.aliyuncs.com/open-ali/nfs-client-provisioner      #使用的鏡像。  
21.          volumeMounts:  
22.            - name: nfs-client-root  
23.              mountPath:  /persistentvolumes        #指定容器內的掛載目錄  
24.          env:  
25.            - name: PROVISIONER_NAME        #這是這個容器內置的變量  
26.              value: lbs-test              #這是上面變量的值(名字)  
27.            - name: NFS_SERVER              #內置變量,用于指定nfs服務的IP  
28.              value: 192.168.2.50             
29.            - name: NFS_PATH                #內置變量,指定的是nfs共享的目錄  
30.              value: /nfsdata  
31.      volumes:              #這下面是指定上面掛載到容器內的nfs的路徑及IP  
32.        - name: nfs-client-root  
33.          nfs:  
34.            server: 192.168.2.50  
35.            path: /nfsdata  

NFS-deployment:
作用:其實它是一個NFS客戶端。它通過K8S的內置的NFS驅動掛載遠端的NFS服務器到本地目錄;然后將自身作為storage provider,關聯storage class。

執行yaml文件:1.[root@master yaml]# kubectl apply -f nfs-deployment.yaml   <br/" rel="nofollow">br/>1.[root@master yaml]# kubectl apply -f nfs-deployment.yaml   <br/deployment.extensions/nfs-client-provisioner created

4)創建SC(Storage Class)自動創建pv
1.[root@master yaml]# vim test-storageclass.yaml  
2.apiVersion: storage.k8s.io/v1  
3.kind: StorageClass  
4.metadata:  
5.  name: sc-nfs  
6.  namespace: lbs-test      #名稱空間  
7.provisioner: lbs-test      #這里要與deployment的env環境變量中的value值對應。  
8.reclaimPolicy: Retain       #回收策略為:retain。  

執行yaml文件:
1.[root@master yaml]# kubectl apply -f test-storageclass.yaml   
storageclass.storage.k8s.io/sc-nfs created  
5)創建PVC
1.[root@master yaml]# vim test-pvc.yaml  
2.  
3.apiVersion: v1  
4.kind: PersistentVolumeClaim  
5.metadata:  
6.  name: lbs-claim  
7.  namespace: lbs-test  
8.  
9.spec:  
10.  storageClassName: sc-nfs   需要與storageclass的名字一致
11.  accessModes:  
12.    - ReadWriteMany  
13.  resources:  
14.    requests:  
15.      storage: 500Mi  
當我們創建完PVC后,會自動創建一個PV,其目錄在NFS共享目錄下:
1.[root@master yaml]# ls /nfsdata/  
lbs-test-lbs-claim-pvc-71262c5a-f866-4bc6-a22f-cd49daf13edf  
  
2.[root@master yaml]# kubectl get pv -n lbs-test   
3.NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS        CLAIM                  STORAGECLASS   REASON   AGE  
pvc-71262c5a-f866-4bc6-a22f-cd49daf13edf   500Mi      RWX            Delete           Bound         lbs-test/lbs-claim    sc-nfs                  26m  
6)**基于nginx運行web服務,使用Deployment資源對象,副本數量三個,持久化存儲目錄為默認主目錄。將默認主目錄內容,更改為自己的名稱,并驗證數據自動創建的PV目錄下是否有數據。**
創建Deployment資源:
1.[root@master yaml]# vim nginx.yaml  
2.  
3.apiVersion: extensions/v1beta1  
4.kind: Deployment  
5.metadata:  
6.  name: lbs-web  
7.  namespace: lbs-test  
8.spec:  
9.  replicas: 3  
10.  template:  
11.    metadata:  
12.      labels:  
13.        app: web  
14.    spec:  
15.      containers:  
16.      - name: nginx  
17.        image: nginx  
18.        volumeMounts:  
19.        - name: lbs-web  
20.          mountPath: /usr/share/nginx/html/   
21.      volumes:  
22.      - name: lbs-web  
23.        persistentVolumeClaim:  
24.          claimName: lbs-claim  
執行yaml文件,并查看Pod:
1.[root@master yaml]# kubectl apply -f nginx.yaml   
2.deployment.extensions/lbh-web created  
3.  
4.[root@master yaml]# kubectl get pod -n lbs-test   
5.NAME                                      READY   STATUS    RESTARTS   AGE  
6.lbs-web-6d596b6666-68wls                  1/1     Running   0          2m29s  
7.lbs-web-6d596b6666-k8vz2                  1/1     Running   0          2m29s  
8.lbs-web-6d596b6666-pvppq                  1/1     Running   0          2m29s  
分別進入容器,配置網頁根目錄:
1.[root@master yaml]# kubectl exec -it -n lbs-test lbs-web-6d596b6666-68wls /bin/bash  
2.root@lbs-web-6d596b6666-68wls:/# cd /usr/share/nginx/html/  
3.root@lbs-web-6d596b6666-68wls:/usr/share/nginx/html# echo 123 > index.html  
4.root@lbs-web-6d596b6666-68wls:/usr/share/nginx/html# ls  
5.index.html  
6.root@lbs-web-6d596b6666-68wls:/usr/share/nginx/html# exit  

其他兩臺步驟一樣。

查看自動創建得分PV目錄下是否有數據:
1.[root@master yaml]# cat /nfsdata/lbs-test-lbs-claim-pvc-71262c5a-f866-4bc6-a22f-cd49daf13edf/index.html   
2.123  
訪問網頁測試:
1.[root@master yaml]# kubectl get pod -o wide -n lbs-test   
2.NAME                                      READY   STATUS    RESTARTS   AGE     IP           NODE     NOMINATED NODE   READINESS GATES  
3.lbs-web-6d596b6666-68wls                  1/1     Running   0          11m     10.244.2.7   node02   <none>           <none>  
4.lbs-web-6d596b6666-k8vz2                  1/1     Running   0          11m     10.244.2.9   node02   <none>           <none>  
5.lbs-web-6d596b6666-pvppq                  1/1     Running   0          11m     10.244.2.8   node02   <none>           <none>  
6.[root@master yaml]# curl 10.244.2.7     
7.123  

nginx容器內的網頁根目錄和本地的nfs共享目錄關聯。
數據不會因容器,pod被刪除,而丟失。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

九龙城区| 萨迦县| 甘德县| 湖州市| 巴彦淖尔市| 芦山县| 荆门市| 建昌县| 满洲里市| 邮箱| 天门市| 额尔古纳市| 元朗区| 东辽县| 东莞市| 莫力| 尚志市| 宁河县| 平舆县| 镇雄县| 宿迁市| 休宁县| 济阳县| 龙门县| 阿瓦提县| 油尖旺区| 阿巴嘎旗| 黑河市| 鸡西市| 定襄县| 汾阳市| 大洼县| 浪卡子县| 河池市| 六安市| 女性| 文安县| 洞口县| 左权县| 始兴县| 扎兰屯市|