08-kubernetesストレージボリューム

9852 ワード

目次
  • ストレージボリューム
  • emptyDirテストおよび
  • の使用
  • Podテストは共有NFSに掛かっている
  • テストリスト
  • を書く
  • テスト
  • pv, pvc
  • いくつかのPV
  • を作成
  • テストのPodとPVC
  • を作成

    ストレージボリューム


    4つに分けられます.
  • ステータスあり、
  • を格納必要がある.
  • ステータスあり、
  • を保存する必要はありません.
  • ステータスなし、
  • を記憶する必要がある.
  • ステータスなし、
  • を保存する必要はありません.
    Podはローカルのディスクまたはメモリにマウントされ、emptyDIrと呼ばれ、一時的に空のディレクトリと呼ばれ、Podが削除されるにつれて削除されます.
    hostPathホストディレクトリは、Podコンテナにホストディレクトリデータが表示されます.
    分散ストレージ:
    glusterfs, ceph-rbd, cephfs

    emptyDirのテストと使用


    emptyDirは、ローカルディスクまたはメモリが使用することを示す().
    対応するインベントリファイルを作成するには、次の手順に従います.
    [root@master volume]# cat pod-vol-demo.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-demo
      namespace: default
      labels:
        app: myapp
        tier: frontend
      annotations:
        jubaozhu.com/created-by: "cluster admin"
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html/         # myapp  , html  /usr/share/nginx/html/  
      - name: busybox
        image: busybox:latest
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: html
          mountPath: /data/                         # busybox  ,, html  /data/  
        command: ["/bin/sh", "-c", "while true; do echo $$(date) >> /data/index.html; sleep 2; done"]       #   /data/index.html  , myapp web 
      volumes:
      - name: html          #  html volumes
        emptyDir: {}        #  ,  emptyDir  medium     sizeLimit  。

    作成
    [root@master volume]# kubectl apply -f pod-vol-demo.yaml 
    pod/pod-demo created
    [root@master volume]# kubectl get pods -o wide
    NAME                             READY   STATUS    RESTARTS   AGE     IP            NODE                NOMINATED NODE   READINESS GATES
    pod-demo                         2/2     Running   0          29s     10.244.2.25   node02.kubernetes              

    アクセスPod対応ipのテスト
    [root@master volume]# curl 10.244.2.25
    Thu Aug 1 08:41:18 UTC 2019
    Thu Aug 1 08:41:20 UTC 2019
    Thu Aug 1 08:41:22 UTC 2019
    Thu Aug 1 08:41:24 UTC 2019
    Thu Aug 1 08:41:26 UTC 2019
    Thu Aug 1 08:41:28 UTC 2019
    Thu Aug 1 08:41:30 UTC 2019
    Thu Aug 1 08:41:32 UTC 2019
    Thu Aug 1 08:41:34 UTC 2019
    Thu Aug 1 08:41:36 UTC 2019
    Thu Aug 1 08:41:38 UTC 2019
    Thu Aug 1 08:41:40 UTC 2019
    Thu Aug 1 08:41:42 UTC 2019
    Thu Aug 1 08:41:44 UTC 2019
    Thu Aug 1 08:41:46 UTC 2019
    Thu Aug 1 08:41:48 UTC 2019
    Thu Aug 1 08:41:50 UTC 2019
    Thu Aug 1 08:41:52 UTC 2019

    書き込みもアクセスも正常で、所望の効果を達成していることがわかります.

    Podテストは共有NFSに掛かっている


    今回のテストでは、マスターノードにNFSをインストールし、以下のように構成しました.
    [root@master volume]# cat /etc/exports
    /data/volumes   *(rw,no_root_squash)

    テストの開始
    [root@master data]# systemctl start nfs
    [root@master data]# systemctl start rpcbind
    [root@master data]# showmount -e localhost
    Export list for localhost:
    /data/volumes 0.0.0.0/0

    に注意
      `nfs-utils`  , Pod , , `mount.nfs` 

    テストページへの書き込み
    [root@master volume]# echo '

    NFS stor01

    ' > /data/volumes/index.html

    テストリストを書く

    [root@master volume]# cat pod-vol-nfs.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-vol-nfs
      namespace: default
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html/
      volumes:
      - name: html
        nfs:
          path: /data/volumes
          server: 10.0.20.20

    ビューの作成
    [root@master volume]# kubectl apply -f pod-vol-nfs.yaml 
    pod/pod-vol-nfs created
    [root@master volume]# kubectl get pods -o wide
    NAME               READY   STATUS    RESTARTS   AGE   IP            NODE                NOMINATED NODE   READINESS GATES
    pod-hostpath-vol   1/1     Running   0          88m   10.244.3.32   node01.kubernetes              
    pod-vol-nfs        1/1     Running   0          5s    10.244.1.29   node03.kubernetes              

    Podがnode 03ノードに割り当てられていることがわかります

    テスト


    アクセスのテスト
    [root@master volume]# curl 10.244.1.29
    

    NFS stor01

    #

    Podを削除して再度テストを作成
    [root@master volume]# kubectl delete -f pod-vol-nfs.yaml 
    pod "pod-vol-nfs" deleted
    [root@master volume]# kubectl apply -f pod-vol-nfs.yaml 
    pod/pod-vol-nfs created
    [root@master volume]# kubectl get pods -o wide
    NAME               READY   STATUS    RESTARTS   AGE   IP            NODE                NOMINATED NODE   READINESS GATES
    pod-hostpath-vol   1/1     Running   0          90m   10.244.3.32   node01.kubernetes              
    #  Pod  node02  
    pod-vol-nfs        1/1     Running   0          2s    10.244.2.27   node02.kubernetes              
    [root@master volume]# curl 10.244.2.27
    

    NFS stor01

    #

    pv, pvc


    PVはクラスタ資源に属し、クラスタ内のすべての名称空間が利用可能であり、全行程PersistentVolumeである.
    PVCは名称空間レベル、すなわち標準資源類であり、全行程PersistentVolumeClaimである.
    PodではPVCを定義、その後は定義容量の大きさに応じて、PVCはいずれかのPV以上に自動的にバインドされる.

    いくつかのPVを作成

    [root@master volumes]# mkdir /data/volumes/v{1,2,3,4,5} -p
    [root@master volume]# cat pv-demo.yaml 
    apiVersion: v1
    kind: PersistentVolume              #  
    metadata:   
      name: pv001                       # PV  
      labels:
        name: pv001                     #  
    spec:
      nfs:
        path: /data/volumes/v1          # PV 
        server: 10.0.20.20
      accessModes: ["ReadWriteMany", "ReadWriteOnce"]   #  
      capacity:
        storage: 2Gi                    # PV 
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata: 
      name: pv002
      labels:
        name: pv002
    spec:
      nfs:
        path: /data/volumes/v2
        server: 10.0.20.20
      accessModes: ["ReadWriteMany"]
      capacity:
        storage: 5Gi
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata: 
      name: pv003
      labels:
        name: pv003
    spec:
      nfs:
        path: /data/volumes/v3
        server: 10.0.20.20
      accessModes: ["ReadWriteMany", "ReadWriteOnce"]
      capacity:
        storage: 20Gi
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata: 
      name: pv004
      labels:
        name: pv004
    spec:
      nfs:
        path: /data/volumes/v4
        server: 10.0.20.20
      accessModes: ["ReadWriteMany", "ReadWriteOnce"]
      capacity:
        storage: 10Gi
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata: 
      name: pv005
      labels:
        name: pv005
    spec:
      nfs:
        path: /data/volumes/v5
        server: 10.0.20.20
      accessModes: ["ReadWriteMany", "ReadWriteOnce"]
      capacity:
        storage: 10Gi

    ビューの作成
    [root@master volume]# kubectl apply -f pv-demo.yaml 
    persistentvolume/pv001 created
    persistentvolume/pv002 created
    persistentvolume/pv003 created
    persistentvolume/pv004 created
    persistentvolume/pv005 created
    [root@master volume]# kubectl get pv -o wide
    NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE   VOLUMEMODE
    pv001   2Gi        RWO,RWX        Retain           Available                                   51s   Filesystem
    pv002   5Gi        RWX            Retain           Available                                   29s   Filesystem
    pv003   20Gi       RWO,RWX        Retain           Available                                   29s   Filesystem
    pv004   10Gi       RWO,RWX        Retain           Available                                   29s   Filesystem
    pv005   10Gi       RWO,RWX        Retain           Available                                   51s   Filesystem

    テスト用のPodとPVCの作成

    [root@master volume]# cat pod-vol-pvc.yaml 
    apiVersion: v1
    kind: PersistentVolumeClaim     # PVC 
    metadata:
      name: mypvc
      namespace: default            #  
    spec:
      accessModes: ["ReadWriteMany"]    #  
      resources:
        requests:
          storage: 6Gi              #  
    ---
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-vol-pvc
      namespace: default
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html/
      volumes:
      - name: html
        persistentVolumeClaim:
          claimName: mypvc

    PVC PVステータスの作成と表示
    [root@master volume]# kubectl apply -f pod-vol-pvc.yaml 
    persistentvolumeclaim/mypvc created
    pod/pod-vol-pvc created
    [root@master volume]# kubectl get pods
    NAME          READY   STATUS    RESTARTS   AGE
    pod-vol-pvc   1/1     Running   0          3s
    [root@master volume]# kubectl get pvc
    NAME    STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    mypvc   Bound    pv005    10Gi       RWO,RWX                       36s          #  PVC  PV,PV  pv005,   10G
    [root@master volume]# kubectl get pv
    NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM           STORAGECLASS   REASON   AGE
    pv001   2Gi        RWO,RWX        Retain           Available                                           9m37s
    pv002   5Gi        RWX            Retain           Available                                           9m15s
    pv003   20Gi       RWO,RWX        Retain           Available                                           9m15s
    pv004   10Gi       RWO,RWX        Retain           Available                                           9m15s
    pv005   10Gi       RWO,RWX        Retain           Bound       default/mypvc                           9m37s        #   Bound,   Retain

    転載先:https://www.cnblogs.com/winstom/p/11308450.html