容器引擎CCE

    使用本地存储

    EmptyDir

    emptyDir类型的Volume在Pod分配到Node上时被创建,Kubernetes会在Node上自动分配一个目录,因此无需指定宿主机Node上对应的目录文件。 这个目录的初始内容为空,

    当Pod从Node上移除时,emptyDir中的数据会被永久删除。

    使用kubectl create -f testemptyDir.yaml创建一个pod,该pod使用EmptyDir,testemptyDir.yaml如下所示:

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-ed
    spec:
      containers:
      - image: nginx
        name: test-container
        volumeMounts:
        - mountPath: /test
          name: cache-volume
      volumes:
      - name: cache-volume
        emptyDir: {}

    #查看创建的pods详情 $ kubectl describe pods test-ed #进入pod内部查看挂载效果 $ kubectl exec -it test-ed -c test-container /bin/sh

    HostPath

    hostPath类型则是映射Node文件系统中的文件或者目录到Pod里。在使用hostPath类型的存储卷时,也可以设置type字段,支持的类型有文件、目录、File、Socket、CharDevice和BlockDevice。

    使用kubectl create -f testhostPath.yaml创建一个pod,该pod使用hostPath,testhostPathr.yaml如下所示:

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-hp
    spec:
      containers:
      - image: nginx
        name: test-container
        volumeMounts:
        - mountPath: /test-pd
          name: test-volume
      volumes:
      - name: test-volume
        hostPath:
          #directory location on host
          path: /data

    Local Volume

    概述

    Local Volume 允许将 Node 本地的磁盘、分区或者目录作为持久化存储使用。Local Volume适合应用于数据缓存,应用可以就近访问数据,快速处理,同时还适用于分布式存储系统,如分布式数据库Cassandra ,分布式文件系统ceph/gluster。

    目前Kubernetes 对于 Local PV 的一些支持情况:

    • Kubernetes v1.7: 正式引入 Local PV;
    • Kubernetes v1.10: Local PV 进入 Beta;
    • Kubernetes v1.14: Local PV 进入 GA

    创建storage class

    kubectl create -f local-volume.yaml,local-volume.yaml内容如下

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: local-volume
    provisioner: kubernetes.io/no-provisioner
    volumeBindingMode: WaitForFirstConsumer

    其中WaitForFirstConsumer表示PV不要立即绑定PVC,而是直到有Pod需要用PVC的时候才绑定。

    静态创建PV

    通过kubectl create -f local-volume-pv.yaml,静态创建一个5GiB的PV;该PV使用node的 /data/volume 目录(需要手动创建目录)。

    local-volume-pv.yaml 内容如下:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: example-local-pv
    spec:
      capacity:
        storage: 5Gi
      accessModes:
      - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      storageClassName: local-volume
      local:
        path: /data/volume
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - HOSTNAME

    通过kubectl get nodes 获得node_name替换上面的HOSTNAME字段。

    $ kubectl get pv example-local-pv
    $ kubectl get pv
    NAME                                      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                          STORAGECLASS      REASON   AGE
    example-local-pv                          5Gi        RWO            Retain           Bound    default/myclaim                local-volume               5s

    使用local volume PV

    创建一个关联 local-volume的PVC,并创建一个pod使用该pvc,kubectl create -f local-volume-pvc.yaml

    local-volume-pvc.yaml内容如下:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mypvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 5Gi
      storageClassName: local-volume
    ---
    kind: Pod
    apiVersion: v1
    metadata:
      name: mypod
    spec:
      containers:
        - name: myfrontend
          image: nginx
          volumeMounts:
          - mountPath: "/usr/share/nginx/html"
            name: mypd
      volumes:
        - name: mypd
          persistentVolumeClaim:
            claimName: mypvc

    查看创建的pv,pvc,pod。

    $ kubectl get pv
    NAME                    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                          STORAGECLASS      REASON   AGE
    example-local-pv        5Gi        RWO            Retain           Bound    default/mypvc                  local-volume               5s
    $ kubectl get pvc
    NAME                   STATUS   VOLUME                                    CAPACITY   ACCESS MODES   STORAGECLASS      AGE
    mypvc                  Bound    example-local-pv                          5Gi        RWO            local-volume      4m20s
    $ kubectl get pods
    NAME                             READY   STATUS    RESTARTS   AGE
    mypod                            1/1     Running   0          4m28s

    向本地的/data/volume写入内容,使用curl查看是否写入成功

    $ echo "hello world" > /data/volume/index.html
    $ curl 172.19.4.63
    #这里替换自己的pod的ip
    hello world

    删除时注意首先删除创建的pod,随后删除pvc,pv。

    一篇
    概述
    一篇
    使用云盘CDS