kubernetes學習 數據管理 Volume (一)

1、Volumejava

      爲了持久化保存容器的數據,能夠使用 Kubernetes Volume。api

      Volume的生命週期獨立於容器,Pod中的容器可能被銷燬和重建,但Volume會被保存。spa

  本質上,Kubernetes Volume 是一個目錄,這一點與 Docker Volume 相似。當 Volume mount Pod,Pod 中的全部容器均可以訪問這個 Volume。3d

      Kubernetes 也支持多種 backend 類型, 包括 emptyDir、hostPath、GCEPersistent Disk、AWS Elastic Block Store、NFS、Ceph等。Volume提供了對各類 backend 的抽象,容器在使用 Volume 讀寫數據的時候不須要關心數據究竟是存放在本地節點的文件系統中仍是雲硬盤中。對它來講,全部類型的 Volume 都只是一個目錄。
blog

 

2、emptyDir生命週期

  emptyDIr 是最基礎的 Volume 類型。正如其名字所示,一個 emptyDir Volume 是 Host 上的一個空目錄。io

  empty Volume 對於容器來講是持久的,對於 Pod 則不是。當 Pod 從節點刪除時,Volume 的內容也會被刪除。但若是隻是容器被銷燬而 Pod 還在,則 Volume 不受影響。ast

  也就是說: emptyDir Volume 的生命週期與 Pod 一致。class

  Pod 中全部的容器能夠共享 Volume,他們能夠制定各自的 mount 路徑。容器

apiVersion: v1
kind: Pod
metadata:
  name: producer-consumer
spec:
  containers:
  - image: busybox
    name: producer-consumer
spec:
  containers:
  - image: busybox
    name: producer
    volumeMounts:
    - mountPath: /producer_dir
      name: shared-volume
    args:
    - /bin/sh
    - -c
    - echo "hello world" > /producer_dir/hello ; sleep 30000

  - image: busybox
    name: consumer
    volumeMounts:
    - mountPath: /consumer_dir
      name: shared-volume
    args:
    - /bin/sh
    - -c
    - cat /consumer_dir/hello ; sleep 30000

  volumes:
  - name: shared-volume
    emptyDir: {}

  模擬一個producer-consumer場景。Pod 有兩個容器 producer 和 consumer,他們共享一個 Volume。producer 負責往 Volume中寫數據, consumer 負責從 Volume 中讀取數據。

    1) 文件最底部 volumes 定義一個 emptyDir 類型的 Volume shared-volume 

    2) producer 容器將 shared-volume mount /producer_dir 目錄

    3) producer 經過 echo 將數據寫到文件 hello

    4) consumer 容器將 shared-volume mount/consumer_dir 目錄

    5) consumer 經過 cat 從文件 hello 讀取數據

  執行建立 Pod:    

  

相關文章
相關標籤/搜索