91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

kubernetes如何通過?pv和pvc來實現存儲管理?

發布時間:2020-05-29 16:52:51 來源:億速云 閱讀:722 作者:鴿子 欄目:云計算

kubernetes版本:1.16.0

概念

pv全稱為PersistentVolume(持久化卷),是對底層的共享存儲的一種抽象,它和具體的底層的共享存儲技術的實現方式有關,比如 Ceph、GlusterFS、NFS 等。

pvc全稱PersistentVolumeClaim(持久化卷聲明),PVC 是用戶存儲的一種聲明,PVC 消耗的是 PV 資源,對于真正使用存儲的用戶不需要關心底層的存儲實現細節,只需要直接使用 PVC 即可。

NFS

k8s支持的 PV 類型有很多,常見的有 Ceph、GlusterFs、nfs以及 hostPath,不過 hostPath 僅僅可用于單機測試。方便起見,我們以NFS存儲資源進行演示。

接下來我們在節點192.168.248.139上面安裝nfs服務,共享的數據目錄為/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節點上安裝nfs客戶端,我所使用的環境節點如下:

[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

必須在所有節點都安裝 nfs 客戶端,否則可能會導致 PV 掛載不上的問題。

創建pv

部署完nfs存儲,接下來我們就可以通過編輯yaml文件,來創建pv和pvc資源了。下面我們來創建一個 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文件中一些參數做以下解釋

nfs:表示使用的后端存儲為nfs

path:表示后端存儲共享的數據目錄

accessMode:是用來對pv進行訪問權限的設置,包括以下幾種方式:

  • ReadWriteOnce(RWO):讀寫權限,只能被單個節點掛載

  • ReadOnlyMany(ROX):只讀權限,可以被多個節點掛載

  • ReadWriteMany(RWX):讀寫權限,可以被多個節點掛載

persistentVolumeReclaimPolicy:表示pv的回收策略,默認為Retain,目前支持的有三種:

  • Retain(保留)

  • Recycle(回收)

  • Delete(刪除)

然后使用kubectl命令創建即可

[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已經創建成功,狀態為Available,表示pv-01已經準備就緒,可以被pvc申請使用。

pv的生命周期中可能會處于4種不同的階段:

  • Available(可用)

  • Bound(已綁定)

  • Released(已釋放)

  • Failed(失敗)

創建pvc

對應的yaml文件內容如下:

vim pvc-nfs.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-nfs
spec:
  accessModes: ["ReadWriteOnce"]
  resources:
    requests:
      storage: 2Gi

然后使用kubectl命令創建即可

[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已經創建成功,并且處于綁定狀態,pv也處于綁定狀態。

使用pvc

上面我們已經完成了pv和pvc的創建及綁定,接下來我們創建一個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命令創建即可

[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已經處于running狀態,我們可以通過如下命令查看deployment和svc的詳細信息

[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>

訪問測試

我們就可以通過任意節點的 IP:31080 端口來訪問我們這里的Nginx服務

kubernetes如何通過?pv和pvc來實現存儲管理?

為什么會出現403呢???那是應為我們的nfs共享目錄沒有文件導致

[root@localhost nfs]# pwd
/data/nfs
[root@localhost nfs]# ls
[root@localhost nfs]# 
我們創建一個index.html,然后訪問測試
[root@localhost nfs]# echo "<h2>Welcome k8s</h2>" > index.html

然后在刷新頁面:

kubernetes如何通過?pv和pvc來實現存儲管理?

我們可以看到已經可以正常訪問到頁面。

數據持久化測試


測試方法:

1、我們將創建的nginx應用刪除掉,然后重新創建nginx應用,然后訪問測試

結果:后端nfs存儲里面的數據不會丟失,頁面訪問正常

2、我們將創建的nginx應用和pv及pvc全部刪除,然后重新創建,然后訪問測試

結果:后端nfs存儲里面的數據不會丟失,頁面訪問正常


向AI問一下細節

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

AI

南康市| 揭阳市| 苏州市| 收藏| 东宁县| 博罗县| 汝南县| 平乐县| 闽侯县| 姜堰市| 扎囊县| 中牟县| 彰化县| 长沙市| 海兴县| 南漳县| 栾城县| 商河县| 成都市| 乌鲁木齐县| 苍南县| 封丘县| 山东| 晋城| 望奎县| 临江市| 文化| 阳原县| 彰武县| 新绛县| 凉山| 重庆市| 工布江达县| 谢通门县| 元朗区| 屯门区| 蕲春县| 沛县| 永胜县| 赣州市| 温泉县|