…… spec: containers: …… volumeMounts: #掛載一個數據卷 - name: app-logs #掛載數據卷名字 mountPath: /logs #掛載路徑 …… volumes: #定義一個數據卷 - name: app-logs #定義一個數據卷名字 emptyDir: {} # volume的類型,emryDir的參數設置為{} --- #注解: "emptyDir: 無需指定宿主機目錄,由pod自動創建,pod移除時候數據會永久刪除,作為容器間的共享目錄 " --- #擴展: apiVersion: v1 kind: Pod metadata: name: volume-pod spec: containers: - name: tomcat image: tomcat ports: - containerPort: 8080 volumeMounts: - name: app-logs mountPath: /usr/local/tomcat/logs # 容器中的日志目錄 - name: logreader # 容器名稱,使用kubectl指定容器時需要使用此名稱,無法使用容器ID image: busybox command: ["sh","-c","tail -f /logs/catalina*.log"] volumeMounts: - name: app-logs mountPath: /logs volumes: # volume設定的具體信息 - name: app-logs emptyDir: {} # volume的類型,emryDir的參數設置為{} #這里的示例是將tomcat容器的日志目錄和logreader的log目錄共享,通過在logreader執行查看日志的命令,就可以在logreader中看到tomcat的啟動日志。
hostPath: Pod掛載宿主機上的文件和目錄,可用於永久保存日志,容器內部訪問宿主機數據,
…… spec: containers: …… volumeMounts: #掛載一個數據卷 - name: app-logs #掛載數據卷名字 mountPath: /logs #掛載路徑 …… volumes: #定義一個數據卷 - name: app-logs #定義一個數據卷名字 emptyDir: {} # volume的類型,emryDir的參數設置為{} ------------------------------------------------ apiVersion: v1 kind: Pod metadata: name: volume-pod spec: containers: - name: tomcat image: tomcat ports: - containerPort: 8080 volumeMounts: - name: app-logs mountPath: /usr/local/tomcat/logs volumes: - name: app-logs hostPath: # 宿主機的本地目錄,需要事先創建,否則pod無法啟動 path: /logs # this field is optional type: Directory #當pod刪除時,數據依舊保存在宿主機目錄中。
apiVersion: v1 kind: Pod metadata: name: cephfs spec: containers: - name: cephfs-rw image: kubernetes/pause volumeMounts: - mountPath: "/mnt/cephfs" name: cephfs volumes: - name: cephfs cephfs: monitors: - 10.16.154.78:6789 - 10.16.154.82:6789 - 10.16.154.83:6789 # by default the path is /, but you can override and mount a specific path of the filesystem by using the path attribute # path: /some/path/in/side/cephfs #更改掛載 user: admin secretFile: "/etc/ceph/admin.secret" readOnly: true
什么情況下會使用到valumes
需要在應用程序里面加一個sidecar,這個容器是一個收集日志的容器
…… spec: containers: …… volumesMounts: - mountPath: /etc/timezone #掛載到容器的目錄 name: timezone #需要掛載持久卷的名字 …… volumes: - name :timezone #定義一個持久卷,可以寫多個,多加一個name即可 hostPath: path: /etc/timezone #宿主機的目錄 emptyDir: {} #和以下不同的是,將type換成這個即可 " 和volumes不同的是,如果刪除pod,emptyDir卷中的數據也將被刪除,一般emptyDir卷用於pod中的不同容器共享數據
,他可以掛在到相同或者不同的路徑上 默認情況下,emptyDir卷支持節點上的任何介質,可能是SSD、磁盤、或網絡存儲,具體取決於自身的環境,
可以將emptyDir、medium字段設置為Memory字段設置為memory,讓kubernetes使用tmpfs,碎肉tmpfs非常快,但是tmpfs在節點重啟時
,數據同樣會被清除,並且設置的大小會被記入到COntainer的內存限制當中 "
…… spec: containers: …… volumesMounts: - mountPath: /etc/timezone #掛載到容器的目錄 name: timezone #需要掛載持久卷的名字 …… volumes: - name :timezone #定義一個持久卷,可以寫多個,多加一個name即可 hostPath: path: /etc/timezone #宿主機的目錄 type: File #掛載類型 """ type的類型: type為空字符串:默認選項,以為這掛載hostPath之前不會執行任何檢查 DirectotyOrCreate:如果給定的path不存在任何東西,name將根據需要創建一個權限為0755的空目錄,和kubelet具有相同的組合權限。 FileOrCreate:如果給定的路徑不存儲任何內容,則會根據需要創建一個空文件,權限設置為0655,和kubelet具有相同的組合所有權 File:文件不許存在給定的路徑中。 Socket:Unix套接子,必須存在於給定路徑中。 CharDevice:字符設備,必須存在於給定路徑中 BlockDevice:塊設備,必須存在於給定路徑中 """
#nfs服務器搭建跳過 …… spec: containers: …… volumesMounts: - mountPath: /mnt name: nfs-volumes volumes: -name: nfs-volumes nfs: server: 192.168.159.14 #nfs服務器ip path: /data/nfs/test-dp #/data/nfs是nfs共享的目錄