Kubernetes相关

2019-06-19 emptydir、hostpath、loc

2019-06-19  本文已影响0人  胡生生

应用场景

emptydir

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - image: busybox
    name: test-emptydir
    command: [ "sleep", "3600" ]
    volumeMounts:
    - mountPath: /data
      name: data-volume
  volumes:
  - name: data-volume
    emptyDir: {}
--------------------- 
注意:
1.需要使用内存作为emptyDir的可用存储资源也是可以的,只需要在创建emptyDir卷时增加一个emptyDir.medium字段的定义,并赋值为"Memory"即可;
2.在使用tmpfs文件系统作为emptyDir的存储后端时,如果遇到node节点重启,则emptyDir中的数据也会全部丢失。同时,你编写的任何文件也都将计入Container的内存使用限制,即empty dir方式保存的数据不能持久化。

hostpath

apiVersion: v1
kind: Pod
metadata:
  name: test-pod2
spec:
  containers:
  - image: busybox
    name: test-hostpath
    command: [ "sleep", "3600" ]
    volumeMounts:
    - mountPath: /test-data
      name: test-volume
  volumes:
  - name: test-volume
    hostPath:
      # directory location on host
      path: /data
      # this field is optional
      type: Directory
--------------------- 
注意:
1.不提供pod的亲和性,即host path映射的目录在node1,而pod可能被调度到node2,导致原来的在node1的数据不存在,pod一直无法启动起来;
2.能够提供pv/pvc/storage class的方式使用;
3.数据能持久化。

localvolume

apiVersion: v1
kind: PersistentVolume
metadata:
  name: example-pv
spec:
  capacity:
    storage: 100Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  storageClassName: local-storage
  local:
    path: /mnt/disks/ssd1
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - example-node
--------------------- 
注意:
1.nodeAffinity字段是必须配置的,k8s依赖于这个标签为你定义的Pods在正确的nodes节点上找到需要使用的local volumes,避免发生host path找不到映射数据的情况,这也是host path和local volume的最大区别,所以host path最适合单机k8s的测试,而local volume适合小规模集群的使用,因为local volume最终还是没有摆脱node的束缚,当这个node磁盘或其他部分损坏,将会影响在其上面的应用迁移;
2.能够提供pv/pvc/storage class的方式使用;
3.数据能够持久化;
4.host path和local volume还有一个共同的缺点:都需要在对应节点上创建映射的目录或文件,否则pod无法启动,报目录找不到错误。

链接

上一篇 下一篇

猜你喜欢

热点阅读