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: