使用本地存储
所有文档
menu

容器引擎 CCE

使用本地存储

产品详情自助选购

emptyDir

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

说明

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

示例

创建 Pod,该 Pod 指定数据卷为 emptyDir:

    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: {}

查看创建的 Pod 详情:

    $ kubectl describe pod test-ed

进入 Pod 内部查看挂载效果:

    $ kubectl exec -it test-ed -c test-container /bin/sh

hostPath

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

示例

创建 Pod,该 Pod 数据卷指定 HostPath:

    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。

示例

创建storage class

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

说明

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

静态创建 PV

静态创建一个 5GiB 的 PV;该 PV 使用 node 的 /data/volume 目录(需要手动创建目录):

    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    # 替换对应的节点名称

使用 local volume PV

创建 PVC 绑定 local volume 的 PVC,并创建 Pod 使用该 PVC:

  1. 创建 PVC
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mypvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 5Gi
      storageClassName: local-volume
  1. 创建 Pod
    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
  1. 查看创建的 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
  1. 向本地的/data/volume写入内容,使用curl查看是否写入成功
    $ echo "hello world" > /data/volume/index.html
    $ curl 172.19.4.63    #这里替换自己的pod的ip
    hello world

注意

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

上一篇
概述
下一篇
使用云盘CDS